public function testGroupSubscriptionRemovedWhenMemberRelationshipRemoved()
 {
     $this->group->join($this->user1);
     $this->assertTrue($this->group->isMember($this->user1));
     elgg_add_subscription($this->user1->guid, 'test', $this->group->guid);
     $this->assertIsA(check_entity_relationship($this->user1->guid, 'notifytest', $this->group->guid), ElggRelationship::class);
     $this->group->leave($this->user1);
     $this->assertFalse($this->group->isMember($this->user1));
     $this->assertFalse(check_entity_relationship($this->user1->guid, 'notifytest', $this->user2->guid));
 }
/**
 * Subscribe a user to the updates of an entity
 *
 * @param int $entity_guid the content entity to subscribe to
 * @param int $user_guid   the user to subscribe (defaults to current user)
 *
 * @return bool
 */
function content_subscriptions_subscribe($entity_guid, $user_guid = 0)
{
    $entity_guid = sanitise_int($entity_guid, false);
    $user_guid = sanitise_int($user_guid, false);
    if (empty($user_guid)) {
        $user_guid = elgg_get_logged_in_user_guid();
    }
    // remove autosubscription block
    remove_entity_relationship($user_guid, CONTENT_SUBSCRIPTIONS_BLOCK, $entity_guid);
    $notification_services = _elgg_services()->notifications->getMethods();
    if (empty($notification_services)) {
        return false;
    }
    foreach ($notification_services as $service) {
        elgg_add_subscription($user_guid, $service, $entity_guid);
    }
    return true;
}
Beispiel #3
0
$current_user = elgg_get_logged_in_user_entity();
$guid = (int) get_input('guid', 0);
if (!$guid || !($user = get_entity($guid))) {
    forward();
}
if ($user->guid != $current_user->guid && !$current_user->isAdmin()) {
    forward();
}
// Get group memberships and condense them down to an array of guids
$groups = array();
$options = array('relationship' => 'member', 'relationship_guid' => $user->guid, 'type' => 'group', 'limit' => false);
if ($groupmemberships = elgg_get_entities_from_relationship($options)) {
    foreach ($groupmemberships as $groupmembership) {
        $groups[] = $groupmembership->guid;
    }
}
if (!empty($groups)) {
    $NOTIFICATION_HANDLERS = _elgg_services()->notifications->getMethodsAsDeprecatedGlobal();
    foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
        $subscriptions[$method] = get_input($method . 'subscriptions', array());
        foreach ($groups as $group) {
            if (in_array($group, $subscriptions[$method])) {
                elgg_add_subscription($user->guid, $method, $group);
            } else {
                elgg_remove_subscription($user->guid, $method, $group);
            }
        }
    }
}
system_message(elgg_echo('notifications:subscriptions:success'));
forward(REFERER);
Beispiel #4
0
 /**
  * Set the user's notification settings for the group
  *
  * @param \ElggUser  $user  user to set settings for
  * @param \ElggGroup $group group to set settings for
  *
  * @return void
  */
 protected static function setGroupNotificationSettings(\ElggUser $user, \ElggGroup $group)
 {
     if (!$user instanceof \ElggUser || !$group instanceof \ElggGroup) {
         return;
     }
     // load notification settings
     self::loadAutoNotifications();
     if (empty(self::$AUTO_NOTIFICATIONS)) {
         return;
     }
     // subscribe the user to the group
     $NOTIFICATION_HANDLERS = _elgg_services()->notifications->getMethodsAsDeprecatedGlobal();
     foreach ($NOTIFICATION_HANDLERS as $method => $dummy) {
         if (!in_array($method, self::$AUTO_NOTIFICATIONS)) {
             continue;
         }
         elgg_add_subscription($user->getGUID(), $method, $group->getGUID());
     }
 }
Beispiel #5
0
 * @package ElggNotifications
 */
$current_user = elgg_get_logged_in_user_entity();
$guid = (int) get_input('guid', 0);
if (!$guid || !($user = get_entity($guid))) {
    forward();
}
if ($user->guid != $current_user->guid && !$current_user->isAdmin()) {
    forward();
}
$NOTIFICATION_HANDLERS = _elgg_services()->notifications->getMethodsAsDeprecatedGlobal();
$subscriptions = array();
foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
    $personal[$method] = get_input($method . 'personal');
    set_user_notification_setting($user->guid, $method, $personal[$method] == '1' ? true : false);
    $collections[$method] = get_input($method . 'collections');
    $metaname = 'collections_notifications_preferences_' . $method;
    $user->{$metaname} = $collections[$method];
    $subscriptions[$method] = get_input($method . 'subscriptions');
    remove_entity_relationships($user->guid, 'notify' . $method, false, 'user');
}
// Add new ones
foreach ($subscriptions as $method => $subscription) {
    if (is_array($subscription) && !empty($subscription)) {
        foreach ($subscription as $subscriptionperson) {
            elgg_add_subscription($user->guid, $method, $subscriptionperson);
        }
    }
}
system_message(elgg_echo('notifications:subscriptions:success'));
forward(REFERER);
Beispiel #6
0
<?php

/**
 * Saves subscription record notification settings
 */
$guid = get_input('guid');
$user = get_entity($guid);
if (!$user || !$user->canEdit()) {
    register_error(elgg_echo('actionnotauthorized'));
    forward('', '403');
}
$methods = elgg_get_notification_methods();
if (empty($methods)) {
    forward(REFERRER, '404');
}
$subscriptions = (array) get_input('subscriptions', []);
foreach ($subscriptions as $target_guid => $preferred_methods) {
    if (!is_array($preferred_methods)) {
        $preferred_methods = [];
    }
    foreach ($methods as $method) {
        if (in_array($method, $preferred_methods)) {
            elgg_add_subscription($user->guid, $method, $target_guid);
        } else {
            elgg_remove_subscription($user->guid, $method, $target_guid);
        }
    }
}
system_message(elgg_echo('notifications:subscriptions:success'));
// get group members
$members = $group->getMembers(['count' => true]);
if (empty($members)) {
    forward($group->getURL());
}
$options = ['type' => 'user', 'relationship' => 'member', 'relationship_guid' => $group->getGUID(), 'inverse_relationship' => true, 'limit' => false];
$members = new ElggBatch('elgg_get_entities_from_relationship', $options);
switch ($toggle) {
    case 'enable':
        // fix notifications settings for site amd email
        $auto_notification_handlers = ['site', 'email'];
        // enable notification for everyone
        foreach ($members as $member) {
            foreach ($NOTIFICATION_HANDLERS as $method => $dummy) {
                if (in_array($method, $auto_notification_handlers)) {
                    elgg_add_subscription($member->getGUID(), $method, $group->getGUID());
                }
            }
        }
        system_message(elgg_echo('group_tools:action:notifications:success:enable'));
        break;
    case 'disable':
        // disable notification for everyone
        foreach ($members as $member) {
            foreach ($NOTIFICATION_HANDLERS as $method => $dummy) {
                elgg_remove_subscription($member->getGUID(), $method, $group->getGUID());
            }
        }
        system_message(elgg_echo('group_tools:action:notifications:success:disable'));
        break;
    default: