[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/audit/query/ -> PhabricatorCommitSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorCommitSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Commits');
   8    }
   9  
  10    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  11      $saved = new PhabricatorSavedQuery();
  12  
  13      $saved->setParameter(
  14        'auditorPHIDs',
  15        $this->readPHIDsFromRequest($request, 'auditorPHIDs'));
  16  
  17      $saved->setParameter(
  18        'commitAuthorPHIDs',
  19        $this->readUsersFromRequest($request, 'authors'));
  20  
  21      $saved->setParameter(
  22        'auditStatus',
  23        $request->getStr('auditStatus'));
  24  
  25      $saved->setParameter(
  26        'repositoryPHIDs',
  27        $this->readPHIDsFromRequest($request, 'repositoryPHIDs'));
  28  
  29      // -- TODO - T4173 - file location
  30  
  31      return $saved;
  32    }
  33  
  34    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  35      $query = id(new DiffusionCommitQuery())
  36        ->needAuditRequests(true)
  37        ->needCommitData(true);
  38  
  39      $auditor_phids = $saved->getParameter('auditorPHIDs', array());
  40      if ($auditor_phids) {
  41        $query->withAuditorPHIDs($auditor_phids);
  42      }
  43  
  44      $commit_author_phids = $saved->getParameter('commitAuthorPHIDs', array());
  45      if ($commit_author_phids) {
  46        $query->withAuthorPHIDs($commit_author_phids);
  47      }
  48  
  49      $audit_status = $saved->getParameter('auditStatus', null);
  50      if ($audit_status) {
  51        $query->withAuditStatus($audit_status);
  52      }
  53  
  54      $awaiting_user_phid = $saved->getParameter('awaitingUserPHID', null);
  55      if ($awaiting_user_phid) {
  56        // This is used only for the built-in "needs attention" filter,
  57        // so cheat and just use the already-loaded viewer rather than reloading
  58        // it.
  59        $query->withAuditAwaitingUser($this->requireViewer());
  60      }
  61  
  62      $repository_phids = $saved->getParameter('repositoryPHIDs', array());
  63      if ($repository_phids) {
  64        $query->withRepositoryPHIDs($repository_phids);
  65      }
  66  
  67      return $query;
  68    }
  69  
  70    public function buildSearchForm(
  71      AphrontFormView $form,
  72      PhabricatorSavedQuery $saved) {
  73  
  74      $auditor_phids = $saved->getParameter('auditorPHIDs', array());
  75      $commit_author_phids = $saved->getParameter(
  76        'commitAuthorPHIDs',
  77        array());
  78      $audit_status = $saved->getParameter('auditStatus', null);
  79      $repository_phids = $saved->getParameter('repositoryPHIDs', array());
  80  
  81      $phids = array_mergev(
  82        array(
  83          $auditor_phids,
  84          $commit_author_phids,
  85          $repository_phids,
  86        ));
  87  
  88      $handles = id(new PhabricatorHandleQuery())
  89        ->setViewer($this->requireViewer())
  90        ->withPHIDs($phids)
  91        ->execute();
  92  
  93      $form
  94        ->appendChild(
  95          id(new AphrontFormTokenizerControl())
  96            ->setDatasource(new DiffusionAuditorDatasource())
  97            ->setName('auditorPHIDs')
  98            ->setLabel(pht('Auditors'))
  99            ->setValue(array_select_keys($handles, $auditor_phids)))
 100        ->appendChild(
 101          id(new AphrontFormTokenizerControl())
 102            ->setDatasource(new PhabricatorPeopleDatasource())
 103            ->setName('authors')
 104            ->setLabel(pht('Commit Authors'))
 105            ->setValue(array_select_keys($handles, $commit_author_phids)))
 106         ->appendChild(
 107           id(new AphrontFormSelectControl())
 108           ->setName('auditStatus')
 109           ->setLabel(pht('Audit Status'))
 110           ->setOptions($this->getAuditStatusOptions())
 111           ->setValue($audit_status))
 112         ->appendChild(
 113           id(new AphrontFormTokenizerControl())
 114           ->setLabel(pht('Repositories'))
 115           ->setName('repositoryPHIDs')
 116           ->setDatasource(new DiffusionRepositoryDatasource())
 117           ->setValue(array_select_keys($handles, $repository_phids)));
 118  
 119    }
 120  
 121    protected function getURI($path) {
 122      return '/audit/'.$path;
 123    }
 124  
 125    public function getBuiltinQueryNames() {
 126      $names = array();
 127  
 128      if ($this->requireViewer()->isLoggedIn()) {
 129        $names['need'] = pht('Need Attention');
 130        $names['problem'] = pht('Problem Commits');
 131      }
 132  
 133      $names['open'] = pht('Open Audits');
 134  
 135      if ($this->requireViewer()->isLoggedIn()) {
 136        $names['authored'] = pht('Authored Commits');
 137      }
 138  
 139      $names['all'] = pht('All Commits');
 140  
 141      return $names;
 142    }
 143  
 144    public function buildSavedQueryFromBuiltin($query_key) {
 145      $query = $this->newSavedQuery();
 146      $query->setQueryKey($query_key);
 147      $viewer = $this->requireViewer();
 148  
 149      switch ($query_key) {
 150        case 'all':
 151          return $query;
 152        case 'open':
 153          $query->setParameter(
 154            'auditStatus',
 155            DiffusionCommitQuery::AUDIT_STATUS_OPEN);
 156          return $query;
 157        case 'need':
 158          $query->setParameter('awaitingUserPHID', $viewer->getPHID());
 159          $query->setParameter(
 160            'auditStatus',
 161            DiffusionCommitQuery::AUDIT_STATUS_OPEN);
 162          $query->setParameter(
 163            'auditorPHIDs',
 164            PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer));
 165          return $query;
 166        case 'authored':
 167          $query->setParameter('commitAuthorPHIDs', array($viewer->getPHID()));
 168          return $query;
 169        case 'problem':
 170          $query->setParameter('commitAuthorPHIDs', array($viewer->getPHID()));
 171          $query->setParameter(
 172            'auditStatus',
 173            DiffusionCommitQuery::AUDIT_STATUS_CONCERN);
 174          return $query;
 175      }
 176  
 177      return parent::buildSavedQueryFromBuiltin($query_key);
 178    }
 179  
 180    private function getAuditStatusOptions() {
 181      return array(
 182        DiffusionCommitQuery::AUDIT_STATUS_ANY => pht('Any'),
 183        DiffusionCommitQuery::AUDIT_STATUS_OPEN => pht('Open'),
 184        DiffusionCommitQuery::AUDIT_STATUS_CONCERN => pht('Concern Raised'),
 185        DiffusionCommitQuery::AUDIT_STATUS_ACCEPTED => pht('Accepted'),
 186        DiffusionCommitQuery::AUDIT_STATUS_PARTIAL => pht('Partially Audited'),
 187      );
 188    }
 189  
 190    protected function renderResultList(
 191      array $commits,
 192      PhabricatorSavedQuery $query,
 193      array $handles) {
 194  
 195      assert_instances_of($commits, 'PhabricatorRepositoryCommit');
 196  
 197      $viewer = $this->requireViewer();
 198      $nodata = pht('No matching audits.');
 199      $view = id(new PhabricatorAuditListView())
 200        ->setUser($viewer)
 201        ->setCommits($commits)
 202        ->setAuthorityPHIDs(
 203          PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer))
 204        ->setNoDataString($nodata);
 205  
 206      $phids = $view->getRequiredHandlePHIDs();
 207      if ($phids) {
 208        $handles = id(new PhabricatorHandleQuery())
 209          ->setViewer($viewer)
 210          ->withPHIDs($phids)
 211          ->execute();
 212      } else {
 213        $handles = array();
 214      }
 215  
 216      $view->setHandles($handles);
 217  
 218      return $view->buildList();
 219    }
 220  
 221  }


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