Path: blob/master/src/applications/audit/conduit/AuditQueryConduitAPIMethod.php
12256 views
<?php12final class AuditQueryConduitAPIMethod extends AuditConduitAPIMethod {34const AUDIT_LEGACYSTATUS_ANY = 'audit-status-any';5const AUDIT_LEGACYSTATUS_OPEN = 'audit-status-open';6const AUDIT_LEGACYSTATUS_CONCERN = 'audit-status-concern';7const AUDIT_LEGACYSTATUS_ACCEPTED = 'audit-status-accepted';8const AUDIT_LEGACYSTATUS_PARTIAL = 'audit-status-partial';910public function getAPIMethodName() {11return 'audit.query';12}1314public function getMethodDescription() {15return pht('Query audit requests.');16}1718public function getMethodStatus() {19return self::METHOD_STATUS_FROZEN;20}2122public function getMethodStatusDescription() {23return pht(24'This method is frozen and will eventually be deprecated. New code '.25'should use "diffusion.commit.search" instead.');26}2728protected function defineParamTypes() {29$statuses = array(30self::AUDIT_LEGACYSTATUS_ANY,31self::AUDIT_LEGACYSTATUS_OPEN,32self::AUDIT_LEGACYSTATUS_CONCERN,33self::AUDIT_LEGACYSTATUS_ACCEPTED,34self::AUDIT_LEGACYSTATUS_PARTIAL,35);36$status_const = $this->formatStringConstants($statuses);3738return array(39'auditorPHIDs' => 'optional list<phid>',40'commitPHIDs' => 'optional list<phid>',41'status' => ('optional '.$status_const.42' (default = "audit-status-any")'),43'offset' => 'optional int',44'limit' => 'optional int (default = 100)',45);46}4748protected function defineReturnType() {49return 'list<dict>';50}5152protected function execute(ConduitAPIRequest $request) {5354$query = id(new DiffusionCommitQuery())55->setViewer($request->getUser())56->needAuditRequests(true);5758$auditor_phids = $request->getValue('auditorPHIDs', array());59if ($auditor_phids) {60$query->withAuditorPHIDs($auditor_phids);61}6263$commit_phids = $request->getValue('commitPHIDs', array());64if ($commit_phids) {65$query->withPHIDs($commit_phids);66}6768$status_map = array(69self::AUDIT_LEGACYSTATUS_OPEN => array(70DiffusionCommitAuditStatus::NEEDS_AUDIT,71DiffusionCommitAuditStatus::CONCERN_RAISED,72),73self::AUDIT_LEGACYSTATUS_CONCERN => array(74DiffusionCommitAuditStatus::CONCERN_RAISED,75),76self::AUDIT_LEGACYSTATUS_ACCEPTED => array(77DiffusionCommitAuditStatus::AUDITED,78),79self::AUDIT_LEGACYSTATUS_PARTIAL => array(80DiffusionCommitAuditStatus::PARTIALLY_AUDITED,81),82);8384$status = $request->getValue('status');85if (isset($status_map[$status])) {86$query->withStatuses($status_map[$status]);87}8889// NOTE: These affect the number of commits identified, which is sort of90// reasonable but means the method may return an arbitrary number of91// actual audit requests.92$query->setOffset($request->getValue('offset', 0));93$query->setLimit($request->getValue('limit', 100));9495$commits = $query->execute();9697$auditor_map = array_fuse($auditor_phids);9899$results = array();100foreach ($commits as $commit) {101$requests = $commit->getAudits();102foreach ($requests as $request) {103104// If this audit isn't triggered for one of the requested PHIDs,105// skip it.106if ($auditor_map && empty($auditor_map[$request->getAuditorPHID()])) {107continue;108}109110$results[] = array(111'id' => $request->getID(),112'commitPHID' => $request->getCommitPHID(),113'auditorPHID' => $request->getAuditorPHID(),114'reasons' => array(),115'status' => $request->getAuditStatus(),116);117}118}119120return $results;121}122123}124125126