diff --git a/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php b/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php @@ -10,7 +10,8 @@ return pht('Abandon Revision'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('This revision will be abandoned and closed.'); } diff --git a/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php b/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php @@ -10,7 +10,8 @@ return pht("Accept Revision \xE2\x9C\x94"); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('These changes will be approved.'); } diff --git a/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php b/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php @@ -52,7 +52,8 @@ return DifferentialRevisionEditEngine::ACTIONGROUP_REVISION; } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return null; } @@ -103,7 +104,7 @@ if ($label !== null) { $field->setCommentActionLabel($label); - $description = $this->getRevisionActionDescription(); + $description = $this->getRevisionActionDescription($revision); $field->setActionDescription($description); $group_key = $this->getRevisionActionGroupKey(); diff --git a/src/applications/differential/xaction/DifferentialRevisionCloseTransaction.php b/src/applications/differential/xaction/DifferentialRevisionCloseTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionCloseTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionCloseTransaction.php @@ -10,7 +10,8 @@ return pht('Close Revision'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('This revision will be closed.'); } diff --git a/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php b/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php @@ -10,7 +10,8 @@ return pht('Commandeer Revision'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('You will take control of this revision and become its author.'); } @@ -65,6 +66,11 @@ 'been closed. You can only commandeer open revisions.')); } + if ($object->isDraft()) { + throw new Exception( + pht('You can not commandeer a draft revision.')); + } + if ($this->isViewerRevisionAuthor($object, $viewer)) { throw new Exception( pht( diff --git a/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php b/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php @@ -10,7 +10,8 @@ return pht('Plan Changes'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht( 'This revision will be removed from review queues until it is revised.'); } @@ -55,6 +56,11 @@ } protected function validateAction($object, PhabricatorUser $viewer) { + if ($object->isDraft()) { + throw new Exception( + pht('You can not plan changes to a draft revision.')); + } + if ($object->isChangePlanned()) { throw new Exception( pht( diff --git a/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php b/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php @@ -10,7 +10,8 @@ return pht('Reclaim Revision'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('This revision will be reclaimed and reopened.'); } diff --git a/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php b/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php @@ -10,7 +10,8 @@ return pht("Request Changes \xE2\x9C\x98"); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('This revision will be returned to the author for updates.'); } @@ -72,6 +73,11 @@ 'not own.')); } + if ($object->isDraft()) { + throw new Exception( + pht('You can not request changes to a draft revision.')); + } + if ($this->isViewerFullyRejected($object, $viewer)) { throw new Exception( pht( diff --git a/src/applications/differential/xaction/DifferentialRevisionReopenTransaction.php b/src/applications/differential/xaction/DifferentialRevisionReopenTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionReopenTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionReopenTransaction.php @@ -10,7 +10,8 @@ return pht('Reopen Revision'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('This revision will be reopened for review.'); } diff --git a/src/applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php b/src/applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php @@ -10,8 +10,13 @@ return pht('Request Review'); } - protected function getRevisionActionDescription() { - return pht('This revision will be returned to reviewers for feedback.'); + protected function getRevisionActionDescription( + DifferentialRevision $revision) { + if ($revision->isDraft()) { + return pht('This revision will be submitted to reviewers for feedback.'); + } else { + return pht('This revision will be returned to reviewers for feedback.'); + } } public function getColor() { diff --git a/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php b/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php @@ -10,7 +10,8 @@ return pht('Resign as Reviewer'); } - protected function getRevisionActionDescription() { + protected function getRevisionActionDescription( + DifferentialRevision $revision) { return pht('You will resign as a reviewer for this change.'); } @@ -63,6 +64,11 @@ 'been closed. You can only resign from open revisions.')); } + if ($object->isDraft()) { + throw new Exception( + pht('You can not resign from a draft revision.')); + } + $resigned = DifferentialReviewerStatus::STATUS_RESIGNED; if ($this->getViewerReviewerStatus($object, $viewer) == $resigned) { throw new Exception(