diff --git a/src/applications/maniphest/editor/ManiphestEditEngine.php b/src/applications/maniphest/editor/ManiphestEditEngine.php --- a/src/applications/maniphest/editor/ManiphestEditEngine.php +++ b/src/applications/maniphest/editor/ManiphestEditEngine.php @@ -60,10 +60,6 @@ $priority_map = ManiphestTaskPriority::getTaskPriorityMap(); - // TODO: Restore these or toss them: - // - When closing an unassigned task, assign the closing user. - // - Make sure implicit CCs on actions are working reasonably. - if ($object->isClosed()) { $priority_label = null; $owner_label = null; diff --git a/src/applications/maniphest/editor/ManiphestTransactionEditor.php b/src/applications/maniphest/editor/ManiphestTransactionEditor.php --- a/src/applications/maniphest/editor/ManiphestTransactionEditor.php +++ b/src/applications/maniphest/editor/ManiphestTransactionEditor.php @@ -745,5 +745,31 @@ return $errors; } + protected function expandTransaction( + PhabricatorLiskDAO $object, + PhabricatorApplicationTransaction $xaction) { + + $results = parent::expandTransaction($object, $xaction); + + switch ($xaction->getTransactionType()) { + case ManiphestTransaction::TYPE_OWNER: + // When a task is reassigned, move the old owner to the subscriber + // list so they're still in the loop. + $owner_phid = $object->getOwnerPHID(); + if ($owner_phid) { + $results[] = id(new ManiphestTransaction()) + ->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS) + ->setIgnoreOnNoEffect(true) + ->setNewValue( + array( + '+' => array($owner_phid => $owner_phid), + )); + } + break; + } + + return $results; + } + }