mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-29 04:28:12 +01:00
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
101 lines
2.5 KiB
PHP
101 lines
2.5 KiB
PHP
<?php
|
|
|
|
final class DifferentialRevisionResignTransaction
|
|
extends DifferentialRevisionReviewTransaction {
|
|
|
|
const TRANSACTIONTYPE = 'differential.revision.resign';
|
|
const ACTIONKEY = 'resign';
|
|
|
|
protected function getRevisionActionLabel() {
|
|
return pht('Resign as Reviewer');
|
|
}
|
|
|
|
protected function getRevisionActionDescription(
|
|
DifferentialRevision $revision) {
|
|
return pht('You will resign as a reviewer for this change.');
|
|
}
|
|
|
|
public function getIcon() {
|
|
return 'fa-flag';
|
|
}
|
|
|
|
public function getColor() {
|
|
return 'orange';
|
|
}
|
|
|
|
protected function getRevisionActionOrder() {
|
|
return 700;
|
|
}
|
|
|
|
public function getCommandKeyword() {
|
|
return 'resign';
|
|
}
|
|
|
|
public function getActionName() {
|
|
return pht('Resigned');
|
|
}
|
|
|
|
public function getCommandAliases() {
|
|
return array();
|
|
}
|
|
|
|
public function getCommandSummary() {
|
|
return pht('Resign from a revision.');
|
|
}
|
|
|
|
public function generateOldValue($object) {
|
|
$actor = $this->getActor();
|
|
$resigned = DifferentialReviewerStatus::STATUS_RESIGNED;
|
|
|
|
return ($this->getViewerReviewerStatus($object, $actor) == $resigned);
|
|
}
|
|
|
|
public function applyExternalEffects($object, $value) {
|
|
$status = DifferentialReviewerStatus::STATUS_RESIGNED;
|
|
$actor = $this->getActor();
|
|
$this->applyReviewerEffect($object, $actor, $value, $status);
|
|
}
|
|
|
|
protected function validateAction($object, PhabricatorUser $viewer) {
|
|
if ($object->isClosed()) {
|
|
throw new Exception(
|
|
pht(
|
|
'You can not resign from this revision because it has already '.
|
|
'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(
|
|
pht(
|
|
'You can not resign from this revision because you have already '.
|
|
'resigned.'));
|
|
}
|
|
|
|
if (!$this->isViewerAnyAuthority($object, $viewer)) {
|
|
throw new Exception(
|
|
pht(
|
|
'You can not resign from this revision because you are not a '.
|
|
'reviewer, and do not have authority over any reviewer.'));
|
|
}
|
|
}
|
|
|
|
public function getTitle() {
|
|
return pht(
|
|
'%s resigned from this revision.',
|
|
$this->renderAuthor());
|
|
}
|
|
|
|
public function getTitleForFeed() {
|
|
return pht(
|
|
'%s resigned from %s.',
|
|
$this->renderAuthor(),
|
|
$this->renderObject());
|
|
}
|
|
|
|
}
|