Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
4.7 kB · 184 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185<?php
final class DiffusionCommitRequiredActionResultBucket extends DiffusionCommitResultBucket {
const BUCKETKEY = 'action';
private $objects;
public function getResultBucketName() { return pht('Bucket by Required Action'); }
protected function buildResultGroups( PhabricatorSavedQuery $query, array $objects) {
$this->objects = $objects;
$phids = $query->getEvaluatedParameter('responsiblePHIDs'); if (!$phids) { throw new Exception( pht( 'You can not bucket results by required action without '. 'specifying "Responsible Users".')); } $phids = array_fuse($phids);
$groups = array();
$groups[] = $this->newGroup() ->setName(pht('Needs Attention')) ->setNoDataString(pht('None of your commits have active concerns.')) ->setObjects($this->filterConcernRaised($phids));
$groups[] = $this->newGroup() ->setName(pht('Needs Verification')) ->setNoDataString(pht('No commits are awaiting your verification.')) ->setObjects($this->filterNeedsVerification($phids));
$groups[] = $this->newGroup() ->setName(pht('Ready to Audit')) ->setNoDataString(pht('No commits are waiting for you to audit them.')) ->setObjects($this->filterShouldAudit($phids));
$groups[] = $this->newGroup() ->setName(pht('Waiting on Authors')) ->setNoDataString(pht('None of your audits are waiting on authors.')) ->setObjects($this->filterWaitingOnAuthors($phids));
$groups[] = $this->newGroup() ->setName(pht('Waiting on Auditors')) ->setNoDataString(pht('None of your commits are waiting on audit.')) ->setObjects($this->filterWaitingOnAuditors($phids));
// Because you can apply these buckets to queries which include revisions // that have been closed, add an "Other" bucket if we still have stuff // that didn't get filtered into any of the previous buckets. if ($this->objects) { $groups[] = $this->newGroup() ->setName(pht('Other Commits')) ->setObjects($this->objects); }
return $groups; }
private function filterConcernRaised(array $phids) { $results = array(); $objects = $this->objects;
foreach ($objects as $key => $object) { if (empty($phids[$object->getAuthorPHID()])) { continue; }
if (!$object->isAuditStatusConcernRaised()) { continue; }
$results[$key] = $object; unset($this->objects[$key]); }
return $results; }
private function filterNeedsVerification(array $phids) { $results = array(); $objects = $this->objects;
$has_concern = array( PhabricatorAuditRequestStatus::CONCERNED, ); $has_concern = array_fuse($has_concern);
foreach ($objects as $key => $object) { if (isset($phids[$object->getAuthorPHID()])) { continue; }
if (!$object->isAuditStatusNeedsVerification()) { continue; }
if (!$this->hasAuditorsWithStatus($object, $phids, $has_concern)) { continue; }
$results[$key] = $object; unset($this->objects[$key]); }
return $results; }
private function filterShouldAudit(array $phids) { $results = array(); $objects = $this->objects;
$should_audit = array( PhabricatorAuditRequestStatus::AUDIT_REQUIRED, PhabricatorAuditRequestStatus::AUDIT_REQUESTED, ); $should_audit = array_fuse($should_audit);
foreach ($objects as $key => $object) { if (isset($phids[$object->getAuthorPHID()])) { continue; }
if (!$this->hasAuditorsWithStatus($object, $phids, $should_audit)) { continue; }
$results[$key] = $object; unset($this->objects[$key]); }
return $results; }
private function filterWaitingOnAuthors(array $phids) { $results = array(); $objects = $this->objects;
foreach ($objects as $key => $object) { if (!$object->isAuditStatusConcernRaised()) { continue; }
if (isset($phids[$object->getAuthorPHID()])) { continue; }
$results[$key] = $object; unset($this->objects[$key]); }
return $results; }
private function filterWaitingOnAuditors(array $phids) { $results = array(); $objects = $this->objects;
foreach ($objects as $key => $object) { $any_waiting = $object->isAuditStatusNeedsAudit() || $object->isAuditStatusNeedsVerification() || $object->isAuditStatusPartiallyAudited();
if (!$any_waiting) { continue; }
$results[$key] = $object; unset($this->objects[$key]); }
return $results; }
}