Path: blob/master/src/applications/differential/customfield/DifferentialReviewersField.php
12256 views
<?php12final class DifferentialReviewersField3extends DifferentialCoreCustomField {45public function getFieldKey() {6return 'differential:reviewers';7}89public function getFieldName() {10return pht('Reviewers');11}1213public function getFieldDescription() {14return pht('Manage reviewers.');15}1617protected function readValueFromRevision(18DifferentialRevision $revision) {19return $revision->getReviewers();20}2122public function shouldAppearInPropertyView() {23return true;24}2526public function renderPropertyViewLabel() {27return $this->getFieldName();28}2930public function getRequiredHandlePHIDsForPropertyView() {31return mpull($this->getUserReviewers(), 'getReviewerPHID');32}3334public function renderPropertyViewValue(array $handles) {35$reviewers = $this->getUserReviewers();36if (!$reviewers) {37return phutil_tag('em', array(), pht('None'));38}3940$view = id(new DifferentialReviewersView())41->setUser($this->getViewer())42->setReviewers($reviewers)43->setHandles($handles);4445$diff = $this->getActiveDiff();46if ($diff) {47$view->setActiveDiff($diff);48}4950return $view;51}5253private function getUserReviewers() {54$reviewers = array();55foreach ($this->getObject()->getReviewers() as $reviewer) {56if ($reviewer->isUser()) {57$reviewers[] = $reviewer;58}59}60return $reviewers;61}6263public function getRequiredHandlePHIDsForRevisionHeaderWarnings() {64return mpull($this->getValue(), 'getReviewerPHID');65}6667public function getWarningsForRevisionHeader(array $handles) {68$revision = $this->getObject();6970if (!$revision->isNeedsReview()) {71return array();72}7374$viewer = $this->getViewer();7576PhabricatorPolicyFilterSet::loadHandleViewCapabilities(77$viewer,78$handles,79array($revision));8081$all_resigned = true;82$all_disabled = true;83$any_reviewers = false;84$all_exiled = true;8586foreach ($this->getValue() as $reviewer) {87$reviewer_phid = $reviewer->getReviewerPHID();88$handle = $handles[$reviewer_phid];8990$any_reviewers = true;9192if (!$handle->isDisabled()) {93$all_disabled = false;94}9596if (!$reviewer->isResigned()) {97$all_resigned = false;98}99100if (!$handle->hasCapabilities()) {101$all_exiled = false;102} else {103if ($handle->hasViewCapability($revision)) {104$all_exiled = false;105}106}107108}109110$warnings = array();111if (!$any_reviewers) {112$warnings[] = pht(113'This revision needs review, but there are no reviewers specified.');114} else if ($all_disabled) {115$warnings[] = pht(116'This revision needs review, but all specified reviewers are '.117'disabled or inactive.');118} else if ($all_resigned) {119$warnings[] = pht(120'This revision needs review, but all reviewers have resigned.');121} else if ($all_exiled) {122$warnings[] = pht(123'This revision needs review, but no reviewers have permission '.124'to view it.');125}126127return $warnings;128}129130}131132133