Path: blob/master/src/applications/drydock/query/DrydockRepositoryOperationSearchEngine.php
12256 views
<?php12final class DrydockRepositoryOperationSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Drydock Repository Operations');7}89public function getApplicationClassName() {10return 'PhabricatorDrydockApplication';11}1213public function newQuery() {14return id(new DrydockRepositoryOperationQuery());15}1617protected function buildQueryFromParameters(array $map) {18$query = $this->newQuery();1920if ($map['repositoryPHIDs']) {21$query->withRepositoryPHIDs($map['repositoryPHIDs']);22}2324if ($map['authorPHIDs']) {25$query->withAuthorPHIDs($map['authorPHIDs']);26}2728if ($map['states']) {29$query->withOperationStates($map['states']);30}3132return $query;33}3435protected function buildCustomSearchFields() {36return array(37id(new PhabricatorSearchDatasourceField())38->setLabel(pht('Repositories'))39->setKey('repositoryPHIDs')40->setAliases(array('repository', 'repositories', 'repositoryPHID'))41->setDatasource(new DiffusionRepositoryFunctionDatasource()),4243// NOTE: Repository operations aren't necessarily created by a real44// user, but for now they normally are. Just use a user typeahead until45// more use cases arise.46id(new PhabricatorUsersSearchField())47->setLabel(pht('Authors'))48->setKey('authorPHIDs')49->setAliases(array('author', 'authors', 'authorPHID')),50id(new PhabricatorSearchCheckboxesField())51->setLabel(pht('States'))52->setKey('states')53->setAliases(array('state'))54->setOptions(DrydockRepositoryOperation::getOperationStateNameMap()),55);56}5758protected function getURI($path) {59return '/drydock/operation/'.$path;60}6162protected function getBuiltinQueryNames() {63return array(64'all' => pht('All Operations'),65);66}6768public function buildSavedQueryFromBuiltin($query_key) {69$query = $this->newSavedQuery();70$query->setQueryKey($query_key);7172switch ($query_key) {73case 'all':74return $query;75}7677return parent::buildSavedQueryFromBuiltin($query_key);78}7980protected function renderResultList(81array $operations,82PhabricatorSavedQuery $query,83array $handles) {84assert_instances_of($operations, 'DrydockRepositoryOperation');8586$viewer = $this->requireViewer();8788$view = new PHUIObjectItemListView();89foreach ($operations as $operation) {90$id = $operation->getID();9192$item = id(new PHUIObjectItemView())93->setHeader($operation->getOperationDescription($viewer))94->setHref($this->getApplicationURI("operation/{$id}/"))95->setObjectName(pht('Repository Operation %d', $id));9697$state = $operation->getOperationState();9899$icon = DrydockRepositoryOperation::getOperationStateIcon($state);100$name = DrydockRepositoryOperation::getOperationStateName($state);101102$item->setStatusIcon($icon, $name);103104105$created = phabricator_datetime($operation->getDateCreated(), $viewer);106$item->addIcon(null, $created);107108$item->addByline(109array(110pht('Via:'),111' ',112$viewer->renderHandle($operation->getAuthorPHID()),113));114115$object_phid = $operation->getObjectPHID();116$repository_phid = $operation->getRepositoryPHID();117118$item->addAttribute($viewer->renderHandle($object_phid));119120if ($repository_phid !== $object_phid) {121$item->addAttribute($viewer->renderHandle($repository_phid));122}123124$view->addItem($item);125}126127$result = id(new PhabricatorApplicationSearchResultView())128->setObjectList($view)129->setNoDataString(pht('No matching operations.'));130131return $result;132}133134}135136137