Page MenuHomestyx hydra

No OneTemporary

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
@@ -1,109 +1,131 @@
<?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();
}
+ $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();
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 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;
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Jun 10, 5:33 PM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
140626
Default Alt Text
(3 KB)

Event Timeline