[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/audit/conduit/ -> AuditQueryConduitAPIMethod.php (source)

   1  <?php
   2  
   3  final class AuditQueryConduitAPIMethod extends AuditConduitAPIMethod {
   4  
   5    public function getAPIMethodName() {
   6      return 'audit.query';
   7    }
   8  
   9    public function getMethodDescription() {
  10      return 'Query audit requests.';
  11    }
  12  
  13    public function defineParamTypes() {
  14      $statuses = array(
  15        DiffusionCommitQuery::AUDIT_STATUS_ANY,
  16        DiffusionCommitQuery::AUDIT_STATUS_OPEN,
  17        DiffusionCommitQuery::AUDIT_STATUS_CONCERN,
  18        DiffusionCommitQuery::AUDIT_STATUS_ACCEPTED,
  19        DiffusionCommitQuery::AUDIT_STATUS_PARTIAL,
  20      );
  21      $status_const = $this->formatStringConstants($statuses);
  22  
  23      return array(
  24        'auditorPHIDs'  => 'optional list<phid>',
  25        'commitPHIDs'   => 'optional list<phid>',
  26        'status'        => ('optional '.$status_const.
  27                            ' (default = "audit-status-any")'),
  28        'offset'        => 'optional int',
  29        'limit'         => 'optional int (default = 100)',
  30      );
  31    }
  32  
  33    public function defineReturnType() {
  34      return 'list<dict>';
  35    }
  36  
  37    public function defineErrorTypes() {
  38      return array(
  39      );
  40    }
  41  
  42    protected function execute(ConduitAPIRequest $request) {
  43  
  44      $query = id(new DiffusionCommitQuery())
  45        ->setViewer($request->getUser());
  46  
  47      $auditor_phids = $request->getValue('auditorPHIDs', array());
  48      if ($auditor_phids) {
  49        $query->withAuditorPHIDs($auditor_phids);
  50      }
  51  
  52      $commit_phids = $request->getValue('commitPHIDs', array());
  53      if ($commit_phids) {
  54        $query->withPHIDs($commit_phids);
  55      }
  56  
  57      $status = $request->getValue(
  58        'status',
  59        DiffusionCommitQuery::AUDIT_STATUS_ANY);
  60      $query->withAuditStatus($status);
  61  
  62      // NOTE: These affect the number of commits identified, which is sort of
  63      // reasonable but means the method may return an arbitrary number of
  64      // actual audit requests.
  65      $query->setOffset($request->getValue('offset', 0));
  66      $query->setLimit($request->getValue('limit', 100));
  67  
  68      $commits = $query->execute();
  69  
  70      $auditor_map = array_fuse($auditor_phids);
  71  
  72      $results = array();
  73      foreach ($commits as $commit) {
  74        $requests = $commit->getAudits();
  75        foreach ($requests as $request) {
  76  
  77          // If this audit isn't triggered for one of the requested PHIDs,
  78          // skip it.
  79          if ($auditor_map && empty($auditor_map[$request->getAuditorPHID()])) {
  80            continue;
  81          }
  82  
  83          $results[] = array(
  84            'id'              => $request->getID(),
  85            'commitPHID'      => $request->getCommitPHID(),
  86            'auditorPHID'     => $request->getAuditorPHID(),
  87            'reasons'         => $request->getAuditReasons(),
  88            'status'          => $request->getAuditStatus(),
  89          );
  90        }
  91      }
  92  
  93      return $results;
  94    }
  95  
  96  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1