3 final class PhabricatorSubscriptionsSearchEngineAttachment
4 extends PhabricatorSearchEngineAttachment
{
6 public function getAttachmentName() {
7 return pht('Subscribers');
10 public function getAttachmentDescription() {
11 return pht('Get information about subscribers.');
14 public function loadAttachmentData(array $objects, $spec) {
15 $object_phids = mpull($objects, 'getPHID');
16 $edge_type = PhabricatorObjectHasSubscriberEdgeType
::EDGECONST
;
19 $subscribers_query = id(new PhabricatorEdgeQuery())
20 ->withSourcePHIDs($object_phids)
21 ->withEdgeTypes(array($edge_type));
22 $subscribers_query->execute();
24 $viewer = $this->getViewer();
25 $viewer_phid = $viewer->getPHID();
27 $edges = id(new PhabricatorEdgeQuery())
28 ->withSourcePHIDs($object_phids)
29 ->withEdgeTypes(array($edge_type))
30 ->withDestinationPHIDs(array($viewer_phid))
33 $viewer_map = array();
34 foreach ($edges as $object_phid => $types) {
35 if ($types[$edge_type]) {
36 $viewer_map[$object_phid] = true;
40 $viewer_map = array();
44 'subscribers.query' => $subscribers_query,
45 'viewer.map' => $viewer_map,
49 public function getAttachmentForObject($object, $data, $spec) {
50 $subscribers_query = idx($data, 'subscribers.query');
51 $viewer_map = idx($data, 'viewer.map');
52 $object_phid = $object->getPHID();
54 $subscribed_phids = $subscribers_query->getDestinationPHIDs(
56 array(PhabricatorObjectHasSubscriberEdgeType
::EDGECONST
));
57 $subscribed_count = count($subscribed_phids);
58 if ($subscribed_count > 10) {
59 $subscribed_phids = array_slice($subscribed_phids, 0, 10);
62 $subscribed_phids = array_values($subscribed_phids);
64 $viewer = $this->getViewer();
65 $viewer_phid = $viewer->getPHID();
68 $self_subscribed = false;
69 } else if (isset($viewer_map[$object_phid])) {
70 $self_subscribed = true;
71 } else if ($object->isAutomaticallySubscribed($viewer_phid)) {
72 $self_subscribed = true;
74 $self_subscribed = false;
78 'subscriberPHIDs' => $subscribed_phids,
79 'subscriberCount' => $subscribed_count,
80 'viewerIsSubscribed' => $self_subscribed,