@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Restore "Plan Changes" and "Request Review" actions to Differential on EditEngine

Summary:
Ref T11114. This restores these actions.

One behavior is incomplete: "Request Review" on an accepted revision does not downgrade reviewers properly. I've noted this locally.

Test Plan: Planned changes and requested review of a revision.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T11114

Differential Revision: https://secure.phabricator.com/D17109

+149
+4
src/__phutil_library_map__.php
··· 541 541 'DifferentialRevisionPHIDType' => 'applications/differential/phid/DifferentialRevisionPHIDType.php', 542 542 'DifferentialRevisionPackageHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageHeraldField.php', 543 543 'DifferentialRevisionPackageOwnerHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageOwnerHeraldField.php', 544 + 'DifferentialRevisionPlanChangesTransaction' => 'applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php', 544 545 'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php', 545 546 'DifferentialRevisionReclaimTransaction' => 'applications/differential/xaction/DifferentialRevisionReclaimTransaction.php', 546 547 'DifferentialRevisionRelationship' => 'applications/differential/relationships/DifferentialRevisionRelationship.php', ··· 549 550 'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php', 550 551 'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php', 551 552 'DifferentialRevisionRepositoryTransaction' => 'applications/differential/xaction/DifferentialRevisionRepositoryTransaction.php', 553 + 'DifferentialRevisionRequestReviewTransaction' => 'applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php', 552 554 'DifferentialRevisionRequiredActionResultBucket' => 'applications/differential/query/DifferentialRevisionRequiredActionResultBucket.php', 553 555 'DifferentialRevisionResultBucket' => 'applications/differential/query/DifferentialRevisionResultBucket.php', 554 556 'DifferentialRevisionReviewersHeraldField' => 'applications/differential/herald/DifferentialRevisionReviewersHeraldField.php', ··· 5212 5214 'DifferentialRevisionPHIDType' => 'PhabricatorPHIDType', 5213 5215 'DifferentialRevisionPackageHeraldField' => 'DifferentialRevisionHeraldField', 5214 5216 'DifferentialRevisionPackageOwnerHeraldField' => 'DifferentialRevisionHeraldField', 5217 + 'DifferentialRevisionPlanChangesTransaction' => 'DifferentialRevisionActionTransaction', 5215 5218 'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 5216 5219 'DifferentialRevisionReclaimTransaction' => 'DifferentialRevisionActionTransaction', 5217 5220 'DifferentialRevisionRelationship' => 'PhabricatorObjectRelationship', ··· 5220 5223 'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField', 5221 5224 'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField', 5222 5225 'DifferentialRevisionRepositoryTransaction' => 'DifferentialRevisionTransactionType', 5226 + 'DifferentialRevisionRequestReviewTransaction' => 'DifferentialRevisionActionTransaction', 5223 5227 'DifferentialRevisionRequiredActionResultBucket' => 'DifferentialRevisionResultBucket', 5224 5228 'DifferentialRevisionResultBucket' => 'PhabricatorSearchResultBucket', 5225 5229 'DifferentialRevisionReviewersHeraldField' => 'DifferentialRevisionHeraldField',
+75
src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php
··· 1 + <?php 2 + 3 + final class DifferentialRevisionPlanChangesTransaction 4 + extends DifferentialRevisionActionTransaction { 5 + 6 + const TRANSACTIONTYPE = 'differential.revision.plan'; 7 + const ACTIONKEY = 'plan-changes'; 8 + 9 + protected function getRevisionActionLabel() { 10 + return pht('Plan Changes'); 11 + } 12 + 13 + protected function getRevisionActionDescription() { 14 + return pht( 15 + 'This revision will be removed from review queues until it is revised.'); 16 + } 17 + 18 + public function getIcon() { 19 + return 'fa-headphones'; 20 + } 21 + 22 + public function getColor() { 23 + return 'red'; 24 + } 25 + 26 + public function generateOldValue($object) { 27 + $status_planned = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED; 28 + return ($object->getStatus() == $status_planned); 29 + } 30 + 31 + public function applyInternalEffects($object, $value) { 32 + $status_planned = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED; 33 + $object->setStatus($status_planned); 34 + } 35 + 36 + protected function validateAction($object, PhabricatorUser $viewer) { 37 + $status_planned = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED; 38 + 39 + if ($object->getStatus() == $status_planned) { 40 + throw new Exception( 41 + pht( 42 + 'You can not request review of this revision because this '. 43 + 'revision is already under review and the action would have '. 44 + 'no effect.')); 45 + } 46 + 47 + if ($object->isClosed()) { 48 + throw new Exception( 49 + pht( 50 + 'You can not plan changes to this this revision because it has '. 51 + 'already been closed.')); 52 + } 53 + 54 + if (!$this->isViewerRevisionAuthor($object, $viewer)) { 55 + throw new Exception( 56 + pht( 57 + 'You can not plan changes to this revision because you do not '. 58 + 'own it. Only the author of a revision can plan changes to it.')); 59 + } 60 + } 61 + 62 + public function getTitle() { 63 + return pht( 64 + '%s planned changes to this revision.', 65 + $this->renderAuthor()); 66 + } 67 + 68 + public function getTitleForFeed() { 69 + return pht( 70 + '%s planned changes to %s.', 71 + $this->renderAuthor(), 72 + $this->renderObject()); 73 + } 74 + 75 + }
+70
src/applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php
··· 1 + <?php 2 + 3 + final class DifferentialRevisionRequestReviewTransaction 4 + extends DifferentialRevisionActionTransaction { 5 + 6 + const TRANSACTIONTYPE = 'differential.revision.request'; 7 + const ACTIONKEY = 'request-review'; 8 + 9 + protected function getRevisionActionLabel() { 10 + return pht('Request Review'); 11 + } 12 + 13 + protected function getRevisionActionDescription() { 14 + return pht('This revision will be returned to reviewers for feedback.'); 15 + } 16 + 17 + public function getColor() { 18 + return 'sky'; 19 + } 20 + 21 + public function generateOldValue($object) { 22 + $status_review = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW; 23 + return ($object->getStatus() == $status_review); 24 + } 25 + 26 + public function applyInternalEffects($object, $value) { 27 + $status_review = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW; 28 + $object->setStatus($status_review); 29 + } 30 + 31 + protected function validateAction($object, PhabricatorUser $viewer) { 32 + $status_review = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW; 33 + if ($object->getStatus() == $status_review) { 34 + throw new Exception( 35 + pht( 36 + 'You can not request review of this revision because this '. 37 + 'revision is already under review and the action would have '. 38 + 'no effect.')); 39 + } 40 + 41 + if ($object->isClosed()) { 42 + throw new Exception( 43 + pht( 44 + 'You can not request review of this revision because it has '. 45 + 'already been closed. You can only request review of open '. 46 + 'revisions.')); 47 + } 48 + 49 + if (!$this->isViewerRevisionAuthor($object, $viewer)) { 50 + throw new Exception( 51 + pht( 52 + 'You can not request review of this revision because you are not '. 53 + 'the author of the revision.')); 54 + } 55 + } 56 + 57 + public function getTitle() { 58 + return pht( 59 + '%s requested review of this revision.', 60 + $this->renderAuthor()); 61 + } 62 + 63 + public function getTitleForFeed() { 64 + return pht( 65 + '%s requested review of %s.', 66 + $this->renderAuthor(), 67 + $this->renderObject()); 68 + } 69 + 70 + }