Differential D15950 Diff 38411 src/applications/differential/application/PhabricatorDifferentialApplication.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/application/PhabricatorDifferentialApplication.php
Show First 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | final class PhabricatorDifferentialApplication extends PhabricatorApplication { | ||||
} | } | ||||
public function getRemarkupRules() { | public function getRemarkupRules() { | ||||
return array( | return array( | ||||
new DifferentialRemarkupRule(), | new DifferentialRemarkupRule(), | ||||
); | ); | ||||
} | } | ||||
public function loadStatus(PhabricatorUser $user) { | public static function loadNeedAttentionRevisions(PhabricatorUser $viewer) { | ||||
$limit = self::MAX_STATUS_ITEMS; | if (!$viewer->isLoggedIn()) { | ||||
return array(); | |||||
} | |||||
$viewer_phid = $viewer->getPHID(); | |||||
$revisions = id(new DifferentialRevisionQuery()) | $responsible_phids = id(new DifferentialResponsibleDatasource()) | ||||
->setViewer($user) | ->setViewer($viewer) | ||||
->withResponsibleUsers(array($user->getPHID())) | ->evaluateTokens(array($viewer_phid)); | ||||
$revision_query = id(new DifferentialRevisionQuery()) | |||||
->setViewer($viewer) | |||||
->withStatus(DifferentialRevisionQuery::STATUS_OPEN) | ->withStatus(DifferentialRevisionQuery::STATUS_OPEN) | ||||
->withResponsibleUsers($responsible_phids) | |||||
->needReviewerStatus(true) | |||||
->needRelationships(true) | ->needRelationships(true) | ||||
->setLimit($limit) | ->needFlags(true) | ||||
->execute(); | ->needDrafts(true) | ||||
->setLimit(self::MAX_STATUS_ITEMS); | |||||
$status = array(); | $revisions = $revision_query->execute(); | ||||
if (count($revisions) >= $limit) { | |||||
$all_count = count($revisions); | |||||
$all_count_str = pht( | |||||
'%s+ Active Review(s)', | |||||
new PhutilNumber($limit - 1)); | |||||
$type = PhabricatorApplicationStatusView::TYPE_WARNING; | $query = id(new PhabricatorSavedQuery()) | ||||
$status[] = id(new PhabricatorApplicationStatusView()) | ->attachParameterMap( | ||||
->setType($type) | array( | ||||
->setText($all_count_str) | 'responsiblePHIDs' => $responsible_phids, | ||||
->setCount($all_count); | )); | ||||
} else { | |||||
list($blocking, $active, $waiting) = | |||||
DifferentialRevisionQuery::splitResponsible( | |||||
$revisions, | |||||
array($user->getPHID())); | |||||
$blocking = count($blocking); | |||||
$blocking_str = pht( | |||||
'%s Review(s) Blocking Others', | |||||
new PhutilNumber($blocking)); | |||||
$type = PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION; | $groups = id(new DifferentialRevisionRequiredActionResultBucket()) | ||||
$status[] = id(new PhabricatorApplicationStatusView()) | ->setViewer($viewer) | ||||
->setType($type) | ->newResultGroups($query, $revisions); | ||||
->setText($blocking_str) | |||||
->setCount($blocking); | $include = array(); | ||||
foreach ($groups as $group) { | |||||
switch ($group->getKey()) { | |||||
case DifferentialRevisionRequiredActionResultBucket::KEY_MUSTREVIEW: | |||||
case DifferentialRevisionRequiredActionResultBucket::KEY_SHOULDREVIEW: | |||||
foreach ($group->getObjects() as $object) { | |||||
$include[] = $object; | |||||
} | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
return $include; | |||||
} | |||||
public function loadStatus(PhabricatorUser $user) { | |||||
$revisions = self::loadNeedAttentionRevisions($user); | |||||
$limit = self::MAX_STATUS_ITEMS; | |||||
$active = count($active); | if (count($revisions) >= $limit) { | ||||
$active_str = pht( | $display_count = ($limit - 1); | ||||
$display_label = pht( | |||||
'%s+ Active Review(s)', | |||||
new PhutilNumber($display_count)); | |||||
} else { | |||||
$display_count = count($revisions); | |||||
$display_label = pht( | |||||
'%s Review(s) Need Attention', | '%s Review(s) Need Attention', | ||||
new PhutilNumber($active)); | new PhutilNumber($display_count)); | ||||
} | |||||
$type = PhabricatorApplicationStatusView::TYPE_WARNING; | $status = array(); | ||||
$status[] = id(new PhabricatorApplicationStatusView()) | |||||
->setType($type) | |||||
->setText($active_str) | |||||
->setCount($active); | |||||
$waiting = count($waiting); | |||||
$waiting_str = pht( | |||||
'%s Review(s) Waiting on Others', | |||||
new PhutilNumber($waiting)); | |||||
$type = PhabricatorApplicationStatusView::TYPE_INFO; | |||||
$status[] = id(new PhabricatorApplicationStatusView()) | $status[] = id(new PhabricatorApplicationStatusView()) | ||||
->setType($type) | ->setType(PhabricatorApplicationStatusView::TYPE_WARNING) | ||||
->setText($waiting_str) | ->setText($display_label) | ||||
->setCount($waiting); | ->setCount($display_count); | ||||
} | |||||
return $status; | return $status; | ||||
} | } | ||||
public function supportsEmailIntegration() { | public function supportsEmailIntegration() { | ||||
return true; | return true; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines |