@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 PhabricatorSubscriptionsSearchEngineExtension
4 extends PhabricatorSearchEngineExtension {
5
6 const EXTENSIONKEY = 'subscriptions';
7
8 public function isExtensionEnabled() {
9 return PhabricatorApplication::isClassInstalled(
10 PhabricatorSubscriptionsApplication::class);
11 }
12
13 public function getExtensionName() {
14 return pht('Support for Subscriptions');
15 }
16
17 public function getExtensionOrder() {
18 return 2000;
19 }
20
21 public function supportsObject($object) {
22 return ($object instanceof PhabricatorSubscribableInterface);
23 }
24
25 public function applyConstraintsToQuery(
26 $object,
27 $query,
28 PhabricatorSavedQuery $saved,
29 array $map) {
30
31 if (!empty($map['subscriberPHIDs'])) {
32 $query->withEdgeLogicPHIDs(
33 PhabricatorObjectHasSubscriberEdgeType::EDGECONST,
34 PhabricatorQueryConstraint::OPERATOR_OR,
35 $map['subscriberPHIDs']);
36 }
37 }
38
39 public function getSearchFields($object) {
40 $fields = array();
41
42 $fields[] = id(new PhabricatorSearchSubscribersField())
43 ->setLabel(pht('Subscribers'))
44 ->setKey('subscriberPHIDs')
45 ->setConduitKey('subscribers')
46 ->setAliases(array('subscriber', 'subscribers'))
47 ->setDescription(
48 pht('Search for objects with certain subscribers.'));
49
50 return $fields;
51 }
52
53 public function getSearchAttachments($object) {
54 return array(
55 id(new PhabricatorSubscriptionsSearchEngineAttachment())
56 ->setAttachmentKey('subscribers'),
57 );
58 }
59
60}