aboutsummaryrefslogtreecommitdiff
path: root/mod/notifications
diff options
context:
space:
mode:
Diffstat (limited to 'mod/notifications')
-rw-r--r--mod/notifications/actions/groupsave.php44
-rw-r--r--mod/notifications/actions/save.php42
-rw-r--r--mod/notifications/graphics/icon_notifications_email.gifbin0 -> 1416 bytes
-rw-r--r--mod/notifications/groups.php42
-rw-r--r--mod/notifications/index.php39
-rw-r--r--mod/notifications/languages/en.php29
-rw-r--r--mod/notifications/manifest.xml10
-rw-r--r--mod/notifications/start.php47
-rw-r--r--mod/notifications/views/default/notifications/css.php78
-rw-r--r--mod/notifications/views/default/notifications/settings/usersettings.php3
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/collections.php141
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/form.php35
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/forminternals.php315
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/groupsform.php99
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/jsfuncs.php54
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/personal.php63
16 files changed, 1041 insertions, 0 deletions
diff --git a/mod/notifications/actions/groupsave.php b/mod/notifications/actions/groupsave.php
new file mode 100644
index 000000000..ca250c7fd
--- /dev/null
+++ b/mod/notifications/actions/groupsave.php
@@ -0,0 +1,44 @@
+<?php
+
+ /**
+ * Elgg notifications group save
+ *
+ * @package ElggNotifications
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+ // Restrict to logged in users
+ gatekeeper();
+
+ // Load important global vars
+ global $SESSION;
+ global $NOTIFICATION_HANDLERS;
+
+ // Get group memberships and condense them down to an array of guids
+ $groups = array();
+ if ($groupmemberships = elgg_get_entities_from_relationship(array('relationship' => 'member', 'relationship_guid' => $_SESSION['user']->guid, 'types' => 'group', 'limit' => 9999))) {
+ foreach($groupmemberships as $groupmembership)
+ $groups[] = $groupmembership->guid;
+ }
+
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subscriptions[$method] = get_input($method.'subscriptions');
+ $personal[$method] = get_input($method.'personal');
+ $collections[$method] = get_input($method.'collections');
+ if (!empty($groups))
+ foreach($groups as $group)
+ if (in_array($group,$subscriptions[$method])) {
+ add_entity_relationship($SESSION['user']->guid,'notify'.$method,$group);
+ } else {
+ remove_entity_relationship($SESSION['user']->guid,'notify'.$method,$group);
+ }
+ }
+
+ system_message(elgg_echo('notifications:subscriptions:success'));
+
+ forward($_SERVER['HTTP_REFERER']);
+
+?> \ No newline at end of file
diff --git a/mod/notifications/actions/save.php b/mod/notifications/actions/save.php
new file mode 100644
index 000000000..a4a5903f9
--- /dev/null
+++ b/mod/notifications/actions/save.php
@@ -0,0 +1,42 @@
+<?php
+
+ /**
+ * Elgg notifications
+ *
+ * @package ElggNotifications
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+ // Restrict to logged in users
+ gatekeeper();
+
+ global $SESSION;
+
+ global $NOTIFICATION_HANDLERS;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subscriptions[$method] = get_input($method.'subscriptions');
+ $personal[$method] = get_input($method.'personal');
+ $collections[$method] = get_input($method.'collections');
+
+ $metaname = 'collections_notifications_preferences_' . $method;
+ $_SESSION['user']->$metaname = $collections[$method];
+ set_user_notification_setting($_SESSION['user']->guid, $method, ($personal[$method] == '1') ? true : false);
+ remove_entity_relationships($SESSION['user']->guid,'notify' . $method, false, 'user');
+ }
+
+ // Add new ones
+ foreach($subscriptions as $key => $subscription)
+ if (is_array($subscription) && !empty($subscription)) {
+ foreach($subscription as $subscriptionperson) {
+ add_entity_relationship($_SESSION['user']->guid, 'notify' . $key, $subscriptionperson);
+ }
+ }
+
+ system_message(elgg_echo('notifications:subscriptions:success'));
+
+ forward($_SERVER['HTTP_REFERER']);
+
+?> \ No newline at end of file
diff --git a/mod/notifications/graphics/icon_notifications_email.gif b/mod/notifications/graphics/icon_notifications_email.gif
new file mode 100644
index 000000000..038d6e651
--- /dev/null
+++ b/mod/notifications/graphics/icon_notifications_email.gif
Binary files differ
diff --git a/mod/notifications/groups.php b/mod/notifications/groups.php
new file mode 100644
index 000000000..a425845cf
--- /dev/null
+++ b/mod/notifications/groups.php
@@ -0,0 +1,42 @@
+<?php
+
+ /**
+ * Elgg notifications plugin group index
+ *
+ * @package ElggNotifications
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+ // Load Elgg framework
+ require_once(dirname(dirname(dirname(__FILE__))) . '/engine/start.php');
+
+ // Ensure only logged-in users can see this page
+ gatekeeper();
+
+ // Set the context to settings
+ set_context('settings');
+
+ // Get the form
+ global $SESSION, $CONFIG;
+ $people = array();
+
+ $groupmemberships = elgg_get_entities_from_relationship(array('relationship' => 'member', 'relationship_guid' => $_SESSION['user']->guid, 'types' => 'group', 'limit' => 9999));
+
+ $body = elgg_view('input/form',array(
+ 'body' => elgg_view('notifications/subscriptions/groupsform',array(
+ 'groups' => $groupmemberships
+ )),
+ 'method' => 'post',
+ 'action' => $CONFIG->wwwroot . 'action/notificationsettings/groupsave'
+ ));
+
+ // Insert it into the correct canvas layout
+ $body = elgg_view_layout('two_column_left_sidebar','',$body);
+
+ // Draw the page
+ page_draw(elgg_echo('notifications:subscriptions:changesettings:groups'),$body);
+
+?> \ No newline at end of file
diff --git a/mod/notifications/index.php b/mod/notifications/index.php
new file mode 100644
index 000000000..79365842c
--- /dev/null
+++ b/mod/notifications/index.php
@@ -0,0 +1,39 @@
+<?php
+
+ /**
+ * Elgg notifications plugin index
+ *
+ * @package ElggNotifications
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+ // Load Elgg framework
+ require_once(dirname(dirname(dirname(__FILE__))) . '/engine/start.php');
+
+ // Ensure only logged-in users can see this page
+ gatekeeper();
+
+ // Set the context to settings
+ set_context('settings');
+
+ // Get the form
+ global $SESSION;
+ $people = array();
+ if ($people_ents = elgg_get_entities_from_relationship(array('relationship' => 'notify', 'relationship_guid' => $SESSION['user']->guid, 'types' => 'user', 'limit' => 99999))) {
+ foreach($people_ents as $ent)
+ $people[] = $ent->guid;
+ }
+ $body = elgg_view('notifications/subscriptions/form',array(
+ 'people' => $people
+ ));
+
+ // Insert it into the correct canvas layout
+ $body = elgg_view_layout('two_column_left_sidebar','',$body);
+
+ // Draw the page
+ page_draw(elgg_echo('notifications:subscriptions:changesettings'),$body);
+
+?> \ No newline at end of file
diff --git a/mod/notifications/languages/en.php b/mod/notifications/languages/en.php
new file mode 100644
index 000000000..05c7da86a
--- /dev/null
+++ b/mod/notifications/languages/en.php
@@ -0,0 +1,29 @@
+<?php
+
+ $english = array(
+
+ 'friends:all' => 'All friends',
+
+ 'notifications:subscriptions:personal:description' => 'Receive notifications when actions are performed on your content',
+ 'notifications:subscriptions:personal:title' => 'Personal notifications',
+
+ 'notifications:subscriptions:collections:title' => 'Toggle friends collections',
+ 'notifications:subscriptions:collections:description' => 'To toggle settings for members of your friends collections, use the icons below. This will affect the corresponding users in the main notification settings panel at the bottom of the page. ',
+ 'notifications:subscriptions:collections:edit' => 'To edit your friends collections, click here.',
+
+ 'notifications:subscriptions:changesettings' => 'Notifications',
+ 'notifications:subscriptions:changesettings:groups' => 'Group notifications',
+ 'notification:method:email' => 'Email',
+
+ 'notifications:subscriptions:title' => 'Notifications per user',
+ 'notifications:subscriptions:description' => 'To receive notifications from your friends when they create new content, find them below and select the notification method you would like to use.',
+
+ 'notifications:subscriptions:groups:description' => 'To receive notifications when new content is added to a group you are a member of, find it below and select the notification method you would like to use.',
+
+ 'notifications:subscriptions:success' => 'Your notifications settings have been saved.',
+
+ );
+
+ add_translation("en",$english);
+
+?> \ No newline at end of file
diff --git a/mod/notifications/manifest.xml b/mod/notifications/manifest.xml
new file mode 100644
index 000000000..d76abc6ae
--- /dev/null
+++ b/mod/notifications/manifest.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+ <field key="author" value="Curverider" />
+ <field key="version" value="1.7" />
+ <field key="description" value="Elgg notifications plugin" />
+ <field key="website" value="http://www.elgg.org/" />
+ <field key="copyright" value="(C) Curverider 2008-2010" />
+ <field key="licence" value="GNU Public License version 2" />
+ <field key="elgg_version" value="2010030101" />
+</plugin_manifest>
diff --git a/mod/notifications/start.php b/mod/notifications/start.php
new file mode 100644
index 000000000..a08fe68f5
--- /dev/null
+++ b/mod/notifications/start.php
@@ -0,0 +1,47 @@
+<?php
+
+ /**
+ * Elgg notifications plugin
+ *
+ * @package ElggNotifications
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+
+ /**
+ * Notification settings page setup function
+ *
+ */
+ function notifications_plugin_pagesetup() {
+ global $CONFIG;
+ if (get_context() == 'settings') {
+ add_submenu_item(elgg_echo('notifications:subscriptions:changesettings'), $CONFIG->wwwroot . "mod/notifications/");
+ if (is_plugin_enabled('groups'))
+ add_submenu_item(elgg_echo('notifications:subscriptions:changesettings:groups'), $CONFIG->wwwroot . "mod/notifications/groups.php");
+ }
+ }
+
+ function notifications_plugin_init() {
+ elgg_extend_view('css','notifications/css');
+ global $CONFIG;
+
+ // Unset the default user settings hook
+ if (isset($CONFIG->hooks['usersettings:save']['user']))
+ foreach($CONFIG->hooks['usersettings:save']['user'] as $key => $function) {
+ if ($function == 'notification_user_settings_save')
+ unset($CONFIG->hooks['usersettings:save']['user'][$key]);
+ }
+ }
+
+ register_elgg_event_handler('pagesetup','system','notifications_plugin_pagesetup',1000);
+ register_elgg_event_handler('init','system','notifications_plugin_init',1000);
+
+ // Register action
+ global $CONFIG;
+ register_action("notificationsettings/save",false,$CONFIG->pluginspath . "notifications/actions/save.php");
+ register_action("notificationsettings/groupsave",false,$CONFIG->pluginspath . "notifications/actions/groupsave.php");
+
+?> \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/css.php b/mod/notifications/views/default/notifications/css.php
new file mode 100644
index 000000000..be1ef922c
--- /dev/null
+++ b/mod/notifications/views/default/notifications/css.php
@@ -0,0 +1,78 @@
+<?php
+
+ /**
+ * Elgg notifications CSS
+ *
+ * @package notifications
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.org/
+ */
+
+?>
+
+#notificationstable td.namefield {
+ width:250px;
+ text-align: left;
+ vertical-align: middle;
+}
+#notificationstable td.namefield p {
+ margin:0;
+ vertical-align: middle;
+ line-height: 1.1em;
+ padding:5px 0 5px 0;
+}
+#notificationstable td.namefield img {
+ padding:6px 10px 6px 3px;
+ float:left;
+}
+#notificationstable td.namefield p.namefieldlink {
+ margin:9px 0 0 0;
+}
+#notificationstable td.emailtogglefield,
+#notificationstable td.smstogglefield {
+ width:50px;
+ text-align: center;
+ vertical-align: middle;
+}
+#notificationstable td.spacercolumn {
+ width:30px;
+}
+#notificationstable td {
+ border-bottom: 1px solid silver;
+}
+#notificationstable td.emailtogglefield input {
+ margin-right:36px;
+ margin-top:5px;
+}
+#notificationstable td.emailtogglefield a {
+ width:46px;
+ height:24px;
+ cursor: pointer;
+ display: block;
+ outline: none;
+}
+#notificationstable td.emailtogglefield a.emailtoggleOff {
+ background: url(<?php echo $vars['url']; ?>mod/notifications/graphics/icon_notifications_email.gif) no-repeat right 2px;
+}
+#notificationstable td.emailtogglefield a.emailtoggleOn {
+ background: url(<?php echo $vars['url']; ?>mod/notifications/graphics/icon_notifications_email.gif) no-repeat right -36px;
+}
+
+.notification_collections,
+.notification_personal {
+ margin-bottom: 25px;
+}
+
+.settings_form .friendsPicker_container h3 {
+ color:#999999;
+ font-size:3em;
+ margin:0 0 20px;
+ text-align:left;
+ background: none;
+ border-bottom: none;
+}
+
+
+
diff --git a/mod/notifications/views/default/notifications/settings/usersettings.php b/mod/notifications/views/default/notifications/settings/usersettings.php
new file mode 100644
index 000000000..15c5adc7f
--- /dev/null
+++ b/mod/notifications/views/default/notifications/settings/usersettings.php
@@ -0,0 +1,3 @@
+<?php
+
+?> \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/collections.php b/mod/notifications/views/default/notifications/subscriptions/collections.php
new file mode 100644
index 000000000..8fe49e672
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/collections.php
@@ -0,0 +1,141 @@
+
+<script type="text/javascript">
+
+ function setCollection(members, method, id) {
+ for ( var i in members ) {
+ var checked = $('#' + method + 'collections' + id).children("INPUT[type='checkbox']").attr('checked');
+ if ($("#"+method+members[i]).children("INPUT[type='checkbox']").attr('checked') != checked) {
+ $("#"+method+members[i]).children("INPUT[type='checkbox']").attr('checked', checked);
+ functioncall = 'adjust' + method + '_alt("'+method+members[i]+'");';
+ eval(functioncall);
+ }
+ }
+ }
+
+</script>
+
+<h3>
+ <?php echo elgg_echo('notifications:subscriptions:collections:title'); ?>
+</h3>
+<div class="notification_personal">
+<p>
+ <?php echo elgg_echo('notifications:subscriptions:collections:description'); ?>
+ <a href="<?php echo $vars['url']; ?>pg/collections/<?php echo $vars['user']->username; ?>"><?php echo elgg_echo('notifications:subscriptions:collections:edit') ?></a>
+</p>
+<table id="notificationstable" cellspacing="0" cellpadding="4" border="1" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+ $i = 0;
+ global $NOTIFICATION_HANDLERS;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0)
+ echo "<td class=\"spacercolumn\">&nbsp;</td>";
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+ $members = array();
+ if ($friends = get_user_friends($vars['user']->guid,'',9999,0)) {
+ foreach($friends as $friend)
+ $members[] = $friend->guid;
+ }
+ $memberno = sizeof($members);
+ $members = implode(',',$members);
+
+?>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo elgg_echo('friends:all'); ?> (<?php echo $memberno; ?>)
+ </p>
+ </td>
+<?php
+
+ $fields = '';
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $metaname = 'collections_notifications_preferences_' . $method;
+ if ($collections_preferences = $vars['user']->$metaname) {
+ if (!empty($collections_preferences) && !is_array($collections_preferences))
+ $collections_preferences = array($collections_preferences);
+ if (is_array($collections_preferences))
+ if (in_array(-1,$collections_preferences)) {
+ $collectionschecked[$method] = 'checked="checked"';
+ } else {
+ $collectionschecked[$method] = '';
+ }
+ }
+ if ($i > 0) $fields .= "<td class=\"spacercolumn\">&nbsp;</td>";
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}collections-1" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}collections-1'); setCollection([{$members}],'{$method}',-1);">
+ <input type="checkbox" name="{$method}collections[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}collections-1');" value="-1" {$collectionschecked[$method]} /></a></td>
+END;
+ $i++;
+ }
+ echo $fields;
+
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+
+ if ($collections = get_user_access_collections($vars['user']->guid)) {
+ foreach($collections as $collection) {
+ $members = get_members_of_access_collection($collection->id, true);
+ $memberno = sizeof($members);
+ $members = implode(',',$members);
+
+?>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo $collection->name; ?> (<?php echo $memberno; ?>)
+ </p>
+
+ </td>
+
+<?php
+
+ $fields = '';
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $metaname = 'collections_notifications_preferences_' . $method;
+ if ($collections_preferences = $vars['user']->$metaname) {
+ if (!empty($collections_preferences) && !is_array($collections_preferences))
+ $collections_preferences = array($collections_preferences);
+ if (is_array($collections_preferences))
+ if (in_array($collection->id,$collections_preferences)) {
+ $collectionschecked[$method] = 'checked="checked"';
+ } else {
+ $collectionschecked[$method] = '';
+ }
+ }
+ if ($i > 0) $fields .= "<td class=\"spacercolumn\">&nbsp;</td>";
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}collections{$collection->id}" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}collections{$collection->id}'); setCollection([{$members}],'{$method}',{$collection->id});">
+ <input type="checkbox" name="{$method}collections[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}collections{$collection->id}');" value="{$collection->id}" {$collectionschecked[$method]} /></a></td>
+END;
+ $i++;
+ }
+ echo $fields;
+
+?>
+
+ <td>&nbsp;</td>
+ </tr>
+<?php
+
+ }
+}
+
+?>
+</table>
+</div>
diff --git a/mod/notifications/views/default/notifications/subscriptions/form.php b/mod/notifications/views/default/notifications/subscriptions/form.php
new file mode 100644
index 000000000..d96d6b7a7
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/form.php
@@ -0,0 +1,35 @@
+<?php
+
+ /**
+ * Elgg SMS Client
+ *
+ * @package ElggSMS
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+
+ // Echo title
+ echo elgg_view_title(elgg_echo('notifications:subscriptions:changesettings'));
+
+ echo elgg_view('subscriptions/form/additions',$vars);
+
+ // Display a description
+?>
+<div class="contentWrapper">
+<div class="notification_methods">
+<?php
+
+ echo elgg_view('input/form',array(
+ 'body' => elgg_view('notifications/subscriptions/personal') .
+ elgg_view('notifications/subscriptions/collections') .
+ elgg_view('notifications/subscriptions/forminternals'),
+ 'method' => 'post',
+ 'action' => $vars['url'] . 'action/notificationsettings/save',
+ ));
+
+?>
+</div>
+</div> \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/forminternals.php b/mod/notifications/views/default/notifications/subscriptions/forminternals.php
new file mode 100644
index 000000000..673e30cc3
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/forminternals.php
@@ -0,0 +1,315 @@
+ <h3>
+ <?php echo elgg_echo('notifications:subscriptions:title'); ?>
+ </h3>
+ <p class="notification_methods_intro">
+ <?php echo elgg_echo('notifications:subscriptions:description'); ?>
+ </p>
+<?php
+
+ // Get friends and subscriptions
+ $friends = get_user_friends($vars['user']->guid,'',9999,0);
+
+ global $NOTIFICATION_HANDLERS;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subsbig[$method] = elgg_get_entities_from_relationship(array('relationship' => 'notify' . $method, 'relationship_guid' => $vars['user']->guid, 'types' => 'user', 'limit' => 99999));
+ }
+
+ $subs = array();
+ foreach($subsbig as $method => $big) {
+ if (is_array($subsbig[$method]) && sizeof($subsbig[$method])) {
+ foreach($subsbig[$method] as $u) { $subs[$method][] = $u->guid; }
+ }
+ }
+
+ // Let the system know that the friends picker is in use
+ global $pickerinuse;
+ $pickerinuse = true;
+ $chararray = elgg_echo('friendspicker:chararray');
+
+ // Initialise internalname
+ if (!isset($vars['internalname'])) {
+ $internalname = "friend";
+ } else {
+ $internalname = $vars['internalname'];
+ }
+
+ // Initialise values
+ if (!isset($vars['value'])) {
+ $vars['value'] = array();
+ } else {
+ if (!is_array($vars['value'])) {
+ $vars['value'] = (int) $vars['value'];
+ $vars['value'] = array($vars['value']);
+ }
+ }
+
+ // Initialise whether we're calling back or not
+ if (isset($vars['callback'])) {
+ $callback = $vars['callback'];
+ } else {
+ $callback = false;
+ }
+
+ // We need to count the number of friends pickers on the page.
+ if (!isset($vars['friendspicker'])) {
+ global $friendspicker;
+ if (!isset($friendspicker)) $friendspicker = 0;
+ $friendspicker++;
+ } else {
+ $friendspicker = $vars['friendspicker'];
+ }
+
+ $users = array();
+ $activeletters = array();
+
+ // Are we displaying form tags and submit buttons?
+ // (If we've been given a target, then yes! Otherwise, no.)
+ if (isset($vars['formtarget'])) {
+ $formtarget = $vars['formtarget'];
+ } else {
+ $formtarget = false;
+ }
+
+ // Sort users by letter
+ if (is_array($friends) && sizeof($friends))
+ foreach($friends as $user) {
+
+ if (is_callable('mb_substr'))
+ $letter = strtoupper(mb_substr($user->name,0,1));
+ else
+ $letter = strtoupper(substr($user->name,0,1));
+ if (!substr_count($chararray,$letter)) {
+ $letter = "*";
+ }
+ if (!isset($users[$letter])) {
+ $users[$letter] = array();
+ }
+ $users[$letter][$user->name] = $user;
+
+ }
+
+ if (!$callback) {
+
+?>
+
+<div class="friends_picker">
+
+<?php
+
+ if (isset($vars['content'])) echo $vars['content'];
+
+
+?>
+
+ <div id="friends_picker_placeholder<?php echo $friendspicker; ?>">
+
+<?php
+
+ }
+
+ if (!isset($vars['replacement'])) {
+
+ if ($formtarget) {
+?>
+
+ <script language="text/javascript">
+ $(function() { // onload...do
+ $('#collectionMembersForm<?php echo $friendspicker; ?>').submit(function() {
+ var inputs = [];
+ $(':input', this).each(function() {
+ if (this.type != 'checkbox' || (this.type == 'checkbox' && this.checked != false)) {
+ inputs.push(this.name + '=' + escape(this.value));
+ }
+ });
+ jQuery.ajax({
+ type: "POST",
+ data: inputs.join('&'),
+ url: this.action,
+ success: function(){
+ $('a.collectionmembers<?php echo $friendspicker; ?>').click();
+ }
+
+ });
+ return false;
+ })
+ })
+
+ </script>
+
+<?php
+
+ }
+
+ echo elgg_view('notifications/subscriptions/jsfuncs',$vars);
+
+?>
+
+
+ <div class="friendsPicker_wrapper">
+ <div id="friendsPicker<?php echo $friendspicker; ?>">
+ <div class="friendsPicker_container">
+<?php
+
+ // Initialise letters
+ if (is_callable('mb_substr'))
+ $letter = mb_substr($chararray,0,1);
+ else
+ $letter = substr($chararray,0,1);
+ $letpos = 0;
+ $chararray .= '*';
+ while (1 == 1) {
+?>
+ <div class="panel" title="<?php echo $letter; ?>">
+ <div class="wrapper">
+ <h3><?php echo $letter; ?></h3>
+
+<?php
+
+ if (isset($users[$letter])) {
+ ksort($users[$letter]);
+?>
+
+<table id="notificationstable" cellspacing="0" cellpadding="4" border="1" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0)
+ echo "<td class=\"spacercolumn\">&nbsp;</td>";
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+ </tr>
+
+<?php
+
+ if (is_array($users[$letter]) && sizeof($users[$letter]) > 0)
+ foreach($users[$letter] as $friend) {
+ if ($friend instanceof ElggUser ) {
+
+ if (!in_array($letter,$activeletters))
+ $activeletters[] = $letter;
+
+ $method = array();
+ $fields = '';
+ $i = 0;
+
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if (in_array($friend->guid,$subs[$method])) {
+ $checked[$method] = 'checked="checked"';
+ } else {
+ $checked[$method] = '';
+ }
+ if ($i > 0) $fields .= "<td class=\"spacercolumn\">&nbsp;</td>";
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}{$friend->guid}" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}{$friend->guid}');">
+ <input type="checkbox" name="{$method}subscriptions[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}{$friend->guid}');" value="{$friend->guid}" {$checked[$method]} /></a></td>
+END;
+ $i++;
+ }
+?>
+
+ <tr>
+ <td class="namefield"><a href="<?php echo $friend->getURL(); ?>">
+<?php
+ echo elgg_view("profile/icon",array('entity' => $friend, 'size' => 'tiny', 'override' => true));
+?>
+ </a><p class="namefieldlink"><a href="<?php echo $friend->getURL(); ?>"><?php echo $friend->name ?></p></td>
+
+<?php echo $fields; ?>
+
+ <td>&nbsp;</td>
+ </tr>
+
+
+<?php
+ }
+ }
+
+?>
+</table>
+
+<?php
+ }
+
+?>
+
+ </div>
+ </div>
+<?php
+ $letpos++;
+ if ($letpos == strlen($chararray)) break;
+ if (is_callable('mb_substr'))
+ $letter = mb_substr($chararray,$letpos,1);
+ else
+ $letter = substr($chararray,$letpos,1);
+ }
+
+?>
+ </div>
+ </div>
+ </div>
+
+<?php
+ } else {
+ echo $vars['replacement'];
+ }
+ if (!$callback) {
+
+?>
+
+ </div>
+</div>
+
+
+<?php
+
+ }
+
+?>
+<?php
+ if (!isset($vars['replacement'])) {
+?>
+
+<script type="text/javascript">
+ // initialise picker
+ $("div#friendsPicker<?php echo $friendspicker; ?>").friendsPicker(<?php echo $friendspicker; ?>);
+</script>
+<script>
+ $(document).ready(function () {
+ // manually add class to corresponding tab for panels that have content
+<?php
+ if (sizeof($activeletters) > 0)
+ $chararray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ foreach($activeletters as $letter) {
+ $tab = strpos($chararray, $letter) + 1;
+?>
+ $("div#friendsPickerNavigation<?php echo $friendspicker; ?> li.tab<?php echo $tab; ?> a").addClass("tabHasContent");
+<?php
+ }
+
+?>
+ });
+</script>
+
+<?php
+
+ }
+
+?>
+
+
+
+<div class="clearfloat"></div>
+<div class="friendspicker_savebuttons">
+ <input type="submit" value="<?php echo elgg_echo('save'); ?>" />
+<br /></div>
+
+
+ \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/groupsform.php b/mod/notifications/views/default/notifications/subscriptions/groupsform.php
new file mode 100644
index 000000000..cf7f44906
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/groupsform.php
@@ -0,0 +1,99 @@
+<?php
+
+ global $NOTIFICATION_HANDLERS;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subsbig[$method] = elgg_get_entities_from_relationship(array('relationship' => 'notify' . $method, 'relationship_guid' => $vars['user']->guid, 'types' => 'group', 'limit' => 99999));
+ $tmparray = array();
+ if ($subsbig[$method]) {
+ foreach($subsbig[$method] as $tmpent) {
+ $tmparray[] = $tmpent->guid;
+ }
+ }
+ $subsbig[$method] = $tmparray;
+ }
+
+?>
+<?php echo elgg_view_title(elgg_echo('notifications:subscriptions:changesettings:groups')); ?>
+<div class="contentWrapper">
+ <div class="notification_methods">
+
+ <?php
+ echo elgg_view('notifications/subscriptions/jsfuncs',$vars);
+ ?>
+
+ <p>
+ <?php
+
+ echo elgg_echo('notifications:subscriptions:groups:description');
+
+ ?>
+ </p>
+<?php
+
+ if (isset($vars['groups']) && !empty($vars['groups'])) {
+
+?>
+<table id="notificationstable" cellspacing="0" cellpadding="4" border="1" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+ global $NOTIFICATION_HANDLERS;
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0)
+ echo "<td class=\"spacercolumn\">&nbsp;</td>";
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+ foreach($vars['groups'] as $group) {
+
+ $fields = '';
+ $i = 0;
+
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if (in_array($group->guid,$subsbig[$method])) {
+ $checked[$method] = 'checked="checked"';
+ } else {
+ $checked[$method] = '';
+ }
+ if ($i > 0) $fields .= "<td class=\"spacercolumn\">&nbsp;</td>";
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}{$group->guid}" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}{$group->guid}');">
+ <input type="checkbox" name="{$method}subscriptions[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}{$group->guid}');" value="{$group->guid}" {$checked[$method]} /></a></td>
+END;
+ $i++;
+ }
+
+?>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo $group->name; ?>
+ </p>
+ </td>
+<?php
+ echo $fields;
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+
+
+ }
+?>
+</table>
+<?php
+ }
+
+?>
+
+ <input type="submit" value="<?php echo elgg_echo('save'); ?>" />
+ </div>
+</div> \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/jsfuncs.php b/mod/notifications/views/default/notifications/subscriptions/jsfuncs.php
new file mode 100644
index 000000000..da1598dae
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/jsfuncs.php
@@ -0,0 +1,54 @@
+<?php
+
+ global $NOTIFICATION_HANDLERS;
+
+?>
+
+<script type="text/javascript">
+
+$(document).ready(function () {
+<?php
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+?>
+ $('input[type=checkbox]:checked').parent("a.<?php echo $method; ?>toggleOff").each(function(){
+ $(this).removeClass('<?php echo $method; ?>toggleOff').addClass('<?php echo $method; ?>toggleOn');
+ });
+
+<?php
+ }
+?>
+
+});
+
+ clickflag = 0;
+
+<?php
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+?>
+function adjust<?php echo $method; ?>(linkId) {
+ var obj = $(this).prev("a");
+
+ if (obj.className == "<?php echo $method; ?>toggleOff") {
+ obj.className = "<?php echo $method; ?>toggleOn";
+ } else {
+ obj.className = "<?php echo $method; ?>toggleOff";
+ }
+ return false;
+}
+function adjust<?php echo $method; ?>_alt(linkId) {
+ var obj = document.getElementById(linkId);
+
+ if (obj.className == "<?php echo $method; ?>toggleOff") {
+ obj.className = "<?php echo $method; ?>toggleOn";
+ $('#' + linkId).children("input[type='checkbox']").attr('checked', true);
+ } else {
+ obj.className = "<?php echo $method; ?>toggleOff";
+ $('#' + linkId).children("input[type='checkbox']").attr('checked', false);
+ }
+ return false;
+}
+<?php
+ }
+?>
+
+</script> \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/personal.php b/mod/notifications/views/default/notifications/subscriptions/personal.php
new file mode 100644
index 000000000..6779fde73
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/personal.php
@@ -0,0 +1,63 @@
+<?php
+
+ global $NOTIFICATION_HANDLERS;
+
+?>
+<div class="notification_personal">
+<div class="notification_methods">
+ <h3>
+ <?php echo elgg_echo('notifications:subscriptions:personal:title'); ?>
+ </h3>
+</div>
+<table id="notificationstable" cellspacing="0" cellpadding="4" border="1" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0)
+ echo "<td class=\"spacercolumn\">&nbsp;</td>";
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo elgg_echo('notifications:subscriptions:personal:description') ?>
+ </p>
+
+ </td>
+
+<?php
+
+ $fields = '';
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($notification_settings = get_user_notification_settings($vars['user']->guid)) {
+ if ($notification_settings->$method) {
+ $personalchecked[$method] = 'checked="checked"';
+ } else {
+ $personalchecked[$method] = '';
+ }
+ }
+ if ($i > 0) $fields .= "<td class=\"spacercolumn\">&nbsp;</td>";
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}personal" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}personal');">
+ <input type="checkbox" name="{$method}personal" id="{$method}checkbox" onclick="adjust{$method}('{$method}personal');" value="1" {$personalchecked[$method]} /></a></td>
+END;
+ $i++;
+ }
+ echo $fields;
+
+?>
+
+ <td>&nbsp;</td>
+ </tr>
+</table>
+</div> \ No newline at end of file