1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-26 08:42:41 +01:00

Align most revision actions to the new "Draft" state

Summary:
Ref T2543. Most actions are not available for drafts.

Authors can "Request Review" (move out of draft to become a normal revision) or "Abandon".

Non-authors can't do anything (maybe we'll let them do something later -- like "Commandeer"? -- if there's a good reason).

Test Plan: Viewed a draft revision as an author and non-author, saw fewer actions available.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T2543

Differential Revision: https://secure.phabricator.com/D18626
This commit is contained in:
epriestley 2017-09-18 14:14:52 -07:00
parent 5112dac491
commit c7af663523
11 changed files with 48 additions and 13 deletions

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionAbandonTransaction
return pht('Abandon Revision'); return pht('Abandon Revision');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht('This revision will be abandoned and closed.'); return pht('This revision will be abandoned and closed.');
} }

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionAcceptTransaction
return pht("Accept Revision \xE2\x9C\x94"); return pht("Accept Revision \xE2\x9C\x94");
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht('These changes will be approved.'); return pht('These changes will be approved.');
} }

View file

@ -52,7 +52,8 @@ abstract class DifferentialRevisionActionTransaction
return DifferentialRevisionEditEngine::ACTIONGROUP_REVISION; return DifferentialRevisionEditEngine::ACTIONGROUP_REVISION;
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return null; return null;
} }
@ -103,7 +104,7 @@ abstract class DifferentialRevisionActionTransaction
if ($label !== null) { if ($label !== null) {
$field->setCommentActionLabel($label); $field->setCommentActionLabel($label);
$description = $this->getRevisionActionDescription(); $description = $this->getRevisionActionDescription($revision);
$field->setActionDescription($description); $field->setActionDescription($description);
$group_key = $this->getRevisionActionGroupKey(); $group_key = $this->getRevisionActionGroupKey();

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionCloseTransaction
return pht('Close Revision'); return pht('Close Revision');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht('This revision will be closed.'); return pht('This revision will be closed.');
} }

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionCommandeerTransaction
return pht('Commandeer Revision'); 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.'); return pht('You will take control of this revision and become its author.');
} }
@ -65,6 +66,11 @@ final class DifferentialRevisionCommandeerTransaction
'been closed. You can only commandeer open revisions.')); '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)) { if ($this->isViewerRevisionAuthor($object, $viewer)) {
throw new Exception( throw new Exception(
pht( pht(

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionPlanChangesTransaction
return pht('Plan Changes'); return pht('Plan Changes');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht( return pht(
'This revision will be removed from review queues until it is revised.'); 'This revision will be removed from review queues until it is revised.');
} }
@ -55,6 +56,11 @@ final class DifferentialRevisionPlanChangesTransaction
} }
protected function validateAction($object, PhabricatorUser $viewer) { 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()) { if ($object->isChangePlanned()) {
throw new Exception( throw new Exception(
pht( pht(

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionReclaimTransaction
return pht('Reclaim Revision'); return pht('Reclaim Revision');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht('This revision will be reclaimed and reopened.'); return pht('This revision will be reclaimed and reopened.');
} }

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionRejectTransaction
return pht("Request Changes \xE2\x9C\x98"); 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.'); return pht('This revision will be returned to the author for updates.');
} }
@ -72,6 +73,11 @@ final class DifferentialRevisionRejectTransaction
'not own.')); 'not own.'));
} }
if ($object->isDraft()) {
throw new Exception(
pht('You can not request changes to a draft revision.'));
}
if ($this->isViewerFullyRejected($object, $viewer)) { if ($this->isViewerFullyRejected($object, $viewer)) {
throw new Exception( throw new Exception(
pht( pht(

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionReopenTransaction
return pht('Reopen Revision'); return pht('Reopen Revision');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht('This revision will be reopened for review.'); return pht('This revision will be reopened for review.');
} }

View file

@ -10,8 +10,13 @@ final class DifferentialRevisionRequestReviewTransaction
return pht('Request Review'); return pht('Request Review');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
return pht('This revision will be returned to reviewers for feedback.'); 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() { public function getColor() {

View file

@ -10,7 +10,8 @@ final class DifferentialRevisionResignTransaction
return pht('Resign as Reviewer'); return pht('Resign as Reviewer');
} }
protected function getRevisionActionDescription() { protected function getRevisionActionDescription(
DifferentialRevision $revision) {
return pht('You will resign as a reviewer for this change.'); return pht('You will resign as a reviewer for this change.');
} }
@ -63,6 +64,11 @@ final class DifferentialRevisionResignTransaction
'been closed. You can only resign from open revisions.')); '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; $resigned = DifferentialReviewerStatus::STATUS_RESIGNED;
if ($this->getViewerReviewerStatus($object, $viewer) == $resigned) { if ($this->getViewerReviewerStatus($object, $viewer) == $resigned) {
throw new Exception( throw new Exception(