/** * Get notification subscriptions for a new plugin release * * The Elgg 1.9 subscriptions system is based on containers. By default it is * possible to subscribe only to users. The container of a release is however * a project, so we need to get subscriptions for the project when notifying * about a new release. * * @param string $hook Hook name * @param string $type Hook type * @param array $subscriptions Array of subscriptions * @param array $params Hook parameters * @return array $subscriptions */ function get_release_subscriptions($hook, $type, $subscriptions, $params) { $entity = $params['event']->getObject(); if ($entity instanceof PluginRelease) { $project = $entity->getContainerEntity(); // We skip the first release because we notify about the new plugin project instead if ($project->getReleases(array('count' => true)) > 1) { $subscriptions += elgg_get_subscriptions_for_container($project->container_guid); } } return $subscriptions; }
/** * Subscribe users to comments based on original entity * * @param string $hook "get" * @param string $type "subscriptions" * @param array $return Subscriptions * @param array $params Hook params * @return array */ public static function getSubscriptions($hook, $type, $return, $params) { $event = elgg_extract('event', $params); if (!$event instanceof Event) { return; } $object = $event->getObject(); if (!elgg_instanceof($object, 'object', 'comment')) { return; } $original_container = $object->getOriginalContainer(); $subscriptions = elgg_get_subscriptions_for_container($original_container->container_guid); $all_subscriptions = $return + $subscriptions; // Notification has already been sent to the owner of the container in the save action $container = $object->getContainerEntity(); unset($all_subscriptions[$container->guid]); unset($all_subscriptions[$container->owner_guid]); return $all_subscriptions; }
/** * Check if the user is receiving notifications from the group * * @param \ElggUser $user the user to check * @param \ElggGroup $group the group to check for * * @return bool */ public static function notificationsEnabledForGroup(\ElggUser $user, \ElggGroup $group) { if (!$user instanceof \ElggUser || !$group instanceof \ElggGroup) { return false; } $subscriptions = elgg_get_subscriptions_for_container($group->getGUID()); if (!is_array($subscriptions)) { return false; } if (!empty($subscriptions[$user->getGUID()])) { return true; } return false; }
/** * Get subscriptions for group notifications * * @param string $hook 'get' * @param string $type 'subscriptions' * @param array $subscriptions Array containing subscriptions in the form * <user guid> => array('email', 'site', etc.) * @param array $params Hook parameters * @return array */ function discussion_get_subscriptions($hook, $type, $subscriptions, $params) { $reply = $params['event']->getObject(); if (!elgg_instanceof($reply, 'object', 'discussion_reply', 'ElggDiscussionReply')) { return $subscriptions; } $group_guid = $reply->getContainerEntity()->container_guid; $group_subscribers = elgg_get_subscriptions_for_container($group_guid); return $subscriptions + $group_subscribers; }
/** * Check if the user gets notifications from the group, based on notification settings * * @param ElggEntity $container the container to check (only act on ElggGroups) * @param int $user_guid the user to check (defaults to current user) * @param bool $return_subscription return the subscription settings * * @return bool */ function content_subscriptions_check_notification_settings(ElggEntity $container, $user_guid = 0, $return_subscription = false) { static $user_cache; $user_guid = sanitise_int($user_guid, false); if (empty($user_guid)) { $user_guid = elgg_get_logged_in_user_guid(); } // only check groups if ($container instanceof ElggGroup && !empty($user_guid)) { if (!isset($user_cache[$container->getGUID()])) { $user_cache[$container->getGUID()] = elgg_get_subscriptions_for_container($container->getGUID()); } if ($return_subscription) { return $user_cache[$container->getGUID()][$user_guid]; } else { return isset($user_cache[$container->getGUID()][$user_guid]); } } return false; }
/** * Add question subscribers to the subscribers for an answer * * @param string $hook the name of the hook * @param string $type the type of the hook * @param array $return_value current return value * @param array $params supplied params * * @return void|array */ public static function addQuestionSubscribersToAnswerSubscribers($hook, $type, $return_value, $params) { $event = elgg_extract('event', $params); if (!$event instanceof \Elgg\Notifications\Event) { return; } $object = $event->getObject(); $container = $object->getContainerEntity(); if (!$container instanceof \ElggAnswer) { return; } $question = $container->getContainerEntity(); $subscribers = elgg_get_subscriptions_for_container($question->getGUID()); if (empty($subscribers)) { return; } return $return_value + $subscribers; }