Changeset View
Changeset View
Standalone View
Standalone View
src/applications/release/query/ReleaseChangeRequestSearchEngine.php
- This file was added.
<?php | |||||
final class ReleaseChangeRequestSearchEngine | |||||
extends PhabricatorApplicationSearchEngine { | |||||
public function getResultTypeDescription() { | |||||
return pht('Change Requests'); | |||||
} | |||||
public function getApplicationClassName() { | |||||
return 'PhabricatorReleaseApplication'; | |||||
} | |||||
public function newQuery() { | |||||
return id(new ReleaseChangeRequestQuery()) | |||||
->needRequestObjects(true); | |||||
} | |||||
protected function buildCustomSearchFields() { | |||||
return array( | |||||
id(new PhabricatorSearchDatasourceField()) | |||||
->setLabel('Release') | |||||
->setKey('release') | |||||
->setDatasource(new PhabricatorReleaseReleaseDatasource()), | |||||
id(new PhabricatorSearchSelectField()) | |||||
->setLabel('Status') | |||||
->setKey('status') | |||||
->setOptions($this->getStateOptions()) | |||||
->setDefault('all'), | |||||
); | |||||
} | |||||
protected function buildQueryFromParameters(array $map) { | |||||
$query = $this->newQuery(); | |||||
$release = idx($map, 'release'); | |||||
if ($release) { | |||||
$query->withReleasePHIDs($release); | |||||
} | |||||
$status = idx($map, 'status', 'all'); | |||||
if ($status != 'all') { | |||||
$query->withStatuses(array($status)); | |||||
} | |||||
return $query; | |||||
} | |||||
protected function getURI($path) { | |||||
return '/release/changerequest/'.$path; | |||||
} | |||||
protected function getBuiltinQueryNames() { | |||||
return array( | |||||
'all' => pht('All'), | |||||
'pending' => pht('Pending'), | |||||
); | |||||
} | |||||
public function buildSavedQueryFromBuiltin($query_key) { | |||||
$query = $this->newSavedQuery(); | |||||
$query->setQueryKey($query_key); | |||||
$viewer_phid = $this->requireViewer()->getPHID(); | |||||
switch ($query_key) { | |||||
case 'all': | |||||
return $query; | |||||
case 'pending': | |||||
return $query | |||||
->setParameter('status', 'pending'); // TODO use const | |||||
} | |||||
return parent::buildSavedQueryFromBuiltin($query_key); | |||||
} | |||||
private function getTemplateOptions() { | |||||
return array('all' => 'All Types') + | |||||
PhabricatorReleaseTemplate::getTemplatesMap(); | |||||
} | |||||
private function getStateOptions() { | |||||
return array( | |||||
'all' => 'Any status', | |||||
) + ReleaseChangeRequest::getStatusMap(); | |||||
} | |||||
protected function getRequiredHandlePHIDsForResultList( | |||||
array $changes, | |||||
PhabricatorSavedQuery $query) { | |||||
return mpull($changes, 'getReleasePHID'); | |||||
} | |||||
protected function renderResultList( | |||||
array $changes, | |||||
PhabricatorSavedQuery $query, | |||||
array $handles) { | |||||
assert_instances_of($changes, 'ReleaseChangeRequest'); | |||||
$viewer = $this->requireViewer(); | |||||
$list = new PHUIObjectItemListView(); | |||||
foreach ($changes as $change) { | |||||
$name = $change->getTitle(); | |||||
$item = id(new PHUIObjectItemView()) | |||||
->setObjectName($change->getMonogram()) | |||||
->setHeader($name) | |||||
->setHref($change->getURI()) | |||||
->addAttribute($change->getStatusName()) | |||||
->addAttribute(pht( | |||||
'Release: %s', | |||||
$viewer->renderHandle($change->getReleasePHID()))); | |||||
$list->addItem($item); | |||||
} | |||||
return id(new PhabricatorApplicationSearchResultView()) | |||||
->setObjectList($list) | |||||
->setNoDataString(pht('No change requests found.')); | |||||
} | |||||
} |