@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 upstream/main 116 lines 2.9 kB view raw
1<?php 2 3final class AlmanacNetworkSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Almanac Networks'); 8 } 9 10 public function getApplicationClassName() { 11 return PhabricatorAlmanacApplication::class; 12 } 13 14 public function newQuery() { 15 return new AlmanacNetworkQuery(); 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 networks 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/network/'.$path; 39 } 40 41 protected function getBuiltinQueryNames() { 42 $names = array( 43 'all' => pht('All Networks'), 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<AlmanacNetwork> $networks 64 * @param PhabricatorSavedQuery $query 65 * @param array<PhabricatorObjectHandle> $handles 66 */ 67 protected function renderResultList( 68 array $networks, 69 PhabricatorSavedQuery $query, 70 array $handles) { 71 assert_instances_of($networks, AlmanacNetwork::class); 72 73 $viewer = $this->requireViewer(); 74 75 $list = new PHUIObjectItemListView(); 76 $list->setUser($viewer); 77 foreach ($networks as $network) { 78 $id = $network->getID(); 79 80 $item = id(new PHUIObjectItemView()) 81 ->setObjectName(pht('Network %d', $id)) 82 ->setHeader($network->getName()) 83 ->setHref($this->getApplicationURI("network/{$id}/")) 84 ->setObject($network); 85 86 $list->addItem($item); 87 } 88 89 $result = new PhabricatorApplicationSearchResultView(); 90 $result->setObjectList($list); 91 $result->setNoDataString(pht('No Almanac Networks found.')); 92 93 return $result; 94 } 95 96 protected function getNewUserBody() { 97 $create_button = id(new PHUIButtonView()) 98 ->setTag('a') 99 ->setText(pht('Create a Network')) 100 ->setHref('/almanac/network/edit/') 101 ->setIcon('fa-plus') 102 ->setColor(PHUIButtonView::GREEN); 103 104 $app_name = pht('Networks'); 105 $view = id(new PHUIBigInfoView()) 106 ->setIcon('fa-globe') 107 ->setTitle(pht('Welcome to %s', $app_name)) 108 ->setDescription( 109 pht( 110 'Use Almanac networks to catalogue private and public '. 111 'computer networks.')) 112 ->addAction($create_button); 113 114 return $view; 115 } 116}