aboutsummaryrefslogtreecommitdiff
path: root/mod/notifications/actions/groupsave.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/notifications/actions/groupsave.php')
-rw-r--r--mod/notifications/actions/groupsave.php49
1 files changed, 49 insertions, 0 deletions
diff --git a/mod/notifications/actions/groupsave.php b/mod/notifications/actions/groupsave.php
new file mode 100644
index 000000000..2dd2a6db3
--- /dev/null
+++ b/mod/notifications/actions/groupsave.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Elgg notifications group save
+ *
+ * @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();
+}
+
+// Get group memberships and condense them down to an array of guids
+$groups = array();
+$options = array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $user->guid,
+ 'types' => 'group',
+ 'limit' => 9999,
+);
+if ($groupmemberships = elgg_get_entities_from_relationship($options)) {
+ foreach($groupmemberships as $groupmembership) {
+ $groups[] = $groupmembership->guid;
+ }
+}
+
+if (!empty($groups)) {
+ global $NOTIFICATION_HANDLERS;
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subscriptions[$method] = get_input($method.'subscriptions', array());
+ foreach ($groups as $group) {
+ if (in_array($group, $subscriptions[$method])) {
+ add_entity_relationship($user->guid, 'notify'.$method, $group);
+ } else {
+ remove_entity_relationship($user->guid, 'notify'.$method, $group);
+ }
+ }
+ }
+}
+
+system_message(elgg_echo('notifications:subscriptions:success'));
+
+forward(REFERER);