@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 PhabricatorSubscribersQuery extends PhabricatorQuery {
4
5 private $objectPHIDs;
6 private $subscriberPHIDs;
7
8 public static function loadSubscribersForPHID($phid) {
9 if (!$phid) {
10 return array();
11 }
12
13 $subscribers = id(new PhabricatorSubscribersQuery())
14 ->withObjectPHIDs(array($phid))
15 ->execute();
16 return $subscribers[$phid];
17 }
18
19 public function withObjectPHIDs(array $object_phids) {
20 $this->objectPHIDs = $object_phids;
21 return $this;
22 }
23
24 public function withSubscriberPHIDs(array $subscriber_phids) {
25 $this->subscriberPHIDs = $subscriber_phids;
26 return $this;
27 }
28
29 public function execute() {
30 $query = new PhabricatorEdgeQuery();
31
32 $edge_type = PhabricatorObjectHasSubscriberEdgeType::EDGECONST;
33
34 $query->withSourcePHIDs($this->objectPHIDs);
35 $query->withEdgeTypes(array($edge_type));
36
37 if ($this->subscriberPHIDs) {
38 $query->withDestinationPHIDs($this->subscriberPHIDs);
39 }
40
41 $edges = $query->execute();
42
43 $results = array_fill_keys($this->objectPHIDs, array());
44 foreach ($edges as $src => $edge_types) {
45 foreach ($edge_types[$edge_type] as $dst => $data) {
46 $results[$src][] = $dst;
47 }
48 }
49
50 return $results;
51 }
52}