/** * This is enforced in @{class:PhabricatorProjectTransactionEditor}. We use * this logic to render a better form for users hitting this case. */ private function userCannotLeave(PhabricatorProject $project) { $viewer = $this->getViewer(); return $project->getIsMembershipLocked() && !PhabricatorPolicyFilter::hasCapability($viewer, $project, PhabricatorPolicyCapability::CAN_EDIT); }
private function buildActions(PhabricatorProject $project) { $viewer = $this->getViewer(); $id = $project->getID(); $view = id(new PhabricatorActionListView())->setUser($viewer); $is_locked = $project->getIsMembershipLocked(); $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $project, PhabricatorPolicyCapability::CAN_EDIT); $supports_edit = $project->supportsEditMembers(); $can_join = $supports_edit && PhabricatorPolicyFilter::hasCapability($viewer, $project, PhabricatorPolicyCapability::CAN_JOIN); $can_leave = $supports_edit && (!$is_locked || $can_edit); $viewer_phid = $viewer->getPHID(); if (!$project->isUserMember($viewer_phid)) { $view->addAction(id(new PhabricatorActionView())->setHref('/project/update/' . $project->getID() . '/join/')->setIcon('fa-plus')->setDisabled(!$can_join)->setWorkflow(true)->setName(pht('Join Project'))); } else { $view->addAction(id(new PhabricatorActionView())->setHref('/project/update/' . $project->getID() . '/leave/')->setIcon('fa-times')->setDisabled(!$can_leave)->setWorkflow(true)->setName(pht('Leave Project'))); } if (!$project->isUserWatcher($viewer->getPHID())) { $view->addAction(id(new PhabricatorActionView())->setWorkflow(true)->setHref('/project/watch/' . $project->getID() . '/')->setIcon('fa-eye')->setName(pht('Watch Project'))); } else { $view->addAction(id(new PhabricatorActionView())->setWorkflow(true)->setHref('/project/unwatch/' . $project->getID() . '/')->setIcon('fa-eye-slash')->setName(pht('Unwatch Project'))); } $can_silence = $project->isUserMember($viewer_phid); $is_silenced = $this->isProjectSilenced($project); if ($is_silenced) { $silence_text = pht('Enable Mail'); } else { $silence_text = pht('Disable Mail'); } $view->addAction(id(new PhabricatorActionView())->setName($silence_text)->setIcon('fa-envelope-o')->setHref("/project/silence/{$id}/")->setWorkflow(true)->setDisabled(!$can_silence)); $can_add = $can_edit && $supports_edit; $view->addAction(id(new PhabricatorActionView())->setName(pht('Add Members'))->setIcon('fa-user-plus')->setHref("/project/members/{$id}/add/")->setWorkflow(true)->setDisabled(!$can_add)); $can_lock = $can_edit && $supports_edit && $this->hasApplicationCapability(ProjectCanLockProjectsCapability::CAPABILITY); if ($is_locked) { $lock_name = pht('Unlock Project'); $lock_icon = 'fa-unlock'; } else { $lock_name = pht('Lock Project'); $lock_icon = 'fa-lock'; } $view->addAction(id(new PhabricatorActionView())->setName($lock_name)->setIcon($lock_icon)->setHref($this->getApplicationURI("lock/{$id}/"))->setDisabled(!$can_lock)->setWorkflow(true)); return $view; }