@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 PhabricatorPackagesPackageSearchEngine
4 extends PhabricatorApplicationSearchEngine {
5
6 public function getResultTypeDescription() {
7 return pht('Packages');
8 }
9
10 public function getApplicationClassName() {
11 return PhabricatorPackagesApplication::class;
12 }
13
14 public function newQuery() {
15 return id(new PhabricatorPackagesPackageQuery());
16 }
17
18 public function canUseInPanelContext() {
19 return false;
20 }
21
22 protected function buildQueryFromParameters(array $map) {
23 $query = $this->newQuery();
24
25 if ($map['match'] !== null) {
26 $query->withNameNgrams($map['match']);
27 }
28
29 if ($map['publisherPHIDs']) {
30 $query->withPublisherPHIDs($map['publisherPHIDs']);
31 }
32
33 return $query;
34 }
35
36 protected function buildCustomSearchFields() {
37 return array(
38 id(new PhabricatorSearchTextField())
39 ->setLabel(pht('Name Contains'))
40 ->setKey('match')
41 ->setDescription(pht('Search for packages by name substring.')),
42 id(new PhabricatorSearchDatasourceField())
43 ->setLabel(pht('Publishers'))
44 ->setKey('publisherPHIDs')
45 ->setAliases(array('publisherPHID', 'publisher', 'publishers'))
46 ->setDatasource(new PhabricatorPackagesPublisherDatasource())
47 ->setDescription(pht('Search for packages by publisher.')),
48 );
49 }
50
51 protected function getURI($path) {
52 return '/packages/package/'.$path;
53 }
54
55 protected function getBuiltinQueryNames() {
56 $names = array(
57 'all' => pht('All Packages'),
58 );
59
60 return $names;
61 }
62
63 public function buildSavedQueryFromBuiltin($query_key) {
64 $query = $this->newSavedQuery();
65 $query->setQueryKey($query_key);
66
67 switch ($query_key) {
68 case 'all':
69 return $query;
70 }
71
72 return parent::buildSavedQueryFromBuiltin($query_key);
73 }
74
75 /**
76 * @param array<PhabricatorPackagesPackage> $packages
77 * @param PhabricatorSavedQuery $query
78 * @param array<PhabricatorObjectHandle> $handles
79 */
80 protected function renderResultList(
81 array $packages,
82 PhabricatorSavedQuery $query,
83 array $handles) {
84
85 assert_instances_of($packages, PhabricatorPackagesPackage::class);
86 $viewer = $this->requireViewer();
87
88 $list = id(new PhabricatorPackagesPackageListView())
89 ->setViewer($viewer)
90 ->setPackages($packages)
91 ->newListView();
92
93 return id(new PhabricatorApplicationSearchResultView())
94 ->setObjectList($list)
95 ->setNoDataString(pht('No packages found.'));
96 }
97
98}