diff --git a/src/applications/differential/editor/DifferentialRevisionEditEngine.php b/src/applications/differential/editor/DifferentialRevisionEditEngine.php --- a/src/applications/differential/editor/DifferentialRevisionEditEngine.php +++ b/src/applications/differential/editor/DifferentialRevisionEditEngine.php @@ -262,6 +262,31 @@ ->attachComment($inline); } + $viewer_phid = $viewer->getPHID(); + $viewer_is_author = ($object->getAuthorPHID() == $viewer_phid); + if ($viewer_is_author) { + $state_map = PhabricatorTransactions::getInlineStateMap(); + + $inlines = id(new DifferentialDiffInlineCommentQuery()) + ->setViewer($viewer) + ->withRevisionPHIDs(array($object->getPHID())) + ->withFixedStates(array_keys($state_map)) + ->execute(); + if ($inlines) { + $old_value = mpull($inlines, 'getFixedState', 'getPHID'); + $new_value = array(); + foreach ($old_value as $key => $state) { + $new_value[$key] = $state_map[$state]; + } + + $xactions[] = id(new DifferentialTransaction()) + ->setTransactionType(PhabricatorTransactions::TYPE_INLINESTATE) + ->setIgnoreOnNoEffect(true) + ->setOldValue($old_value) + ->setNewValue($new_value); + } + } + return $xactions; } diff --git a/src/applications/differential/editor/DifferentialTransactionEditor.php b/src/applications/differential/editor/DifferentialTransactionEditor.php --- a/src/applications/differential/editor/DifferentialTransactionEditor.php +++ b/src/applications/differential/editor/DifferentialTransactionEditor.php @@ -58,6 +58,7 @@ $types[] = PhabricatorTransactions::TYPE_COMMENT; $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; + $types[] = PhabricatorTransactions::TYPE_INLINESTATE; $types[] = DifferentialTransaction::TYPE_ACTION; $types[] = DifferentialTransaction::TYPE_INLINE; @@ -256,6 +257,23 @@ return parent::applyCustomInternalTransaction($object, $xaction); } + protected function expandTransactions( + PhabricatorLiskDAO $object, + array $xactions) { + + // If we have an "Inline State" transaction already, the caller built it + // for us so we don't need to expand it again. + foreach ($xactions as $xaction) { + switch ($xaction->getTransactionType()) { + case PhabricatorTransactions::TYPE_INLINESTATE: + $this->didExpandInlineState = true; + break; + } + } + + return parent::expandTransactions($object, $xactions); + } + protected function expandTransaction( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) {