From 6673d7bdf6ca1afc98a425e2f261fda50f0848bf Mon Sep 17 00:00:00 2001 From: moodler Date: Mon, 26 Apr 2004 08:55:00 +0000 Subject: [PATCH] Subscriber editing is group-aware. Groups can be subscribed or unsubscribed with one click --- lang/en/forum.php | 2 ++ mod/forum/lib.php | 18 ++++++++-- mod/forum/subscribers.php | 71 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 85 insertions(+), 6 deletions(-) diff --git a/lang/en/forum.php b/lang/en/forum.php index ee3bb85790..c5c83de5d4 100644 --- a/lang/en/forum.php +++ b/lang/en/forum.php @@ -121,7 +121,9 @@ $string['singleforum'] = 'A single simple discussion'; $string['startedby'] = 'Started by'; $string['subject'] = 'Subject'; $string['subscribe'] = 'Subscribe to this forum'; +$string['subscribeall'] = 'Subscribe everyone to this forum'; $string['subscribed'] = 'Subscribed'; +$string['subscribenone'] = 'Unsubscribe everyone from this forum'; $string['subscribers'] = 'Subscribers'; $string['subscribersto'] = 'Subscribers to \'$a\''; $string['subscribestart'] = 'Send me email copies of posts to this forum'; diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 4be3f07ea5..5902995df3 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -913,10 +913,18 @@ function forum_get_user_discussions($courseid, $userid, $groupid=0) { } -function forum_subscribed_users($course, $forum) { +function forum_subscribed_users($course, $forum, $groupid=0) { /// Returns list of user objects that are subscribed to this forum global $CFG; + if ($groupid) { + $grouptables = ", {$CFG->prefix}groups_members g"; + $groupselect = " AND g.groupid = '$groupid' AND u.id = g.userid"; + } else { + $grouptables = ""; + $groupselect = ""; + } + if ($forum->forcesubscribe) { if ($course->category) { if ($forum->type == "teacher") { @@ -931,10 +939,10 @@ function forum_subscribed_users($course, $forum) { return get_records_sql("SELECT u.id, u.username, u.firstname, u.lastname, u.maildisplay, u.mailformat, u.emailstop, u.email, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.lang FROM {$CFG->prefix}user u, - {$CFG->prefix}forum_subscriptions s + {$CFG->prefix}forum_subscriptions s $grouptables WHERE s.forum = '$forum->id' AND s.userid = u.id - AND u.deleted <> 1 + AND u.deleted <> 1 $groupselect ORDER BY u.email ASC"); } @@ -1924,6 +1932,10 @@ function forum_is_subscribed($userid, $forumid) { function forum_subscribe($userid, $forumid) { /// Adds user to the subscriber list + if (record_exists("forum_subscriptions", "userid", $userid, "forum", $forumid)) { + return true; + } + $sub->userid = $userid; $sub->forum = $forumid; diff --git a/mod/forum/subscribers.php b/mod/forum/subscribers.php index 360f2eaecd..1d3515412e 100644 --- a/mod/forum/subscribers.php +++ b/mod/forum/subscribers.php @@ -3,7 +3,10 @@ require_once("../../config.php"); require_once("lib.php"); - require_variable($id); // forum + require_variable($id); // forum + optional_variable($subscribe, ''); // 'all' or 'none' + optional_variable($unsubscribe, ''); // a single user id + optional_variable($group); // change of group if (! $forum = get_record("forum", "id", $id)) { error("Forum ID is incorrect"); @@ -28,6 +31,8 @@ add_to_log($course->id, "forum", "view subscribers", "subscribers.php?id=$forum->id", $forum->id, $cm->id); $strunsubscribeshort = get_string("unsubscribeshort", "forum"); + $strsubscribeall = get_string("subscribeall", "forum"); + $strsubscribenone = get_string("subscribenone", "forum"); $strsubscribers = get_string("subscribers", "forum"); $strforums = get_string("forums", "forum"); @@ -42,11 +47,71 @@ print_header("$course->shortname: $strsubscribers", "$course->fullname", "$navigation"); - if (! $users = forum_subscribed_users($course, $forum) ) { + +/// Check to see if groups are being used in this forum + if ($groupmode = groupmode($course, $cm)) { // Groups are being used + $currentgroup = setup_and_print_groups($course, $groupmode, "subscribers.php?id=$forum->id"); + } else { + $currentgroup = false; + } + + if ($subscribe == 'all') { + if ($currentgroup) { + $users = get_group_users($currentgroup); + } else { + $users = get_course_users($course->id); + } + if ($users) { + foreach ($users as $user) { + forum_subscribe($user->id, $forum->id); + } + } + } else if ($subscribe == 'none') { + if ($currentgroup) { + if ($users = get_group_users($currentgroup)) { + foreach ($users as $user) { + forum_unsubscribe($user->id, $forum->id); + } + } + } else { + delete_records("forum_subscriptions", "forum", $forum->id); + } + } + + if ($unsubscribe) { + forum_unsubscribe($unsubscribe, $forum->id); + } + + if (! $users = forum_subscribed_users($course, $forum, $currentgroup) ) { + + if (!$forum->forcesubscribe) { + echo '
'; + $options['id'] = $forum->id; + $options['subscribe'] = 'all'; + print_single_button('subscribers.php', $options, $strsubscribeall); + echo '
'; + } + print_heading(get_string("nosubscribers", "forum")); } else { + + if (!$forum->forcesubscribe) { + echo ''; + echo ''; + echo ''; + echo '
'; + $options['id'] = $forum->id; + $options['subscribe'] = 'all'; + print_single_button('subscribers.php', $options, $strsubscribeall); + echo ''; + $options['subscribe'] = 'none'; + print_single_button('subscribers.php', $options, $strsubscribenone); + echo '
'; + } + print_heading(get_string("subscribersto","forum", "'$forum->name'")); + echo ''; foreach ($users as $user) { echo ""; } echo "
"; @@ -56,7 +121,7 @@ echo "cellcontent\">"; echo "$user->email"; echo ""; - echo "id&user=$user->id\">$strunsubscribeshort"; + echo "id&unsubscribe=$user->id\">$strunsubscribeshort"; echo "
"; -- 2.39.5