[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |