diff --git a/src/applications/differential/customfield/DifferentialReviewersField.php b/src/applications/differential/customfield/DifferentialReviewersField.php index f835854e2f..31b175b09d 100644 --- a/src/applications/differential/customfield/DifferentialReviewersField.php +++ b/src/applications/differential/customfield/DifferentialReviewersField.php @@ -1,94 +1,109 @@ <?php final class DifferentialReviewersField extends DifferentialCoreCustomField { public function getFieldKey() { return 'differential:reviewers'; } public function getFieldName() { return pht('Reviewers'); } public function getFieldDescription() { return pht('Manage reviewers.'); } protected function readValueFromRevision( DifferentialRevision $revision) { return $revision->getReviewers(); } public function shouldAppearInPropertyView() { return true; } public function renderPropertyViewLabel() { return $this->getFieldName(); } public function getRequiredHandlePHIDsForPropertyView() { return mpull($this->getUserReviewers(), 'getReviewerPHID'); } public function renderPropertyViewValue(array $handles) { $reviewers = $this->getUserReviewers(); if (!$reviewers) { return phutil_tag('em', array(), pht('None')); } $view = id(new DifferentialReviewersView()) ->setUser($this->getViewer()) ->setReviewers($reviewers) ->setHandles($handles); $diff = $this->getActiveDiff(); if ($diff) { $view->setActiveDiff($diff); } return $view; } private function getUserReviewers() { $reviewers = array(); foreach ($this->getObject()->getReviewers() as $reviewer) { if ($reviewer->isUser()) { $reviewers[] = $reviewer; } } return $reviewers; } public function getRequiredHandlePHIDsForRevisionHeaderWarnings() { return mpull($this->getValue(), 'getReviewerPHID'); } public function getWarningsForRevisionHeader(array $handles) { $revision = $this->getObject(); if (!$revision->isNeedsReview()) { return array(); } + $all_resigned = true; + $all_disabled = true; + $any_reviewers = false; + foreach ($this->getValue() as $reviewer) { - if (!$handles[$reviewer->getReviewerPHID()]->isDisabled()) { - return array(); + $reviewer_phid = $reviewer->getReviewerPHID(); + + $any_reviewers = true; + + if (!$handles[$reviewer_phid]->isDisabled()) { + $all_disabled = false; + } + + if (!$reviewer->isResigned()) { + $all_resigned = false; } } $warnings = array(); - if ($this->getValue()) { + if (!$any_reviewers) { + $warnings[] = pht( + 'This revision needs review, but there are no reviewers specified.'); + } else if ($all_disabled) { $warnings[] = pht( 'This revision needs review, but all specified reviewers are '. 'disabled or inactive.'); - } else { + } else if ($all_resigned) { $warnings[] = pht( - 'This revision needs review, but there are no reviewers specified.'); + 'This revision needs review, but all reviewers have resigned.'); } return $warnings; } }