Page MenuHomePhabricator

D17558.id42227.diff
No OneTemporary

D17558.id42227.diff

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
@@ -44,7 +44,9 @@
public function generateOldValue($object) {
$actor = $this->getActor();
- return !$this->isViewerAnyReviewer($object, $actor);
+ $resigned = DifferentialReviewerStatus::STATUS_RESIGNED;
+
+ return ($this->getViewerReviewerStatus($object, $actor) == $resigned);
}
public function applyExternalEffects($object, $value) {
@@ -61,12 +63,19 @@
'been closed. You can only resign from open revisions.'));
}
- if (!$this->isViewerAnyReviewer($object, $viewer)) {
+ $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. You can only resign from revisions where you are a '.
- 'reviewer.'));
+ 'reviewer, and do not have authority over any reviewer.'));
}
}
diff --git a/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php b/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
--- a/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
+++ b/src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
@@ -33,6 +33,20 @@
return ($this->getViewerReviewerStatus($revision, $viewer) !== null);
}
+ protected function isViewerAnyAuthority(
+ DifferentialRevision $revision,
+ PhabricatorUser $viewer) {
+
+ $reviewers = $revision->getReviewers();
+ foreach ($revision->getReviewers() as $reviewer) {
+ if ($reviewer->hasAuthority($viewer)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
protected function isViewerFullyAccepted(
DifferentialRevision $revision,
PhabricatorUser $viewer) {
diff --git a/src/applications/differential/xaction/DifferentialRevisionTransactionType.php b/src/applications/differential/xaction/DifferentialRevisionTransactionType.php
--- a/src/applications/differential/xaction/DifferentialRevisionTransactionType.php
+++ b/src/applications/differential/xaction/DifferentialRevisionTransactionType.php
@@ -60,6 +60,9 @@
protected function getActiveDiffPHID(DifferentialRevision $revision) {
try {
$diff = $revision->getActiveDiff();
+ if (!$diff) {
+ return null;
+ }
return $diff->getPHID();
} catch (Exception $ex) {
return null;

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 16, 12:47 PM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7707064
Default Alt Text
D17558.id42227.diff (2 KB)

Event Timeline