Changeset View
Changeset View
Standalone View
Standalone View
src/applications/audit/query/PhabricatorCommitSearchEngine.php
Show All 11 Lines | final class PhabricatorCommitSearchEngine | ||||
} | } | ||||
public function newQuery() { | public function newQuery() { | ||||
return id(new DiffusionCommitQuery()) | return id(new DiffusionCommitQuery()) | ||||
->needAuditRequests(true) | ->needAuditRequests(true) | ||||
->needCommitData(true); | ->needCommitData(true); | ||||
} | } | ||||
protected function newResultBuckets() { | |||||
return DiffusionCommitResultBucket::getAllResultBuckets(); | |||||
} | |||||
protected function buildQueryFromParameters(array $map) { | protected function buildQueryFromParameters(array $map) { | ||||
$query = $this->newQuery(); | $query = $this->newQuery(); | ||||
if ($map['needsAuditByPHIDs']) { | if ($map['responsiblePHIDs']) { | ||||
$query->withNeedsAuditByPHIDs($map['needsAuditByPHIDs']); | $query->withResponsiblePHIDs($map['responsiblePHIDs']); | ||||
} | } | ||||
if ($map['auditorPHIDs']) { | if ($map['auditorPHIDs']) { | ||||
$query->withAuditorPHIDs($map['auditorPHIDs']); | $query->withAuditorPHIDs($map['auditorPHIDs']); | ||||
} | } | ||||
if ($map['commitAuthorPHIDs']) { | if ($map['authorPHIDs']) { | ||||
$query->withAuthorPHIDs($map['commitAuthorPHIDs']); | $query->withAuthorPHIDs($map['authorPHIDs']); | ||||
} | } | ||||
if ($map['auditStatus']) { | if ($map['statuses']) { | ||||
$query->withAuditStatus($map['auditStatus']); | $query->withStatuses($map['statuses']); | ||||
} | } | ||||
if ($map['repositoryPHIDs']) { | if ($map['repositoryPHIDs']) { | ||||
$query->withRepositoryPHIDs($map['repositoryPHIDs']); | $query->withRepositoryPHIDs($map['repositoryPHIDs']); | ||||
} | } | ||||
return $query; | return $query; | ||||
} | } | ||||
protected function buildCustomSearchFields() { | protected function buildCustomSearchFields() { | ||||
return array( | return array( | ||||
id(new PhabricatorSearchDatasourceField()) | id(new PhabricatorSearchDatasourceField()) | ||||
->setLabel(pht('Needs Audit By')) | ->setLabel(pht('Responsible Users')) | ||||
->setKey('needsAuditByPHIDs') | ->setKey('responsiblePHIDs') | ||||
->setAliases(array('needs', 'need')) | ->setConduitKey('responsible') | ||||
->setDatasource(new DiffusionAuditorFunctionDatasource()), | ->setAliases(array('responsible', 'responsibles', 'responsiblePHID')) | ||||
->setDatasource(new DifferentialResponsibleDatasource()), | |||||
id(new PhabricatorUsersSearchField()) | |||||
->setLabel(pht('Authors')) | |||||
->setKey('authorPHIDs') | |||||
->setConduitKey('authors') | |||||
->setAliases(array('author', 'authors', 'authorPHID')), | |||||
id(new PhabricatorSearchDatasourceField()) | id(new PhabricatorSearchDatasourceField()) | ||||
->setLabel(pht('Auditors')) | ->setLabel(pht('Auditors')) | ||||
->setKey('auditorPHIDs') | ->setKey('auditorPHIDs') | ||||
->setAliases(array('auditor', 'auditors')) | ->setConduitKey('auditors') | ||||
->setAliases(array('auditor', 'auditors', 'auditorPHID')) | |||||
->setDatasource(new DiffusionAuditorFunctionDatasource()), | ->setDatasource(new DiffusionAuditorFunctionDatasource()), | ||||
id(new PhabricatorUsersSearchField()) | id(new PhabricatorSearchCheckboxesField()) | ||||
->setLabel(pht('Authors')) | |||||
->setKey('commitAuthorPHIDs') | |||||
->setAliases(array('author', 'authors')), | |||||
id(new PhabricatorSearchSelectField()) | |||||
->setLabel(pht('Audit Status')) | ->setLabel(pht('Audit Status')) | ||||
->setKey('auditStatus') | ->setKey('statuses') | ||||
->setAliases(array('status')) | ->setAliases(array('status')) | ||||
->setOptions($this->getAuditStatusOptions()), | ->setOptions(PhabricatorAuditCommitStatusConstants::getStatusNameMap()), | ||||
id(new PhabricatorSearchDatasourceField()) | id(new PhabricatorSearchDatasourceField()) | ||||
->setLabel(pht('Repositories')) | ->setLabel(pht('Repositories')) | ||||
->setKey('repositoryPHIDs') | ->setKey('repositoryPHIDs') | ||||
->setAliases(array('repository', 'repositories')) | ->setConduitKey('repositories') | ||||
->setAliases(array('repository', 'repositories', 'repositoryPHID')) | |||||
->setDatasource(new DiffusionRepositoryDatasource()), | ->setDatasource(new DiffusionRepositoryDatasource()), | ||||
); | ); | ||||
} | } | ||||
protected function getURI($path) { | protected function getURI($path) { | ||||
return '/diffusion/commit/'.$path; | return '/diffusion/commit/'.$path; | ||||
} | } | ||||
protected function getBuiltinQueryNames() { | protected function getBuiltinQueryNames() { | ||||
$names = array(); | $names = array(); | ||||
if ($this->requireViewer()->isLoggedIn()) { | if ($this->requireViewer()->isLoggedIn()) { | ||||
$names['need'] = pht('Needs Audit'); | $names['active'] = pht('Active Audits'); | ||||
$names['problem'] = pht('Problem Commits'); | $names['authored'] = pht('Authored'); | ||||
} | $names['audited'] = pht('Audited'); | ||||
$names['open'] = pht('Open Audits'); | |||||
if ($this->requireViewer()->isLoggedIn()) { | |||||
$names['authored'] = pht('Authored Commits'); | |||||
} | } | ||||
$names['all'] = pht('All Commits'); | $names['all'] = pht('All Commits'); | ||||
return $names; | return $names; | ||||
} | } | ||||
public function buildSavedQueryFromBuiltin($query_key) { | public function buildSavedQueryFromBuiltin($query_key) { | ||||
$query = $this->newSavedQuery(); | $query = $this->newSavedQuery(); | ||||
$query->setQueryKey($query_key); | $query->setQueryKey($query_key); | ||||
$viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
$viewer_phid = $viewer->getPHID(); | $viewer_phid = $viewer->getPHID(); | ||||
$status_open = DiffusionCommitQuery::AUDIT_STATUS_OPEN; | |||||
switch ($query_key) { | switch ($query_key) { | ||||
case 'all': | case 'all': | ||||
return $query; | return $query; | ||||
case 'open': | case 'active': | ||||
$query->setParameter('auditStatus', $status_open); | $bucket_key = DiffusionCommitRequiredActionResultBucket::BUCKETKEY; | ||||
return $query; | |||||
case 'need': | |||||
$needs_tokens = array( | |||||
$viewer_phid, | |||||
'projects('.$viewer_phid.')', | |||||
'packages('.$viewer_phid.')', | |||||
); | |||||
$query->setParameter('needsAuditByPHIDs', $needs_tokens); | $open = PhabricatorAuditCommitStatusConstants::getOpenStatusConstants(); | ||||
$query->setParameter('auditStatus', $status_open); | |||||
$query | |||||
->setParameter('responsiblePHIDs', array($viewer_phid)) | |||||
->setParameter('statuses', $open) | |||||
->setParameter('bucket', $bucket_key); | |||||
return $query; | return $query; | ||||
case 'authored': | case 'authored': | ||||
$query->setParameter('commitAuthorPHIDs', array($viewer->getPHID())); | $query | ||||
->setParameter('authorPHIDs', array($viewer_phid)); | |||||
return $query; | return $query; | ||||
case 'problem': | case 'audited': | ||||
$query->setParameter('commitAuthorPHIDs', array($viewer->getPHID())); | $query | ||||
$query->setParameter( | ->setParameter('auditorPHIDs', array($viewer_phid)); | ||||
'auditStatus', | |||||
DiffusionCommitQuery::AUDIT_STATUS_CONCERN); | |||||
return $query; | return $query; | ||||
} | } | ||||
return parent::buildSavedQueryFromBuiltin($query_key); | 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'), | |||||
DiffusionCommitQuery::AUDIT_STATUS_ACCEPTED => pht('Accepted'), | |||||
DiffusionCommitQuery::AUDIT_STATUS_PARTIAL => pht('Partially Audited'), | |||||
); | |||||
} | |||||
protected function renderResultList( | protected function renderResultList( | ||||
array $commits, | array $commits, | ||||
PhabricatorSavedQuery $query, | PhabricatorSavedQuery $query, | ||||
array $handles) { | array $handles) { | ||||
assert_instances_of($commits, 'PhabricatorRepositoryCommit'); | assert_instances_of($commits, 'PhabricatorRepositoryCommit'); | ||||
$viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
$nodata = pht('No matching audits.'); | |||||
$view = id(new PhabricatorAuditListView()) | $bucket = $this->getResultBucket($query); | ||||
->setUser($viewer) | |||||
->setCommits($commits) | $authority_phids = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser( | ||||
->setAuthorityPHIDs( | $viewer); | ||||
PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer)) | |||||
->setNoDataString($nodata); | $template = id(new PhabricatorAuditListView()) | ||||
$phids = $view->getRequiredHandlePHIDs(); | |||||
if ($phids) { | |||||
$handles = id(new PhabricatorHandleQuery()) | |||||
->setViewer($viewer) | ->setViewer($viewer) | ||||
->withPHIDs($phids) | ->setAuthorityPHIDs($authority_phids); | ||||
->execute(); | |||||
$views = array(); | |||||
if ($bucket) { | |||||
$bucket->setViewer($viewer); | |||||
try { | |||||
$groups = $bucket->newResultGroups($query, $commits); | |||||
foreach ($groups as $group) { | |||||
$views[] = id(clone $template) | |||||
->setHeader($group->getName()) | |||||
->setNoDataString($group->getNoDataString()) | |||||
->setCommits($group->getObjects()); | |||||
} | |||||
} catch (Exception $ex) { | |||||
$this->addError($ex->getMessage()); | |||||
} | |||||
} else { | } else { | ||||
$handles = array(); | $views[] = id(clone $template) | ||||
->setCommits($commits) | |||||
->setNoDataString(pht('No matching commits.')); | |||||
} | } | ||||
$view->setHandles($handles); | if (count($views) == 1) { | ||||
$list = $view->buildList(); | $list = head($views)->buildList(); | ||||
} else { | |||||
$list = $views; | |||||
} | |||||
$result = new PhabricatorApplicationSearchResultView(); | $result = new PhabricatorApplicationSearchResultView(); | ||||
$result->setContent($list); | $result->setContent($list); | ||||
return $result; | return $result; | ||||
} | } | ||||
protected function getNewUserBody() { | protected function getNewUserBody() { | ||||
Show All 12 Lines |