@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
3abstract class PhabricatorSearchEngineExtension extends Phobject {
4
5 private $viewer;
6 private $searchEngine;
7
8 /**
9 * @return string The EXTENSIONKEY of the PhabricatorSearchEngineExtension
10 * subclass
11 */
12 final public function getExtensionKey() {
13 return $this->getPhobjectClassConstant('EXTENSIONKEY');
14 }
15
16 final public function setViewer($viewer) {
17 $this->viewer = $viewer;
18 return $this;
19 }
20
21 /**
22 * @return PhabricatorUser
23 */
24 final public function getViewer() {
25 return $this->viewer;
26 }
27
28 final public function setSearchEngine(
29 PhabricatorApplicationSearchEngine $engine) {
30 $this->searchEngine = $engine;
31 return $this;
32 }
33
34 /**
35 * @return PhabricatorApplicationSearchEngine A subclass of
36 * PhabricatorApplicationSearchEngine
37 */
38 final public function getSearchEngine() {
39 return $this->searchEngine;
40 }
41
42 /**
43 * @return bool
44 */
45 abstract public function isExtensionEnabled();
46 /**
47 * @return string Description of the Search Engine Extension
48 */
49 abstract public function getExtensionName();
50 /**
51 * @return bool
52 */
53 abstract public function supportsObject($object);
54
55 public function getExtensionOrder() {
56 return 7000;
57 }
58
59 /**
60 * @return array<PhabricatorSearchField> Subclasses of
61 * PhabricatorSearchField, or an empty array
62 */
63 public function getSearchFields($object) {
64 return array();
65 }
66
67 /**
68 * @return array<PhabricatorSearchEngineAttachment> Subclasses of
69 * PhabricatorSearchEngineAttachment, or an empty array
70 */
71 public function getSearchAttachments($object) {
72 return array();
73 }
74
75 /**
76 * Add additional parameters to the $query based on elements in the $map
77 * @param $object A subclass of PhabricatorLiskDAO - a storage object, e.g.
78 * ManiphestTask or PhabricatorDashboardPortal
79 * @param $query A corresponding subclass of
80 * PhabricatorCursorPagedPolicyAwareQuery, e.g. ManiphestTaskQuery or
81 * PhabricatorDashboardPortalQuery
82 * @param PhabricatorSavedQuery $saved
83 * @param array $map
84 * @return void
85 */
86 public function applyConstraintsToQuery(
87 $object,
88 $query,
89 PhabricatorSavedQuery $saved,
90 array $map) {
91 return;
92 }
93
94 public function getFieldSpecificationsForConduit($object) {
95 return array();
96 }
97
98 public function loadExtensionConduitData(array $objects) {
99 return null;
100 }
101
102 public function getFieldValuesForConduit($object, $data) {
103 return array();
104 }
105
106 /**
107 * @return map<string, PhabricatorSearchEngineExtension> Array of
108 * PhabricatorSearchEngineExtension extension keys and the
109 * PhabricatorSearchEngineExtension subclasses
110 */
111 final public static function getAllExtensions() {
112 return id(new PhutilClassMapQuery())
113 ->setAncestorClass(self::class)
114 ->setUniqueMethod('getExtensionKey')
115 ->setSortMethod('getExtensionOrder')
116 ->execute();
117 }
118
119 final public static function getAllEnabledExtensions() {
120 $extensions = self::getAllExtensions();
121
122 foreach ($extensions as $key => $extension) {
123 if (!$extension->isExtensionEnabled()) {
124 unset($extensions[$key]);
125 }
126 }
127
128 return $extensions;
129 }
130
131}