Audit - move over to application search
Summary: ...also kills off "PhabricatorAuditCommitQuery" and "PhabricatorAuditQuery", by moving the work to "DiffusionCommitQuery". Generally cleans up some code around the joint on this too. Also provides policies for audit requests, which is basically the policy for the underlying commit. Fixes T4715. (For the TODO I added about files, I just grabbed T4713.) Test Plan: Audit: verified the three default views all showed the correct things, including highligthing. did some custom queries and got the correct results. Diffusion: verified "blame view" still worked. verified paths were highlighted for packages i owned. Home: verified audit boxes showed up with proper commits w/ audits bin/audit: played around with it via --dry-run and got the right audits back Reviewers: epriestley Reviewed By: epriestley Subscribers: chad, epriestley, Korvin Maniphest Tasks: T4715 Differential Revision: https://secure.phabricator.com/D8805
This commit is contained in:
154
src/applications/audit/query/PhabricatorCommitSearchEngine.php
Normal file
154
src/applications/audit/query/PhabricatorCommitSearchEngine.php
Normal file
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
final class PhabricatorCommitSearchEngine
|
||||
extends PhabricatorApplicationSearchEngine {
|
||||
|
||||
public function buildSavedQueryFromRequest(AphrontRequest $request) {
|
||||
$saved = new PhabricatorSavedQuery();
|
||||
|
||||
$saved->setParameter(
|
||||
'auditorPHIDs',
|
||||
$this->readPHIDsFromRequest($request, 'auditorPHIDs'));
|
||||
|
||||
$saved->setParameter(
|
||||
'commitAuthorPHIDs',
|
||||
$this->readUsersFromRequest($request, 'commitAuthorPHIDs'));
|
||||
|
||||
$saved->setParameter(
|
||||
'auditStatus',
|
||||
$request->getStr('auditStatus'));
|
||||
|
||||
$saved->setParameter(
|
||||
'repositoryPHIDs',
|
||||
$this->readPHIDsFromRequest($request, 'repositoryPHIDs'));
|
||||
|
||||
// -- TODO - T4173 - file location
|
||||
|
||||
return $saved;
|
||||
}
|
||||
|
||||
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
|
||||
$query = id(new DiffusionCommitQuery())
|
||||
->needAuditRequests(true)
|
||||
->needCommitData(true);
|
||||
|
||||
$auditor_phids = $saved->getParameter('auditorPHIDs', array());
|
||||
if ($auditor_phids) {
|
||||
$query->withAuditorPHIDs($auditor_phids);
|
||||
}
|
||||
|
||||
$commit_author_phids = $saved->getParameter('commitAuthorPHIDs', array());
|
||||
if ($commit_author_phids) {
|
||||
$query->withAuthorPHIDs($commit_author_phids);
|
||||
}
|
||||
|
||||
$audit_status = $saved->getParameter('auditStatus', null);
|
||||
if ($audit_status) {
|
||||
$query->withAuditStatus($audit_status);
|
||||
}
|
||||
|
||||
$awaiting_user_phid = $saved->getParameter('awaitingUserPHID', null);
|
||||
if ($awaiting_user_phid) {
|
||||
// This is used only for the built-in "needs attention" filter,
|
||||
// so cheat and just use the already-loaded viewer rather than reloading
|
||||
// it.
|
||||
$query->withAuditAwaitingUser($this->requireViewer());
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function buildSearchForm(
|
||||
AphrontFormView $form,
|
||||
PhabricatorSavedQuery $saved) {
|
||||
|
||||
$auditor_phids = $saved->getParameter('auditorPHIDs', array());
|
||||
$commit_author_phids = $saved->getParameter(
|
||||
'commitAuthorPHIDs',
|
||||
array());
|
||||
$audit_status = $saved->getParameter('auditStatus', null);
|
||||
|
||||
$phids = array_mergev(
|
||||
array(
|
||||
$auditor_phids,
|
||||
$commit_author_phids));
|
||||
|
||||
$handles = id(new PhabricatorHandleQuery())
|
||||
->setViewer($this->requireViewer())
|
||||
->withPHIDs($phids)
|
||||
->execute();
|
||||
|
||||
$form
|
||||
->appendChild(
|
||||
id(new AphrontFormTokenizerControl())
|
||||
->setDatasource('/typeahead/common/usersprojectsorpackages/')
|
||||
->setName('auditorPHIDs')
|
||||
->setLabel(pht('Auditors'))
|
||||
->setValue(array_select_keys($handles, $auditor_phids)))
|
||||
->appendChild(
|
||||
id(new AphrontFormTokenizerControl())
|
||||
->setDatasource('/typeahead/common/users/')
|
||||
->setName('commitAuthorPHIDs')
|
||||
->setLabel(pht('Commit Authors'))
|
||||
->setValue(array_select_keys($handles, $commit_author_phids)))
|
||||
->appendChild(
|
||||
id(new AphrontFormSelectControl())
|
||||
->setName('auditStatus')
|
||||
->setLabel(pht('Audit Status'))
|
||||
->setOptions($this->getAuditStatusOptions())
|
||||
->setValue($audit_status));
|
||||
}
|
||||
|
||||
protected function getURI($path) {
|
||||
return '/audit/'.$path;
|
||||
}
|
||||
|
||||
public function getBuiltinQueryNames() {
|
||||
$names = array();
|
||||
|
||||
if ($this->requireViewer()->isLoggedIn()) {
|
||||
$names['need_attention'] = pht('Need Attention');
|
||||
}
|
||||
$names['open'] = pht('Open Audits');
|
||||
|
||||
$names['all'] = pht('All Commits');
|
||||
|
||||
return $names;
|
||||
}
|
||||
|
||||
public function buildSavedQueryFromBuiltin($query_key) {
|
||||
$query = $this->newSavedQuery();
|
||||
$query->setQueryKey($query_key);
|
||||
$viewer = $this->requireViewer();
|
||||
|
||||
switch ($query_key) {
|
||||
case 'all':
|
||||
return $query;
|
||||
case 'open':
|
||||
$query->setParameter(
|
||||
'auditStatus',
|
||||
DiffusionCommitQuery::AUDIT_STATUS_OPEN);
|
||||
return $query;
|
||||
case 'need_attention':
|
||||
$query->setParameter('awaitingUserPHID', $viewer->getPHID());
|
||||
$query->setParameter(
|
||||
'auditStatus',
|
||||
DiffusionCommitQuery::AUDIT_STATUS_OPEN);
|
||||
$query->setParameter(
|
||||
'auditorPHIDs',
|
||||
PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer));
|
||||
return $query;
|
||||
}
|
||||
|
||||
return parent::buildSavedQueryFromBuiltin($query_key);
|
||||
}
|
||||
|
||||
private function getAuditStatusOptions() {
|
||||
return array(
|
||||
DiffusionCommitQuery::AUDIT_STATUS_ANY => pht('Any'),
|
||||
DiffusionCommitQuery::AUDIT_STATUS_OPEN => pht('Open'),
|
||||
DiffusionCommitQuery::AUDIT_STATUS_CONCERN => pht('Concern Raised'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user