@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
at upstream/main 63 lines 1.7 kB view raw
1<?php 2 3final class PhabricatorSubscriptionsExportEngineExtension 4 extends PhabricatorExportEngineExtension { 5 6 const EXTENSIONKEY = 'subscriptions'; 7 8 public function supportsObject($object) { 9 return ($object instanceof PhabricatorSubscribableInterface); 10 } 11 12 public function newExportFields() { 13 return array( 14 id(new PhabricatorPHIDListExportField()) 15 ->setKey('subscriberPHIDs') 16 ->setLabel(pht('Subscriber PHIDs')), 17 id(new PhabricatorStringListExportField()) 18 ->setKey('subscribers') 19 ->setLabel(pht('Subscribers')), 20 ); 21 } 22 23 public function newExportData(array $objects) { 24 $viewer = $this->getViewer(); 25 26 $object_phids = mpull($objects, 'getPHID'); 27 if (!$object_phids) { 28 return array(); 29 } 30 31 $projects_query = id(new PhabricatorEdgeQuery()) 32 ->withSourcePHIDs($object_phids) 33 ->withEdgeTypes( 34 array( 35 PhabricatorObjectHasSubscriberEdgeType::EDGECONST, 36 )); 37 $projects_query->execute(); 38 39 $handles = $viewer->loadHandles($projects_query->getDestinationPHIDs()); 40 41 $map = array(); 42 foreach ($objects as $object) { 43 $object_phid = $object->getPHID(); 44 45 $project_phids = $projects_query->getDestinationPHIDs( 46 array($object_phid), 47 array(PhabricatorObjectHasSubscriberEdgeType::EDGECONST)); 48 49 $handle_list = $handles->newSublist($project_phids); 50 $handle_list = iterator_to_array($handle_list); 51 $handle_names = mpull($handle_list, 'getName'); 52 $handle_names = array_values($handle_names); 53 54 $map[] = array( 55 'subscriberPHIDs' => $project_phids, 56 'subscribers' => $handle_names, 57 ); 58 } 59 60 return $map; 61 } 62 63}