3 final class PhabricatorProjectMembersPolicyRule
extends PhabricatorPolicyRule
{
5 private $memberships = array();
7 public function getRuleDescription() {
8 return pht('members of project');
11 public function willApplyRules(
12 PhabricatorUser
$viewer,
16 $viewer_phid = $viewer->getPHID();
21 if (empty($this->memberships
[$viewer_phid])) {
22 $this->memberships
[$viewer_phid] = array();
25 foreach ($objects as $key => $object) {
26 $cache = $this->getTransactionHint($object);
27 if ($cache === null) {
31 unset($objects[$key]);
33 if (isset($cache[$viewer_phid])) {
34 $this->memberships
[$viewer_phid][$object->getPHID()] = true;
42 $object_phids = mpull($objects, 'getPHID');
43 $edge_query = id(new PhabricatorEdgeQuery())
44 ->withSourcePHIDs(array($viewer_phid))
45 ->withDestinationPHIDs($object_phids)
48 PhabricatorProjectMemberOfProjectEdgeType
::EDGECONST
,
50 $edge_query->execute();
52 $memberships = $edge_query->getDestinationPHIDs();
57 $this->memberships
[$viewer_phid] +
= array_fill_keys($memberships, true);
60 public function applyRule(
61 PhabricatorUser
$viewer,
63 PhabricatorPolicyInterface
$object) {
64 $viewer_phid = $viewer->getPHID();
69 $memberships = idx($this->memberships
, $viewer_phid);
70 return isset($memberships[$object->getPHID()]);
73 public function getValueControlType() {
74 return self
::CONTROL_TYPE_NONE
;
77 public function canApplyToObject(PhabricatorPolicyInterface
$object) {
78 return ($object instanceof PhabricatorProject
);
81 public function getObjectPolicyKey() {
82 return 'project.members';
85 public function getObjectPolicyName() {
86 return pht('Project Members');
89 public function getObjectPolicyIcon() {
93 public function getPolicyExplanation() {
94 return pht('Project members can take this action.');