MDL-40062 mod_forum: subscription events
[moodle.git] / mod / forum / subscribers.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * This file is used to display and organise forum subscribers
20  *
21  * @package mod-forum
22  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
23  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 require_once("../../config.php");
27 require_once("lib.php");
29 $id    = required_param('id',PARAM_INT);           // forum
30 $group = optional_param('group',0,PARAM_INT);      // change of group
31 $edit  = optional_param('edit',-1,PARAM_BOOL);     // Turn editing on and off
33 $url = new moodle_url('/mod/forum/subscribers.php', array('id'=>$id));
34 if ($group !== 0) {
35     $url->param('group', $group);
36 }
37 if ($edit !== 0) {
38     $url->param('edit', $edit);
39 }
40 $PAGE->set_url($url);
42 $forum = $DB->get_record('forum', array('id'=>$id), '*', MUST_EXIST);
43 $course = $DB->get_record('course', array('id'=>$forum->course), '*', MUST_EXIST);
44 if (! $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) {
45     $cm->id = 0;
46 }
48 require_login($course, false, $cm);
50 $context = context_module::instance($cm->id);
51 if (!has_capability('mod/forum:viewsubscribers', $context)) {
52     print_error('nopermissiontosubscribe', 'forum');
53 }
55 unset($SESSION->fromdiscussion);
57 $params = array(
58     'context' => $context,
59     'other' => array('forumid' => $forum->id),
60 );
61 $event = \mod_forum\event\subscribers_viewed::create($params);
62 $event->trigger();
64 $forumoutput = $PAGE->get_renderer('mod_forum');
65 $currentgroup = groups_get_activity_group($cm);
66 $options = array('forumid'=>$forum->id, 'currentgroup'=>$currentgroup, 'context'=>$context);
67 $existingselector = new forum_existing_subscriber_selector('existingsubscribers', $options);
68 $subscriberselector = new forum_potential_subscriber_selector('potentialsubscribers', $options);
69 $subscriberselector->set_existing_subscribers($existingselector->find_users(''));
71 if (data_submitted()) {
72     require_sesskey();
73     $subscribe = (bool)optional_param('subscribe', false, PARAM_RAW);
74     $unsubscribe = (bool)optional_param('unsubscribe', false, PARAM_RAW);
75     /** It has to be one or the other, not both or neither */
76     if (!($subscribe xor $unsubscribe)) {
77         print_error('invalidaction');
78     }
79     if ($subscribe) {
80         $users = $subscriberselector->get_selected_users();
81         foreach ($users as $user) {
82             if (!forum_subscribe($user->id, $id)) {
83                 print_error('cannotaddsubscriber', 'forum', '', $user->id);
84             }
85         }
86     } else if ($unsubscribe) {
87         $users = $existingselector->get_selected_users();
88         foreach ($users as $user) {
89             if (!forum_unsubscribe($user->id, $id)) {
90                 print_error('cannotremovesubscriber', 'forum', '', $user->id);
91             }
92         }
93     }
94     $subscriberselector->invalidate_selected_users();
95     $existingselector->invalidate_selected_users();
96     $subscriberselector->set_existing_subscribers($existingselector->find_users(''));
97 }
99 $strsubscribers = get_string("subscribers", "forum");
100 $PAGE->navbar->add($strsubscribers);
101 $PAGE->set_title($strsubscribers);
102 $PAGE->set_heading($COURSE->fullname);
103 if (has_capability('mod/forum:managesubscriptions', $context)) {
104     $PAGE->set_button(forum_update_subscriptions_button($course->id, $id));
105     if ($edit != -1) {
106         $USER->subscriptionsediting = $edit;
107     }
108 } else {
109     unset($USER->subscriptionsediting);
111 echo $OUTPUT->header();
112 echo $OUTPUT->heading(get_string('forum', 'forum').' '.$strsubscribers);
113 if (empty($USER->subscriptionsediting)) {
114     echo $forumoutput->subscriber_overview(forum_subscribed_users($course, $forum, $currentgroup, $context), $forum, $course);
115 } else if (forum_is_forcesubscribed($forum)) {
116     $subscriberselector->set_force_subscribed(true);
117     echo $forumoutput->subscribed_users($subscriberselector);
118 } else {
119     echo $forumoutput->subscriber_selection_form($existingselector, $subscriberselector);
121 echo $OUTPUT->footer();