Path: blob/master/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php
12242 views
<?php12final class PhabricatorDashboardPanelSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Dashboard Panels');7}89public function getApplicationClassName() {10return 'PhabricatorDashboardApplication';11}1213public function newQuery() {14return new PhabricatorDashboardPanelQuery();15}1617public function canUseInPanelContext() {18return false;19}2021protected function buildQueryFromParameters(array $map) {22$query = $this->newQuery();23if ($map['status']) {24switch ($map['status']) {25case 'active':26$query->withArchived(false);27break;28case 'archived':29$query->withArchived(true);30break;31default:32break;33}34}3536if ($map['paneltype']) {37$query->withPanelTypes(array($map['paneltype']));38}3940if ($map['authorPHIDs']) {41$query->withAuthorPHIDs($map['authorPHIDs']);42}4344return $query;45}4647protected function buildCustomSearchFields() {4849return array(50id(new PhabricatorSearchDatasourceField())51->setLabel(pht('Authored By'))52->setKey('authorPHIDs')53->setDatasource(new PhabricatorPeopleUserFunctionDatasource()),54id(new PhabricatorSearchSelectField())55->setKey('status')56->setLabel(pht('Status'))57->setOptions(58id(new PhabricatorDashboardPanel())59->getStatuses()),60id(new PhabricatorSearchSelectField())61->setKey('paneltype')62->setLabel(pht('Panel Type'))63->setOptions(64id(new PhabricatorDashboardPanel())65->getPanelTypes()),66);67}6869protected function getURI($path) {70return '/dashboard/panel/'.$path;71}7273protected function getBuiltinQueryNames() {74$names = array();7576if ($this->requireViewer()->isLoggedIn()) {77$names['authored'] = pht('Authored');78}7980$names['active'] = pht('Active Panels');81$names['all'] = pht('All Panels');8283return $names;84}8586public function buildSavedQueryFromBuiltin($query_key) {87$query = $this->newSavedQuery();88$query->setQueryKey($query_key);89$viewer = $this->requireViewer();9091switch ($query_key) {92case 'active':93return $query->setParameter('status', 'active');94case 'authored':95return $query->setParameter(96'authorPHIDs',97array(98$viewer->getPHID(),99));100case 'all':101return $query;102}103104return parent::buildSavedQueryFromBuiltin($query_key);105}106107protected function renderResultList(108array $panels,109PhabricatorSavedQuery $query,110array $handles) {111112$viewer = $this->requireViewer();113114$list = new PHUIObjectItemListView();115$list->setUser($viewer);116foreach ($panels as $panel) {117$item = id(new PHUIObjectItemView())118->setObjectName($panel->getMonogram())119->setHeader($panel->getName())120->setHref('/'.$panel->getMonogram())121->setObject($panel);122123$impl = $panel->getImplementation();124if ($impl) {125$type_text = $impl->getPanelTypeName();126} else {127$type_text = nonempty($panel->getPanelType(), pht('Unknown Type'));128}129$item->addAttribute($type_text);130131$properties = $panel->getProperties();132$class = idx($properties, 'class');133$item->addAttribute($class);134135if ($panel->getIsArchived()) {136$item->setDisabled(true);137}138139$list->addItem($item);140}141142$result = new PhabricatorApplicationSearchResultView();143$result->setObjectList($list);144$result->setNoDataString(pht('No panels found.'));145146return $result;147}148149}150151152