@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 117 lines 2.9 kB view raw
1<?php 2 3final class DrydockResourceSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 private $blueprint; 7 8 public function setBlueprint(DrydockBlueprint $blueprint) { 9 $this->blueprint = $blueprint; 10 return $this; 11 } 12 13 public function getBlueprint() { 14 return $this->blueprint; 15 } 16 17 public function getResultTypeDescription() { 18 return pht('Drydock Resources'); 19 } 20 21 public function getApplicationClassName() { 22 return PhabricatorDrydockApplication::class; 23 } 24 25 public function newQuery() { 26 $query = new DrydockResourceQuery(); 27 28 $blueprint = $this->getBlueprint(); 29 if ($blueprint) { 30 $query->withBlueprintPHIDs(array($blueprint->getPHID())); 31 } 32 33 return $query; 34 } 35 36 protected function buildQueryFromParameters(array $map) { 37 $query = $this->newQuery(); 38 39 if ($map['statuses']) { 40 $query->withStatuses($map['statuses']); 41 } 42 43 if ($map['blueprintPHIDs']) { 44 $query->withBlueprintPHIDs($map['blueprintPHIDs']); 45 } 46 47 return $query; 48 } 49 50 protected function buildCustomSearchFields() { 51 return array( 52 id(new PhabricatorSearchCheckboxesField()) 53 ->setLabel(pht('Statuses')) 54 ->setKey('statuses') 55 ->setDescription(pht('Search for objects with given statuses.')) 56 ->setOptions(DrydockResourceStatus::getStatusMap()), 57 id(new PhabricatorPHIDsSearchField()) 58 ->setLabel(pht('Blueprints')) 59 ->setKey('blueprintPHIDs') 60 ->setAliases(array('blueprintPHID', 'blueprints', 'blueprint')) 61 ->setDescription( 62 pht('Search for resources generated by particular blueprints.')), 63 ); 64 } 65 66 protected function getURI($path) { 67 $blueprint = $this->getBlueprint(); 68 if ($blueprint) { 69 $id = $blueprint->getID(); 70 return "/drydock/blueprint/{$id}/resources/".$path; 71 } else { 72 return '/drydock/resource/'.$path; 73 } 74 } 75 76 protected function getBuiltinQueryNames() { 77 return array( 78 'active' => pht('Active Resources'), 79 'all' => pht('All Resources'), 80 ); 81 } 82 83 public function buildSavedQueryFromBuiltin($query_key) { 84 $query = $this->newSavedQuery(); 85 $query->setQueryKey($query_key); 86 87 switch ($query_key) { 88 case 'active': 89 return $query->setParameter( 90 'statuses', 91 array( 92 DrydockResourceStatus::STATUS_PENDING, 93 DrydockResourceStatus::STATUS_ACTIVE, 94 )); 95 case 'all': 96 return $query; 97 } 98 99 return parent::buildSavedQueryFromBuiltin($query_key); 100 } 101 102 protected function renderResultList( 103 array $resources, 104 PhabricatorSavedQuery $query, 105 array $handles) { 106 107 $list = id(new DrydockResourceListView()) 108 ->setUser($this->requireViewer()) 109 ->setResources($resources); 110 111 $result = new PhabricatorApplicationSearchResultView(); 112 $result->setTable($list); 113 114 return $result; 115 } 116 117}