Changeset View
Changeset View
Standalone View
Standalone View
src/applications/release/query/ReleaseReleaseSearchEngine.php
- This file was added.
<?php | |||||
final class ReleaseReleaseSearchEngine | |||||
extends PhabricatorApplicationSearchEngine { | |||||
public function getResultTypeDescription() { | |||||
return pht('Releases'); | |||||
} | |||||
public function getApplicationClassName() { | |||||
return 'PhabricatorReleaseApplication'; | |||||
} | |||||
public function newQuery() { | |||||
return id(new ReleaseReleaseQuery()); | |||||
} | |||||
protected function buildCustomSearchFields() { | |||||
return array( | |||||
id(new PhabricatorSearchStringListField()) | |||||
->setLabel(pht('Name')) | |||||
->setKey('name'), | |||||
id(new PhabricatorSearchSelectField()) | |||||
->setLabel('Release Type') | |||||
->setKey('template') | |||||
->setOptions($this->getTemplateOptions()) | |||||
->setDefault('all'), | |||||
id(new PhabricatorSearchSelectField()) | |||||
->setLabel('State') | |||||
->setKey('state') | |||||
->setOptions($this->getStateOptions()) | |||||
->setDefault('all'), | |||||
id(new PhabricatorSearchSelectField()) | |||||
->setLabel(pht('Group By')) | |||||
->setKey('group') | |||||
->setOptions($this->getGroupOptions()), | |||||
); | |||||
} | |||||
protected function buildQueryFromParameters(array $map) { | |||||
$query = $this->newQuery(); | |||||
if (idx($map, 'name')) { | |||||
$query->withNames($map['name']); | |||||
} | |||||
$state = idx($map, 'state', 'all'); | |||||
if ($state != 'all') { | |||||
if ($state == 'active') { | |||||
$state = ReleaseRelease::getOpenStates(); | |||||
} else if (!is_array($state)) { | |||||
$state = array($state); | |||||
} | |||||
$query->withStates($state); | |||||
} | |||||
$template = idx($map, 'template', 'all'); | |||||
if ($template != 'all') { | |||||
$query->withTemplateKeys(array($template)); | |||||
} | |||||
$group = idx($map, 'group'); | |||||
$group = idx($this->getGroupValues(), $group); | |||||
if ($group) { | |||||
$query->setGroupBy($group); | |||||
} | |||||
return $query; | |||||
} | |||||
protected function getURI($path) { | |||||
return '/release/'.$path; | |||||
} | |||||
protected function getBuiltinQueryNames() { | |||||
$names = array(); | |||||
$names['open'] = pht('Open Releases'); | |||||
$names['prod'] = pht('In Production'); | |||||
$names['all'] = pht('All'); | |||||
return $names; | |||||
} | |||||
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 'open': | |||||
return $query | |||||
->setParameter('state', 'active'); | |||||
case 'prod': | |||||
return $query | |||||
->setParameter( | |||||
'state', | |||||
array(ReleaseRelease::STATE_PRODUCTION)); | |||||
} | |||||
return parent::buildSavedQueryFromBuiltin($query_key); | |||||
} | |||||
private function getGroupOptions() { | |||||
return array( | |||||
'none' => pht('None'), | |||||
'template' => pht('Release Type'), | |||||
'status' => pht('State'), | |||||
); | |||||
} | |||||
private function getGroupValues() { | |||||
return array( | |||||
'none' => ReleaseReleaseQuery::GROUP_NONE, | |||||
'template' => ReleaseReleaseQuery::GROUP_TEMPLATE, | |||||
'status' => ReleaseReleaseQuery::GROUP_STATE, | |||||
); | |||||
} | |||||
private function getTemplateOptions() { | |||||
return array('all' => 'All Types') + | |||||
PhabricatorReleaseTemplate::getTemplatesMap(); | |||||
} | |||||
private function getStateOptions() { | |||||
return array( | |||||
'all' => 'Any state', | |||||
'active' => 'Active states', | |||||
) + ReleaseRelease::getStatesMap(); | |||||
} | |||||
protected function getRequiredHandlePHIDsForResultList( | |||||
array $releases, | |||||
PhabricatorSavedQuery $query) { | |||||
return array(); | |||||
} | |||||
protected function renderResultList( | |||||
array $releases, | |||||
PhabricatorSavedQuery $query, | |||||
array $handles) { | |||||
assert_instances_of($releases, 'ReleaseRelease'); | |||||
$viewer = $this->requireViewer(); | |||||
$list = new PHUIObjectItemListView(); | |||||
foreach ($releases as $release) { | |||||
$name = $release->getName(); | |||||
$item = id(new PHUIObjectItemView()) | |||||
->setObjectName($release->getMonogram()) | |||||
->setHeader($name) | |||||
->setHref($release->getURI()) | |||||
->addAttribute($release->getReleaseTemplateName()) | |||||
->addAttribute($release->getStateName()); | |||||
$list->addItem($item); | |||||
} | |||||
return id(new PhabricatorApplicationSearchResultView()) | |||||
->setObjectList($list) | |||||
->setNoDataString(pht('No releases found.')); | |||||
} | |||||
} |