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; }
$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);
/** * 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()); } }
* @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);
<?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: