Path: blob/master/src/applications/diffusion/query/DiffusionCommitRequiredActionResultBucket.php
12242 views
<?php12final class DiffusionCommitRequiredActionResultBucket3extends DiffusionCommitResultBucket {45const BUCKETKEY = 'action';67private $objects;89public function getResultBucketName() {10return pht('Bucket by Required Action');11}1213protected function buildResultGroups(14PhabricatorSavedQuery $query,15array $objects) {1617$this->objects = $objects;1819$phids = $query->getEvaluatedParameter('responsiblePHIDs');20if (!$phids) {21throw new Exception(22pht(23'You can not bucket results by required action without '.24'specifying "Responsible Users".'));25}26$phids = array_fuse($phids);2728$groups = array();2930$groups[] = $this->newGroup()31->setName(pht('Needs Attention'))32->setNoDataString(pht('None of your commits have active concerns.'))33->setObjects($this->filterConcernRaised($phids));3435$groups[] = $this->newGroup()36->setName(pht('Needs Verification'))37->setNoDataString(pht('No commits are awaiting your verification.'))38->setObjects($this->filterNeedsVerification($phids));3940$groups[] = $this->newGroup()41->setName(pht('Ready to Audit'))42->setNoDataString(pht('No commits are waiting for you to audit them.'))43->setObjects($this->filterShouldAudit($phids));4445$groups[] = $this->newGroup()46->setName(pht('Waiting on Authors'))47->setNoDataString(pht('None of your audits are waiting on authors.'))48->setObjects($this->filterWaitingOnAuthors($phids));4950$groups[] = $this->newGroup()51->setName(pht('Waiting on Auditors'))52->setNoDataString(pht('None of your commits are waiting on audit.'))53->setObjects($this->filterWaitingOnAuditors($phids));5455// Because you can apply these buckets to queries which include revisions56// that have been closed, add an "Other" bucket if we still have stuff57// that didn't get filtered into any of the previous buckets.58if ($this->objects) {59$groups[] = $this->newGroup()60->setName(pht('Other Commits'))61->setObjects($this->objects);62}6364return $groups;65}6667private function filterConcernRaised(array $phids) {68$results = array();69$objects = $this->objects;7071foreach ($objects as $key => $object) {72if (empty($phids[$object->getAuthorPHID()])) {73continue;74}7576if (!$object->isAuditStatusConcernRaised()) {77continue;78}7980$results[$key] = $object;81unset($this->objects[$key]);82}8384return $results;85}8687private function filterNeedsVerification(array $phids) {88$results = array();89$objects = $this->objects;9091$has_concern = array(92PhabricatorAuditRequestStatus::CONCERNED,93);94$has_concern = array_fuse($has_concern);9596foreach ($objects as $key => $object) {97if (isset($phids[$object->getAuthorPHID()])) {98continue;99}100101if (!$object->isAuditStatusNeedsVerification()) {102continue;103}104105if (!$this->hasAuditorsWithStatus($object, $phids, $has_concern)) {106continue;107}108109$results[$key] = $object;110unset($this->objects[$key]);111}112113return $results;114}115116private function filterShouldAudit(array $phids) {117$results = array();118$objects = $this->objects;119120$should_audit = array(121PhabricatorAuditRequestStatus::AUDIT_REQUIRED,122PhabricatorAuditRequestStatus::AUDIT_REQUESTED,123);124$should_audit = array_fuse($should_audit);125126foreach ($objects as $key => $object) {127if (isset($phids[$object->getAuthorPHID()])) {128continue;129}130131if (!$this->hasAuditorsWithStatus($object, $phids, $should_audit)) {132continue;133}134135$results[$key] = $object;136unset($this->objects[$key]);137}138139return $results;140}141142private function filterWaitingOnAuthors(array $phids) {143$results = array();144$objects = $this->objects;145146foreach ($objects as $key => $object) {147if (!$object->isAuditStatusConcernRaised()) {148continue;149}150151if (isset($phids[$object->getAuthorPHID()])) {152continue;153}154155$results[$key] = $object;156unset($this->objects[$key]);157}158159return $results;160}161162private function filterWaitingOnAuditors(array $phids) {163$results = array();164$objects = $this->objects;165166foreach ($objects as $key => $object) {167$any_waiting =168$object->isAuditStatusNeedsAudit() ||169$object->isAuditStatusNeedsVerification() ||170$object->isAuditStatusPartiallyAudited();171172if (!$any_waiting) {173continue;174}175176$results[$key] = $object;177unset($this->objects[$key]);178}179180return $results;181}182183}184185186