Path: blob/master/src/applications/drydock/query/DrydockBlueprintSearchEngine.php
12256 views
<?php12final class DrydockBlueprintSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Drydock Blueprints');7}89public function getApplicationClassName() {10return 'PhabricatorDrydockApplication';11}1213public function newQuery() {14return id(new DrydockBlueprintQuery());15}1617protected function buildQueryFromParameters(array $map) {18$query = $this->newQuery();1920if ($map['match'] !== null) {21$query->withNameNgrams($map['match']);22}2324if ($map['isDisabled'] !== null) {25$query->withDisabled($map['isDisabled']);26}2728return $query;29}3031protected function buildCustomSearchFields() {32return array(33id(new PhabricatorSearchTextField())34->setLabel(pht('Name Contains'))35->setKey('match')36->setDescription(pht('Search for blueprints by name substring.')),37id(new PhabricatorSearchThreeStateField())38->setLabel(pht('Disabled'))39->setKey('isDisabled')40->setOptions(41pht('(Show All)'),42pht('Show Only Disabled Blueprints'),43pht('Hide Disabled Blueprints')),44);45}4647protected function getURI($path) {48return '/drydock/blueprint/'.$path;49}5051protected function getBuiltinQueryNames() {52return array(53'active' => pht('Active Blueprints'),54'all' => pht('All Blueprints'),55);56}5758public function buildSavedQueryFromBuiltin($query_key) {59$query = $this->newSavedQuery();60$query->setQueryKey($query_key);6162switch ($query_key) {63case 'active':64return $query->setParameter('isDisabled', false);65case 'all':66return $query;67}6869return parent::buildSavedQueryFromBuiltin($query_key);70}7172protected function renderResultList(73array $blueprints,74PhabricatorSavedQuery $query,75array $handles) {76assert_instances_of($blueprints, 'DrydockBlueprint');7778$viewer = $this->requireViewer();7980if ($blueprints) {81$edge_query = id(new PhabricatorEdgeQuery())82->withSourcePHIDs(mpull($blueprints, 'getPHID'))83->withEdgeTypes(84array(85PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,86));8788$edge_query->execute();89}9091$view = new PHUIObjectItemListView();9293foreach ($blueprints as $blueprint) {94$impl = $blueprint->getImplementation();9596$item = id(new PHUIObjectItemView())97->setHeader($blueprint->getBlueprintName())98->setHref($blueprint->getURI())99->setObjectName(pht('Blueprint %d', $blueprint->getID()));100101if (!$impl->isEnabled()) {102$item->setDisabled(true);103$item->addIcon('fa-chain-broken grey', pht('Implementation'));104}105106if ($blueprint->getIsDisabled()) {107$item->setDisabled(true);108$item->addIcon('fa-ban grey', pht('Disabled'));109}110111$impl_icon = $impl->getBlueprintIcon();112$impl_name = $impl->getBlueprintName();113114$impl_icon = id(new PHUIIconView())115->setIcon($impl_icon, 'lightgreytext');116117$item->addAttribute(array($impl_icon, ' ', $impl_name));118119$phid = $blueprint->getPHID();120$project_phids = $edge_query->getDestinationPHIDs(array($phid));121if ($project_phids) {122$project_handles = $viewer->loadHandles($project_phids);123$item->addAttribute(124id(new PHUIHandleTagListView())125->setLimit(4)126->setSlim(true)127->setHandles($project_handles));128}129130$view->addItem($item);131}132133$result = new PhabricatorApplicationSearchResultView();134$result->setObjectList($view);135$result->setNoDataString(pht('No blueprints found.'));136137return $result;138}139140}141142143