@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 95 lines 2.3 kB view raw
1<?php 2 3final class AlmanacNamespaceSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Almanac Namespaces'); 8 } 9 10 public function getApplicationClassName() { 11 return PhabricatorAlmanacApplication::class; 12 } 13 14 public function newQuery() { 15 return new AlmanacNamespaceQuery(); 16 } 17 18 protected function buildCustomSearchFields() { 19 return array( 20 id(new PhabricatorSearchTextField()) 21 ->setLabel(pht('Name Contains')) 22 ->setKey('match') 23 ->setDescription(pht('Search for namespaces by name substring.')), 24 ); 25 } 26 27 protected function buildQueryFromParameters(array $map) { 28 $query = $this->newQuery(); 29 30 if ($map['match'] !== null) { 31 $query->withNameNgrams($map['match']); 32 } 33 34 return $query; 35 } 36 37 protected function getURI($path) { 38 return '/almanac/namespace/'.$path; 39 } 40 41 protected function getBuiltinQueryNames() { 42 $names = array( 43 'all' => pht('All Namespaces'), 44 ); 45 46 return $names; 47 } 48 49 public function buildSavedQueryFromBuiltin($query_key) { 50 51 $query = $this->newSavedQuery(); 52 $query->setQueryKey($query_key); 53 54 switch ($query_key) { 55 case 'all': 56 return $query; 57 } 58 59 return parent::buildSavedQueryFromBuiltin($query_key); 60 } 61 62 /** 63 * @param array<AlmanacNamespace> $namespaces 64 * @param PhabricatorSavedQuery $query 65 * @param array<PhabricatorObjectHandle> $handles 66 */ 67 protected function renderResultList( 68 array $namespaces, 69 PhabricatorSavedQuery $query, 70 array $handles) { 71 assert_instances_of($namespaces, AlmanacNamespace::class); 72 73 $viewer = $this->requireViewer(); 74 75 $list = new PHUIObjectItemListView(); 76 $list->setUser($viewer); 77 foreach ($namespaces as $namespace) { 78 $id = $namespace->getID(); 79 80 $item = id(new PHUIObjectItemView()) 81 ->setObjectName(pht('Namespace %d', $id)) 82 ->setHeader($namespace->getName()) 83 ->setHref($this->getApplicationURI("namespace/{$id}/")) 84 ->setObject($namespace); 85 86 $list->addItem($item); 87 } 88 89 $result = new PhabricatorApplicationSearchResultView(); 90 $result->setObjectList($list); 91 $result->setNoDataString(pht('No Almanac namespaces found.')); 92 93 return $result; 94 } 95}