3 final class AuditQueryConduitAPIMethod
extends AuditConduitAPIMethod
{
5 const AUDIT_LEGACYSTATUS_ANY
= 'audit-status-any';
6 const AUDIT_LEGACYSTATUS_OPEN
= 'audit-status-open';
7 const AUDIT_LEGACYSTATUS_CONCERN
= 'audit-status-concern';
8 const AUDIT_LEGACYSTATUS_ACCEPTED
= 'audit-status-accepted';
9 const AUDIT_LEGACYSTATUS_PARTIAL
= 'audit-status-partial';
11 public function getAPIMethodName() {
15 public function getMethodDescription() {
16 return pht('Query audit requests.');
19 public function getMethodStatus() {
20 return self
::METHOD_STATUS_FROZEN
;
23 public function getMethodStatusDescription() {
25 'This method is frozen and will eventually be deprecated. New code '.
26 'should use "diffusion.commit.search" instead.');
29 protected function defineParamTypes() {
31 self
::AUDIT_LEGACYSTATUS_ANY
,
32 self
::AUDIT_LEGACYSTATUS_OPEN
,
33 self
::AUDIT_LEGACYSTATUS_CONCERN
,
34 self
::AUDIT_LEGACYSTATUS_ACCEPTED
,
35 self
::AUDIT_LEGACYSTATUS_PARTIAL
,
37 $status_const = $this->formatStringConstants($statuses);
40 'auditorPHIDs' => 'optional list<phid>',
41 'commitPHIDs' => 'optional list<phid>',
42 'status' => ('optional '.$status_const.
43 ' (default = "audit-status-any")'),
44 'offset' => 'optional int',
45 'limit' => 'optional int (default = 100)',
49 protected function defineReturnType() {
53 protected function execute(ConduitAPIRequest
$request) {
55 $query = id(new DiffusionCommitQuery())
56 ->setViewer($request->getUser())
57 ->needAuditRequests(true);
59 $auditor_phids = $request->getValue('auditorPHIDs', array());
61 $query->withAuditorPHIDs($auditor_phids);
64 $commit_phids = $request->getValue('commitPHIDs', array());
66 $query->withPHIDs($commit_phids);
70 self
::AUDIT_LEGACYSTATUS_OPEN
=> array(
71 DiffusionCommitAuditStatus
::NEEDS_AUDIT
,
72 DiffusionCommitAuditStatus
::CONCERN_RAISED
,
74 self
::AUDIT_LEGACYSTATUS_CONCERN
=> array(
75 DiffusionCommitAuditStatus
::CONCERN_RAISED
,
77 self
::AUDIT_LEGACYSTATUS_ACCEPTED
=> array(
78 DiffusionCommitAuditStatus
::AUDITED
,
80 self
::AUDIT_LEGACYSTATUS_PARTIAL
=> array(
81 DiffusionCommitAuditStatus
::PARTIALLY_AUDITED
,
85 $status = $request->getValue('status');
86 if (isset($status_map[$status])) {
87 $query->withStatuses($status_map[$status]);
90 // NOTE: These affect the number of commits identified, which is sort of
91 // reasonable but means the method may return an arbitrary number of
92 // actual audit requests.
93 $query->setOffset($request->getValue('offset', 0));
94 $query->setLimit($request->getValue('limit', 100));
96 $commits = $query->execute();
98 $auditor_map = array_fuse($auditor_phids);
101 foreach ($commits as $commit) {
102 $requests = $commit->getAudits();
103 foreach ($requests as $request) {
105 // If this audit isn't triggered for one of the requested PHIDs,
107 if ($auditor_map && empty($auditor_map[$request->getAuditorPHID()])) {
112 'id' => $request->getID(),
113 'commitPHID' => $request->getCommitPHID(),
114 'auditorPHID' => $request->getAuditorPHID(),
115 'reasons' => array(),
116 'status' => $request->getAuditStatus(),