diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1426,6 +1426,7 @@ 'MultimeterViewer' => 'applications/multimeter/storage/MultimeterViewer.php', 'NuanceConduitAPIMethod' => 'applications/nuance/conduit/NuanceConduitAPIMethod.php', 'NuanceConsoleController' => 'applications/nuance/controller/NuanceConsoleController.php', + 'NuanceContentSource' => 'applications/nuance/contentsource/NuanceContentSource.php', 'NuanceController' => 'applications/nuance/controller/NuanceController.php', 'NuanceDAO' => 'applications/nuance/storage/NuanceDAO.php', 'NuanceGitHubEventItemType' => 'applications/nuance/item/NuanceGitHubEventItemType.php', @@ -5726,6 +5727,7 @@ 'MultimeterViewer' => 'MultimeterDimension', 'NuanceConduitAPIMethod' => 'ConduitAPIMethod', 'NuanceConsoleController' => 'NuanceController', + 'NuanceContentSource' => 'PhabricatorContentSource', 'NuanceController' => 'PhabricatorController', 'NuanceDAO' => 'PhabricatorLiskDAO', 'NuanceGitHubEventItemType' => 'NuanceItemType', diff --git a/src/applications/nuance/contentsource/NuanceContentSource.php b/src/applications/nuance/contentsource/NuanceContentSource.php new file mode 100644 --- /dev/null +++ b/src/applications/nuance/contentsource/NuanceContentSource.php @@ -0,0 +1,16 @@ +getPHID(); + $acting_as_phid = $this->getActingAsPHID($item); $xactions = array(); @@ -307,7 +307,7 @@ ->executeOne(); if (!$task) { $task = ManiphestTask::initializeNewTask($viewer) - ->setAuthorPHID($nuance_phid) + ->setAuthorPHID($acting_as_phid) ->setBridgedObjectPHID($xobj_phid); $title = $xobj->getProperty('task.title'); @@ -344,16 +344,12 @@ ->setContent($comment)); } - // TODO: Preserve the item's original source. - $source = PhabricatorContentSource::newForSource( - PhabricatorDaemonContentSource::SOURCECONST); - - // TODO: This should really be the external source. - $acting_phid = $nuance_phid; + $agent_phid = $command->getAuthorPHID(); + $source = $this->newContentSource($item, $agent_phid); $editor = id(new ManiphestTransactionEditor()) ->setActor($viewer) - ->setActingAsPHID($acting_phid) + ->setActingAsPHID($acting_as_phid) ->setContentSource($source) ->setContinueOnNoEffect(true) ->setContinueOnMissingFields(true); @@ -366,5 +362,10 @@ ); } + protected function getActingAsPHID(NuanceItem $item) { + // TODO: This should be an external account PHID representing the original + // GitHub user. + return parent::getActingAsPHID($item); + } } diff --git a/src/applications/nuance/item/NuanceItemType.php b/src/applications/nuance/item/NuanceItemType.php --- a/src/applications/nuance/item/NuanceItemType.php +++ b/src/applications/nuance/item/NuanceItemType.php @@ -144,4 +144,19 @@ return null; } + final protected function newContentSource( + NuanceItem $item, + $agent_phid) { + return PhabricatorContentSource::newForSource( + NuanceContentSource::SOURCECONST, + array( + 'itemPHID' => $item->getPHID(), + 'agentPHID' => $agent_phid, + )); + } + + protected function getActingAsPHID(NuanceItem $item) { + return id(new PhabricatorNuanceApplication())->getPHID(); + } + }