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 @@ -2951,6 +2951,7 @@ 0 => 'DifferentialDAO', 1 => 'PhabricatorPolicyInterface', 2 => 'HarbormasterBuildableInterface', + 3 => 'PhabricatorApplicationTransactionInterface', ), 'DifferentialDiffCreateController' => 'DifferentialController', 'DifferentialDiffProperty' => 'DifferentialDAO', @@ -3015,6 +3016,7 @@ 5 => 'HarbormasterBuildableInterface', 6 => 'PhabricatorSubscribableInterface', 7 => 'PhabricatorCustomFieldInterface', + 8 => 'PhabricatorApplicationTransactionInterface', ), 'DifferentialRevisionDetailView' => 'AphrontView', 'DifferentialRevisionEditController' => 'DifferentialController', diff --git a/src/applications/differential/storage/DifferentialDiff.php b/src/applications/differential/storage/DifferentialDiff.php --- a/src/applications/differential/storage/DifferentialDiff.php +++ b/src/applications/differential/storage/DifferentialDiff.php @@ -4,7 +4,8 @@ extends DifferentialDAO implements PhabricatorPolicyInterface, - HarbormasterBuildableInterface { + HarbormasterBuildableInterface, + PhabricatorApplicationTransactionInterface { protected $revisionID; protected $authorPHID; @@ -349,4 +350,30 @@ return null; } + +/* -( PhabricatorApplicationTransactionInterface )------------------------- */ + + + public function getApplicationTransactionEditor() { + if (!$this->getRevisionID()) { + return null; + } + return $this->getRevision()->getApplicationTransactionEditor(); + } + + + public function getApplicationTransactionObject() { + if (!$this->getRevisionID()) { + return null; + } + return $this->getRevision(); + } + + public function getApplicationTransactionTemplate() { + if (!$this->getRevisionID()) { + return null; + } + return $this->getRevision()->getApplicationTransactionTemplate(); + } + } diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php --- a/src/applications/differential/storage/DifferentialRevision.php +++ b/src/applications/differential/storage/DifferentialRevision.php @@ -8,7 +8,8 @@ PhrequentTrackableInterface, HarbormasterBuildableInterface, PhabricatorSubscribableInterface, - PhabricatorCustomFieldInterface { + PhabricatorCustomFieldInterface, + PhabricatorApplicationTransactionInterface { protected $title = ''; protected $originalTitle; @@ -460,4 +461,20 @@ return $this; } + +/* -( PhabricatorApplicationTransactionInterface )------------------------- */ + + + public function getApplicationTransactionEditor() { + return new DifferentialTransactionEditor(); + } + + public function getApplicationTransactionObject() { + return $this; + } + + public function getApplicationTransactionTemplate() { + return new DifferentialTransaction(); + } + } diff --git a/src/applications/legalpad/storage/LegalpadDocument.php b/src/applications/legalpad/storage/LegalpadDocument.php --- a/src/applications/legalpad/storage/LegalpadDocument.php +++ b/src/applications/legalpad/storage/LegalpadDocument.php @@ -145,11 +145,16 @@ /* -( PhabricatorApplicationTransactionInterface )------------------------- */ + public function getApplicationTransactionEditor() { return new LegalpadDocumentEditor(); } public function getApplicationTransactionObject() { + return $this; + } + + public function getApplicationTransactionTemplate() { return new LegalpadTransaction(); } diff --git a/src/applications/macro/storage/PhabricatorFileImageMacro.php b/src/applications/macro/storage/PhabricatorFileImageMacro.php --- a/src/applications/macro/storage/PhabricatorFileImageMacro.php +++ b/src/applications/macro/storage/PhabricatorFileImageMacro.php @@ -68,6 +68,10 @@ } public function getApplicationTransactionObject() { + return $this; + } + + public function getApplicationTransactionTemplate() { return new PhabricatorMacroTransaction(); } diff --git a/src/applications/pholio/storage/PholioMock.php b/src/applications/pholio/storage/PholioMock.php --- a/src/applications/pholio/storage/PholioMock.php +++ b/src/applications/pholio/storage/PholioMock.php @@ -219,6 +219,10 @@ } public function getApplicationTransactionObject() { + return $this; + } + + public function getApplicationTransactionTemplate() { return new PholioTransaction(); } diff --git a/src/applications/search/controller/PhabricatorSearchAttachController.php b/src/applications/search/controller/PhabricatorSearchAttachController.php --- a/src/applications/search/controller/PhabricatorSearchAttachController.php +++ b/src/applications/search/controller/PhabricatorSearchAttachController.php @@ -70,13 +70,15 @@ $txn_editor = $object->getApplicationTransactionEditor() ->setActor($user) ->setContentSourceFromRequest($request); - $txn_template = $object->getApplicationTransactionObject() + $txn_template = $object->getApplicationTransactionTemplate() ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) ->setMetadataValue('edge:type', $edge_type) ->setNewValue(array( '+' => array_fuse($add_phids), '-' => array_fuse($rem_phids))); - $txn_editor->applyTransactions($object, array($txn_template)); + $txn_editor->applyTransactions( + $object->getApplicationTransactionObject(), + array($txn_template)); } else { diff --git a/src/applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php b/src/applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php --- a/src/applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php +++ b/src/applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php @@ -74,7 +74,7 @@ ); } - $xaction = id($object->getApplicationTransactionObject()) + $xaction = id($object->getApplicationTransactionTemplate()) ->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS) ->setNewValue($xaction_value); @@ -83,7 +83,9 @@ ->setContinueOnNoEffect(true) ->setContentSourceFromRequest($request); - $editor->applyTransactions($object, array($xaction)); + $editor->applyTransactions( + $object->getApplicationTransactionObject(), + array($xaction)); } else { // TODO: Eventually, get rid of this once everything implements diff --git a/src/applications/transactions/interface/PhabricatorApplicationTransactionInterface.php b/src/applications/transactions/interface/PhabricatorApplicationTransactionInterface.php --- a/src/applications/transactions/interface/PhabricatorApplicationTransactionInterface.php +++ b/src/applications/transactions/interface/PhabricatorApplicationTransactionInterface.php @@ -1,8 +1,38 @@