Path: blob/master/src/applications/almanac/query/AlmanacDeviceSearchEngine.php
12256 views
<?php12final class AlmanacDeviceSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Almanac Devices');7}89public function getApplicationClassName() {10return 'PhabricatorAlmanacApplication';11}1213public function newQuery() {14return new AlmanacDeviceQuery();15}1617protected function buildCustomSearchFields() {18$status_options = AlmanacDeviceStatus::getStatusMap();19$status_options = mpull($status_options, 'getName');2021return array(22id(new PhabricatorSearchTextField())23->setLabel(pht('Name Contains'))24->setKey('match')25->setDescription(pht('Search for devices by name substring.')),26id(new PhabricatorSearchStringListField())27->setLabel(pht('Exact Names'))28->setKey('names')29->setDescription(pht('Search for devices with specific names.')),30id(new PhabricatorSearchCheckboxesField())31->setLabel(pht('Statuses'))32->setKey('statuses')33->setDescription(pht('Search for devices with given statuses.'))34->setOptions($status_options),35id(new PhabricatorSearchThreeStateField())36->setLabel(pht('Cluster Device'))37->setKey('isClusterDevice')38->setOptions(39pht('Both Cluster and Non-cluster Devices'),40pht('Cluster Devices Only'),41pht('Non-cluster Devices Only')),42);43}4445protected function buildQueryFromParameters(array $map) {46$query = $this->newQuery();4748if ($map['match'] !== null) {49$query->withNameNgrams($map['match']);50}5152if ($map['names']) {53$query->withNames($map['names']);54}5556if ($map['isClusterDevice'] !== null) {57$query->withIsClusterDevice($map['isClusterDevice']);58}5960if ($map['statuses']) {61$query->withStatuses($map['statuses']);62}6364return $query;65}6667protected function getURI($path) {68return '/almanac/device/'.$path;69}7071protected function getBuiltinQueryNames() {72$names = array(73'active' => pht('Active Devices'),74'all' => pht('All Devices'),75);7677return $names;78}7980public function buildSavedQueryFromBuiltin($query_key) {81$query = $this->newSavedQuery();82$query->setQueryKey($query_key);8384switch ($query_key) {85case 'active':86$active_statuses = AlmanacDeviceStatus::getActiveStatusList();87return $query->setParameter('statuses', $active_statuses);88case 'all':89return $query;90}9192return parent::buildSavedQueryFromBuiltin($query_key);93}9495protected function renderResultList(96array $devices,97PhabricatorSavedQuery $query,98array $handles) {99assert_instances_of($devices, 'AlmanacDevice');100101$viewer = $this->requireViewer();102103$list = new PHUIObjectItemListView();104$list->setUser($viewer);105foreach ($devices as $device) {106$item = id(new PHUIObjectItemView())107->setObjectName(pht('Device %d', $device->getID()))108->setHeader($device->getName())109->setHref($device->getURI())110->setObject($device);111112if ($device->isClusterDevice()) {113$item->addIcon('fa-sitemap', pht('Cluster Device'));114}115116if ($device->isDisabled()) {117$item->setDisabled(true);118}119120$status = $device->getStatusObject();121$icon_icon = $status->getIconIcon();122$icon_color = $status->getIconColor();123$icon_label = $status->getName();124125$item->setStatusIcon(126"{$icon_icon} {$icon_color}",127$icon_label);128129$list->addItem($item);130}131132$result = new PhabricatorApplicationSearchResultView();133$result->setObjectList($list);134$result->setNoDataString(pht('No Almanac Devices found.'));135136return $result;137}138139}140141142