@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
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}