@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 PhabricatorOAuthServerClientSearchEngine
4 extends PhabricatorApplicationSearchEngine {
5
6 public function getResultTypeDescription() {
7 return pht('OAuth Clients');
8 }
9
10 public function getApplicationClassName() {
11 return PhabricatorOAuthServerApplication::class;
12 }
13
14 public function canUseInPanelContext() {
15 return false;
16 }
17
18 public function newQuery() {
19 return id(new PhabricatorOAuthServerClientQuery());
20 }
21
22 protected function buildQueryFromParameters(array $map) {
23 $query = $this->newQuery();
24
25 if ($map['creatorPHIDs']) {
26 $query->withCreatorPHIDs($map['creatorPHIDs']);
27 }
28
29 return $query;
30 }
31
32 protected function buildCustomSearchFields() {
33 return array(
34 id(new PhabricatorUsersSearchField())
35 ->setAliases(array('creators'))
36 ->setKey('creatorPHIDs')
37 ->setConduitKey('creators')
38 ->setLabel(pht('Creators'))
39 ->setDescription(
40 pht('Search for applications created by particular users.')),
41 );
42 }
43
44 protected function getURI($path) {
45 return '/oauthserver/'.$path;
46 }
47
48 protected function getBuiltinQueryNames() {
49 $names = array();
50
51 if ($this->requireViewer()->isLoggedIn()) {
52 $names['created'] = pht('Created');
53 }
54
55 $names['all'] = pht('All Applications');
56
57 return $names;
58 }
59
60 public function buildSavedQueryFromBuiltin($query_key) {
61 $query = $this->newSavedQuery();
62 $query->setQueryKey($query_key);
63
64 switch ($query_key) {
65 case 'all':
66 return $query;
67 case 'created':
68 return $query->setParameter(
69 'creatorPHIDs',
70 array($this->requireViewer()->getPHID()));
71 }
72
73 return parent::buildSavedQueryFromBuiltin($query_key);
74 }
75
76 /**
77 * @param array<PhabricatorOAuthServerClient> $clients
78 * @param PhabricatorSavedQuery $query
79 * @param array<PhabricatorObjectHandle> $handles
80 */
81 protected function renderResultList(
82 array $clients,
83 PhabricatorSavedQuery $query,
84 array $handles) {
85 assert_instances_of($clients, PhabricatorOAuthServerClient::class);
86
87 $viewer = $this->requireViewer();
88
89 $list = id(new PHUIObjectItemListView())
90 ->setUser($viewer);
91 foreach ($clients as $client) {
92 $item = id(new PHUIObjectItemView())
93 ->setObjectName(pht('Application %d', $client->getID()))
94 ->setHeader($client->getName())
95 ->setHref($client->getViewURI())
96 ->setObject($client);
97
98 if ($client->getIsDisabled()) {
99 $item->setDisabled(true);
100 }
101
102 $list->addItem($item);
103 }
104
105 $result = new PhabricatorApplicationSearchResultView();
106 $result->setObjectList($list);
107 $result->setNoDataString(pht('No clients found.'));
108
109 return $result;
110 }
111
112}