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