Differential D19033 Diff 45639 src/applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php
Show All 36 Lines | if (!$object || !$object->getPHID()) { | ||||
return; | return; | ||||
} | } | ||||
if (!($object instanceof PhabricatorSubscribableInterface)) { | if (!($object instanceof PhabricatorSubscribableInterface)) { | ||||
// This object isn't subscribable. | // This object isn't subscribable. | ||||
return; | return; | ||||
} | } | ||||
$src_phid = $object->getPHID(); | |||||
$subscribed_type = PhabricatorObjectHasSubscriberEdgeType::EDGECONST; | |||||
$muted_type = PhabricatorMutedByEdgeType::EDGECONST; | |||||
$edges = id(new PhabricatorEdgeQuery()) | |||||
->withSourcePHIDs(array($src_phid)) | |||||
->withEdgeTypes( | |||||
array( | |||||
$subscribed_type, | |||||
$muted_type, | |||||
)) | |||||
->withDestinationPHIDs(array($user_phid)) | |||||
->execute(); | |||||
if ($user_phid) { | |||||
$is_subscribed = isset($edges[$src_phid][$subscribed_type][$user_phid]); | |||||
$is_muted = isset($edges[$src_phid][$muted_type][$user_phid]); | |||||
} else { | |||||
$is_subscribed = false; | |||||
$is_muted = false; | |||||
} | |||||
if ($user_phid && $object->isAutomaticallySubscribed($user_phid)) { | if ($user_phid && $object->isAutomaticallySubscribed($user_phid)) { | ||||
$sub_action = id(new PhabricatorActionView()) | $sub_action = id(new PhabricatorActionView()) | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
->setDisabled(true) | ->setDisabled(true) | ||||
->setRenderAsForm(true) | ->setRenderAsForm(true) | ||||
->setHref('/subscriptions/add/'.$object->getPHID().'/') | ->setHref('/subscriptions/add/'.$object->getPHID().'/') | ||||
->setName(pht('Automatically Subscribed')) | ->setName(pht('Automatically Subscribed')) | ||||
->setIcon('fa-check-circle lightgreytext'); | ->setIcon('fa-check-circle lightgreytext'); | ||||
} else { | } else { | ||||
$subscribed = false; | |||||
if ($user->isLoggedIn()) { | |||||
$src_phid = $object->getPHID(); | |||||
$edge_type = PhabricatorObjectHasSubscriberEdgeType::EDGECONST; | |||||
$edges = id(new PhabricatorEdgeQuery()) | |||||
->withSourcePHIDs(array($src_phid)) | |||||
->withEdgeTypes(array($edge_type)) | |||||
->withDestinationPHIDs(array($user_phid)) | |||||
->execute(); | |||||
$subscribed = isset($edges[$src_phid][$edge_type][$user_phid]); | |||||
} | |||||
$can_interact = PhabricatorPolicyFilter::canInteract($user, $object); | $can_interact = PhabricatorPolicyFilter::canInteract($user, $object); | ||||
if ($subscribed) { | if ($is_subscribed) { | ||||
$sub_action = id(new PhabricatorActionView()) | $sub_action = id(new PhabricatorActionView()) | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
->setRenderAsForm(true) | ->setRenderAsForm(true) | ||||
->setHref('/subscriptions/delete/'.$object->getPHID().'/') | ->setHref('/subscriptions/delete/'.$object->getPHID().'/') | ||||
->setName(pht('Unsubscribe')) | ->setName(pht('Unsubscribe')) | ||||
->setIcon('fa-minus-circle') | ->setIcon('fa-minus-circle') | ||||
->setDisabled(!$can_interact); | ->setDisabled(!$can_interact); | ||||
} else { | } else { | ||||
$sub_action = id(new PhabricatorActionView()) | $sub_action = id(new PhabricatorActionView()) | ||||
->setWorkflow(true) | ->setWorkflow(true) | ||||
->setRenderAsForm(true) | ->setRenderAsForm(true) | ||||
->setHref('/subscriptions/add/'.$object->getPHID().'/') | ->setHref('/subscriptions/add/'.$object->getPHID().'/') | ||||
->setName(pht('Subscribe')) | ->setName(pht('Subscribe')) | ||||
->setIcon('fa-plus-circle') | ->setIcon('fa-plus-circle') | ||||
->setDisabled(!$can_interact); | ->setDisabled(!$can_interact); | ||||
} | } | ||||
if (!$user->isLoggedIn()) { | if (!$user->isLoggedIn()) { | ||||
$sub_action->setDisabled(true); | $sub_action->setDisabled(true); | ||||
} | } | ||||
} | } | ||||
$mute_action = id(new PhabricatorActionView()) | |||||
->setWorkflow(true) | |||||
->setHref('/subscriptions/mute/'.$object->getPHID().'/') | |||||
->setDisabled(!$user_phid); | |||||
if (!$is_muted) { | |||||
$mute_action | |||||
->setName(pht('Mute Notifications')) | |||||
->setIcon('fa-volume-up'); | |||||
} else { | |||||
$mute_action | |||||
->setName(pht('Unmute Notifications')) | |||||
->setIcon('fa-volume-off') | |||||
->setColor(PhabricatorActionView::RED); | |||||
} | |||||
$actions = $event->getValue('actions'); | $actions = $event->getValue('actions'); | ||||
$actions[] = $sub_action; | $actions[] = $sub_action; | ||||
$actions[] = $mute_action; | |||||
$event->setValue('actions', $actions); | $event->setValue('actions', $actions); | ||||
} | } | ||||
private function handlePropertyEvent($event) { | private function handlePropertyEvent($event) { | ||||
$user = $event->getUser(); | $user = $event->getUser(); | ||||
$object = $event->getValue('object'); | $object = $event->getValue('object'); | ||||
if (!$object || !$object->getPHID()) { | if (!$object || !$object->getPHID()) { | ||||
Show All 29 Lines |