@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 PhabricatorSubscriptionsEditEngineExtension
4 extends PhabricatorEditEngineExtension {
5
6 const EXTENSIONKEY = 'subscriptions.subscribers';
7 const FIELDKEY = 'subscriberPHIDs';
8
9 const EDITKEY_ADD = 'subscribers.add';
10 const EDITKEY_SET = 'subscribers.set';
11 const EDITKEY_REMOVE = 'subscribers.remove';
12
13 public function getExtensionPriority() {
14 return 750;
15 }
16
17 public function isExtensionEnabled() {
18 return true;
19 }
20
21 public function getExtensionName() {
22 return pht('Subscriptions');
23 }
24
25 public function supportsObject(
26 PhabricatorEditEngine $engine,
27 PhabricatorApplicationTransactionInterface $object) {
28 return ($object instanceof PhabricatorSubscribableInterface);
29 }
30
31 public function buildCustomEditFields(
32 PhabricatorEditEngine $engine,
33 PhabricatorApplicationTransactionInterface $object) {
34
35 $subscribers_type = PhabricatorTransactions::TYPE_SUBSCRIBERS;
36
37 $object_phid = $object->getPHID();
38 if ($object_phid) {
39 $sub_phids = PhabricatorSubscribersQuery::loadSubscribersForPHID(
40 $object_phid);
41 } else {
42 $sub_phids = array();
43 }
44
45 $viewer = $engine->getViewer();
46
47 $subscribers_field = id(new PhabricatorSubscribersEditField())
48 ->setKey(self::FIELDKEY)
49 ->setLabel(pht('Subscribers'))
50 ->setEditTypeKey('subscribers')
51 ->setAliases(array('subscriber', 'subscribers'))
52 ->setIsCopyable(true)
53 ->setUseEdgeTransactions(true)
54 ->setCommentActionLabel(pht('Change Subscribers'))
55 ->setCommentActionOrder(9000)
56 ->setDescription(pht('Choose subscribers.'))
57 ->setTransactionType($subscribers_type)
58 ->setValue($sub_phids)
59 ->setViewer($viewer);
60
61 $subscriber_datasource = id(new PhabricatorMetaMTAMailableDatasource())
62 ->setViewer($viewer);
63
64 $edit_add = $subscribers_field->getConduitEditType(self::EDITKEY_ADD)
65 ->setConduitDescription(pht('Add subscribers.'));
66
67 $edit_set = $subscribers_field->getConduitEditType(self::EDITKEY_SET)
68 ->setConduitDescription(
69 pht('Set subscribers, overwriting current value.'));
70
71 $edit_rem = $subscribers_field->getConduitEditType(self::EDITKEY_REMOVE)
72 ->setConduitDescription(pht('Remove subscribers.'));
73
74 $subscribers_field->getBulkEditType(self::EDITKEY_ADD)
75 ->setBulkEditLabel(pht('Add subscribers'))
76 ->setDatasource($subscriber_datasource);
77
78 $subscribers_field->getBulkEditType(self::EDITKEY_SET)
79 ->setBulkEditLabel(pht('Set subscribers to'))
80 ->setDatasource($subscriber_datasource);
81
82 $subscribers_field->getBulkEditType(self::EDITKEY_REMOVE)
83 ->setBulkEditLabel(pht('Remove subscribers'))
84 ->setDatasource($subscriber_datasource);
85
86 return array(
87 $subscribers_field,
88 );
89 }
90
91}