From 42c26821ef9227938c1796a5b5be2494eebad426 Mon Sep 17 00:00:00 2001 From: epriestley Date: Sat, 13 Feb 2021 13:19:04 -0800 Subject: [PATCH] When a revision has only human reviewers but none can view it, show a warning banner Summary: Ref T13602. Warn when a reivison has at least one human reviewer, no non-human reviewers, and no human reviewers can view it. Test Plan: {F8430683} Maniphest Tasks: T13602 Differential Revision: https://secure.phabricator.com/D21556 --- .../DifferentialReviewersField.php | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/applications/differential/customfield/DifferentialReviewersField.php b/src/applications/differential/customfield/DifferentialReviewersField.php index 31b175b09d..91410cc5a3 100644 --- a/src/applications/differential/customfield/DifferentialReviewersField.php +++ b/src/applications/differential/customfield/DifferentialReviewersField.php @@ -72,22 +72,40 @@ final class DifferentialReviewersField return array(); } + $viewer = $this->getViewer(); + + PhabricatorPolicyFilterSet::loadHandleViewCapabilities( + $viewer, + $handles, + array($revision)); + $all_resigned = true; $all_disabled = true; $any_reviewers = false; + $all_exiled = true; foreach ($this->getValue() as $reviewer) { $reviewer_phid = $reviewer->getReviewerPHID(); + $handle = $handles[$reviewer_phid]; $any_reviewers = true; - if (!$handles[$reviewer_phid]->isDisabled()) { + if (!$handle->isDisabled()) { $all_disabled = false; } if (!$reviewer->isResigned()) { $all_resigned = false; } + + if (!$handle->hasCapabilities()) { + $all_exiled = false; + } else { + if ($handle->hasViewCapability($revision)) { + $all_exiled = false; + } + } + } $warnings = array(); @@ -101,6 +119,10 @@ final class DifferentialReviewersField } else if ($all_resigned) { $warnings[] = pht( 'This revision needs review, but all reviewers have resigned.'); + } else if ($all_exiled) { + $warnings[] = pht( + 'This revision needs review, but no reviewers have permission '. + 'to view it.'); } return $warnings;