Differential D15065 Diff 36383 src/applications/project/controller/PhabricatorProjectMembersViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/controller/PhabricatorProjectMembersViewController.php
Show First 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | if ($show_join) { | ||||
$viewer, | $viewer, | ||||
$project); | $project); | ||||
$view->addProperty( | $view->addProperty( | ||||
pht('Joinable By'), | pht('Joinable By'), | ||||
$descriptions[PhabricatorPolicyCapability::CAN_JOIN]); | $descriptions[PhabricatorPolicyCapability::CAN_JOIN]); | ||||
} | } | ||||
$viewer_phid = $viewer->getPHID(); | |||||
if ($project->isUserWatcher($viewer_phid)) { | |||||
$watch_item = id(new PHUIStatusItemView()) | |||||
->setIcon('fa-eye green') | |||||
->setTarget(phutil_tag('strong', array(), pht('Watching'))) | |||||
->setNote( | |||||
pht( | |||||
'You will receive mail about changes made to any related '. | |||||
'object.')); | |||||
$watch_status = id(new PHUIStatusListView()) | |||||
->addItem($watch_item); | |||||
$view->addProperty(pht('Watching'), $watch_status); | |||||
} | |||||
if ($project->isUserMember($viewer_phid)) { | |||||
$is_silenced = $this->isProjectSilenced($project); | |||||
if ($is_silenced) { | |||||
$mail_icon = 'fa-envelope-o grey'; | |||||
$mail_target = pht('Disabled'); | |||||
$mail_note = pht( | |||||
'When mail is sent to project members, you will not receive '. | |||||
'a copy.'); | |||||
} else { | |||||
$mail_icon = 'fa-envelope-o green'; | |||||
$mail_target = pht('Enabled'); | |||||
$mail_note = pht( | |||||
'You will receive mail that is sent to project members.'); | |||||
} | |||||
$mail_item = id(new PHUIStatusItemView()) | |||||
->setIcon($mail_icon) | |||||
->setTarget(phutil_tag('strong', array(), $mail_target)) | |||||
->setNote($mail_note); | |||||
$mail_status = id(new PHUIStatusListView()) | |||||
->addItem($mail_item); | |||||
$view->addProperty(pht('Mail to Members'), $mail_status); | |||||
} | |||||
return $view; | return $view; | ||||
} | } | ||||
private function buildActions(PhabricatorProject $project) { | private function buildActions(PhabricatorProject $project) { | ||||
$viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
$id = $project->getID(); | $id = $project->getID(); | ||||
$view = id(new PhabricatorActionListView()) | $view = id(new PhabricatorActionListView()) | ||||
Show All 10 Lines | private function buildActions(PhabricatorProject $project) { | ||||
$can_join = $supports_edit && PhabricatorPolicyFilter::hasCapability( | $can_join = $supports_edit && PhabricatorPolicyFilter::hasCapability( | ||||
$viewer, | $viewer, | ||||
$project, | $project, | ||||
PhabricatorPolicyCapability::CAN_JOIN); | PhabricatorPolicyCapability::CAN_JOIN); | ||||
$can_leave = $supports_edit && (!$is_locked || $can_edit); | $can_leave = $supports_edit && (!$is_locked || $can_edit); | ||||
if (!$project->isUserMember($viewer->getPHID())) { | $viewer_phid = $viewer->getPHID(); | ||||
if (!$project->isUserMember($viewer_phid)) { | |||||
$view->addAction( | $view->addAction( | ||||
id(new PhabricatorActionView()) | id(new PhabricatorActionView()) | ||||
->setHref('/project/update/'.$project->getID().'/join/') | ->setHref('/project/update/'.$project->getID().'/join/') | ||||
->setIcon('fa-plus') | ->setIcon('fa-plus') | ||||
->setDisabled(!$can_join) | ->setDisabled(!$can_join) | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
->setName(pht('Join Project'))); | ->setName(pht('Join Project'))); | ||||
} else { | } else { | ||||
Show All 17 Lines | if (!$project->isUserWatcher($viewer->getPHID())) { | ||||
$view->addAction( | $view->addAction( | ||||
id(new PhabricatorActionView()) | id(new PhabricatorActionView()) | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
->setHref('/project/unwatch/'.$project->getID().'/') | ->setHref('/project/unwatch/'.$project->getID().'/') | ||||
->setIcon('fa-eye-slash') | ->setIcon('fa-eye-slash') | ||||
->setName(pht('Unwatch Project'))); | ->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; | $can_add = $can_edit && $supports_edit; | ||||
$view->addAction( | $view->addAction( | ||||
id(new PhabricatorActionView()) | id(new PhabricatorActionView()) | ||||
->setName(pht('Add Members')) | ->setName(pht('Add Members')) | ||||
->setIcon('fa-user-plus') | ->setIcon('fa-user-plus') | ||||
->setHref("/project/members/{$id}/add/") | ->setHref("/project/members/{$id}/add/") | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
Show All 16 Lines | $view->addAction( | ||||
->setIcon($lock_icon) | ->setIcon($lock_icon) | ||||
->setHref($this->getApplicationURI("lock/{$id}/")) | ->setHref($this->getApplicationURI("lock/{$id}/")) | ||||
->setDisabled(!$can_lock) | ->setDisabled(!$can_lock) | ||||
->setWorkflow(true)); | ->setWorkflow(true)); | ||||
return $view; | return $view; | ||||
} | } | ||||
private function isProjectSilenced(PhabricatorProject $project) { | |||||
$viewer = $this->getViewer(); | |||||
$viewer_phid = $viewer->getPHID(); | |||||
if (!$viewer_phid) { | |||||
return false; | |||||
} | |||||
$edge_type = PhabricatorProjectSilencedEdgeType::EDGECONST; | |||||
$silenced = PhabricatorEdgeQuery::loadDestinationPHIDs( | |||||
$project->getPHID(), | |||||
$edge_type); | |||||
$silenced = array_fuse($silenced); | |||||
return isset($silenced[$viewer_phid]); | |||||
} | |||||
} | } |