Exemplo n.º 1
0
/**
 * 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;
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
/**
 * 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;
}
Exemplo n.º 5
0
/**
 * 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;
}
Exemplo n.º 6
0
 /**
  * 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;
 }