Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / subscriptions / engineextension / PhabricatorSubscriptionsSearchEngineAttachment.php
blob61c9c22ac01b53d42595bced531b38eee706bfe6
1 <?php
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();
26 if ($viewer) {
27 $edges = id(new PhabricatorEdgeQuery())
28 ->withSourcePHIDs($object_phids)
29 ->withEdgeTypes(array($edge_type))
30 ->withDestinationPHIDs(array($viewer_phid))
31 ->execute();
33 $viewer_map = array();
34 foreach ($edges as $object_phid => $types) {
35 if ($types[$edge_type]) {
36 $viewer_map[$object_phid] = true;
39 } else {
40 $viewer_map = array();
43 return 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(
55 array($object_phid),
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();
67 if (!$viewer_phid) {
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;
73 } else {
74 $self_subscribed = false;
77 return array(
78 'subscriberPHIDs' => $subscribed_phids,
79 'subscriberCount' => $subscribed_count,
80 'viewerIsSubscribed' => $self_subscribed,