[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 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/>. 17 18 /** 19 * Subscribe to or unsubscribe from a forum or manage forum subscription mode 20 * 21 * This script can be used by either individual users to subscribe to or 22 * unsubscribe from a forum (no 'mode' param provided), or by forum managers 23 * to control the subscription mode (by 'mode' param). 24 * This script can be called from a link in email so the sesskey is not 25 * required parameter. However, if sesskey is missing, the user has to go 26 * through a confirmation page that redirects the user back with the 27 * sesskey. 28 * 29 * @package mod_forum 30 * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} 31 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 32 */ 33 34 require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); 35 require_once($CFG->dirroot.'/mod/forum/lib.php'); 36 37 $id = required_param('id', PARAM_INT); // The forum to set subscription on. 38 $mode = optional_param('mode', null, PARAM_INT); // The forum's subscription mode. 39 $user = optional_param('user', 0, PARAM_INT); // The userid of the user to subscribe, defaults to $USER. 40 $discussionid = optional_param('d', null, PARAM_INT); // The discussionid to subscribe. 41 $sesskey = optional_param('sesskey', null, PARAM_RAW); 42 $returnurl = optional_param('returnurl', null, PARAM_RAW); 43 44 $url = new moodle_url('/mod/forum/subscribe.php', array('id'=>$id)); 45 if (!is_null($mode)) { 46 $url->param('mode', $mode); 47 } 48 if ($user !== 0) { 49 $url->param('user', $user); 50 } 51 if (!is_null($sesskey)) { 52 $url->param('sesskey', $sesskey); 53 } 54 $PAGE->set_url($url); 55 56 $forum = $DB->get_record('forum', array('id' => $id), '*', MUST_EXIST); 57 $course = $DB->get_record('course', array('id' => $forum->course), '*', MUST_EXIST); 58 $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id, false, MUST_EXIST); 59 $context = context_module::instance($cm->id); 60 61 if ($user) { 62 require_sesskey(); 63 if (!has_capability('mod/forum:managesubscriptions', $context)) { 64 print_error('nopermissiontosubscribe', 'forum'); 65 } 66 $user = $DB->get_record('user', array('id' => $user), '*', MUST_EXIST); 67 } else { 68 $user = $USER; 69 } 70 71 if (isset($cm->groupmode) && empty($course->groupmodeforce)) { 72 $groupmode = $cm->groupmode; 73 } else { 74 $groupmode = $course->groupmode; 75 } 76 77 $issubscribed = \mod_forum\subscriptions::is_subscribed($user->id, $forum, $discussionid, $cm); 78 79 // For a user to subscribe when a groupmode is set, they must have access to at least one group. 80 if ($groupmode && !$issubscribed && !has_capability('moodle/site:accessallgroups')) { 81 if (!groups_get_all_groups($course->id, $USER->id)) { 82 print_error('cannotsubscribe', 'forum'); 83 } 84 } 85 86 require_login($course, false, $cm); 87 88 if (is_null($mode) and !is_enrolled($context, $USER, '', true)) { // Guests and visitors can't subscribe - only enrolled 89 $PAGE->set_title($course->shortname); 90 $PAGE->set_heading($course->fullname); 91 if (isguestuser()) { 92 echo $OUTPUT->header(); 93 echo $OUTPUT->confirm(get_string('subscribeenrolledonly', 'forum').'<br /><br />'.get_string('liketologin'), 94 get_login_url(), new moodle_url('/mod/forum/view.php', array('f'=>$id))); 95 echo $OUTPUT->footer(); 96 exit; 97 } else { 98 // there should not be any links leading to this place, just redirect 99 redirect(new moodle_url('/mod/forum/view.php', array('f'=>$id)), get_string('subscribeenrolledonly', 'forum')); 100 } 101 } 102 103 $returnto = optional_param('backtoindex',0,PARAM_INT) 104 ? "index.php?id=".$course->id 105 : "view.php?f=$id"; 106 107 if ($returnurl) { 108 $returnto = $returnurl; 109 } 110 111 if (!is_null($mode) and has_capability('mod/forum:managesubscriptions', $context)) { 112 require_sesskey(); 113 switch ($mode) { 114 case FORUM_CHOOSESUBSCRIBE : // 0 115 \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_CHOOSESUBSCRIBE); 116 redirect($returnto, get_string("everyonecannowchoose", "forum"), 1); 117 break; 118 case FORUM_FORCESUBSCRIBE : // 1 119 \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_FORCESUBSCRIBE); 120 redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); 121 break; 122 case FORUM_INITIALSUBSCRIBE : // 2 123 if ($forum->forcesubscribe <> FORUM_INITIALSUBSCRIBE) { 124 $users = \mod_forum\subscriptions::get_potential_subscribers($context, 0, 'u.id, u.email', ''); 125 foreach ($users as $user) { 126 \mod_forum\subscriptions::subscribe_user($user->id, $forum, $context); 127 } 128 } 129 \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_INITIALSUBSCRIBE); 130 redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); 131 break; 132 case FORUM_DISALLOWSUBSCRIBE : // 3 133 \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_DISALLOWSUBSCRIBE); 134 redirect($returnto, get_string("noonecansubscribenow", "forum"), 1); 135 break; 136 default: 137 print_error(get_string('invalidforcesubscribe', 'forum')); 138 } 139 } 140 141 if (\mod_forum\subscriptions::is_forcesubscribed($forum)) { 142 redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); 143 } 144 145 $info = new stdClass(); 146 $info->name = fullname($user); 147 $info->forum = format_string($forum->name); 148 149 if ($issubscribed) { 150 if (is_null($sesskey)) { // we came here via link in email 151 $PAGE->set_title($course->shortname); 152 $PAGE->set_heading($course->fullname); 153 echo $OUTPUT->header(); 154 echo $OUTPUT->confirm(get_string('confirmunsubscribe', 'forum', format_string($forum->name)), 155 new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/forum/view.php', array('f' => $id))); 156 echo $OUTPUT->footer(); 157 exit; 158 } 159 require_sesskey(); 160 if ($discussionid === null) { 161 if (\mod_forum\subscriptions::unsubscribe_user($user->id, $forum, $context, true)) { 162 redirect($returnto, get_string("nownotsubscribed", "forum", $info), 1); 163 } else { 164 print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); 165 } 166 } else { 167 $discussion = $DB->get_record('forum_discussions', array('id' => $discussionid)); 168 if (\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion, $context)) { 169 $info->discussion = $discussion->name; 170 redirect($returnto, get_string("discussionnownotsubscribed", "forum", $info), 1); 171 } else { 172 print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); 173 } 174 } 175 176 } else { // subscribe 177 if (\mod_forum\subscriptions::subscription_disabled($forum) && !has_capability('mod/forum:managesubscriptions', $context)) { 178 print_error('disallowsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); 179 } 180 if (!has_capability('mod/forum:viewdiscussion', $context)) { 181 print_error('noviewdiscussionspermission', 'forum', $_SERVER["HTTP_REFERER"]); 182 } 183 if (is_null($sesskey)) { // we came here via link in email 184 $PAGE->set_title($course->shortname); 185 $PAGE->set_heading($course->fullname); 186 echo $OUTPUT->header(); 187 echo $OUTPUT->confirm(get_string('confirmsubscribe', 'forum', format_string($forum->name)), 188 new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/forum/view.php', array('f' => $id))); 189 echo $OUTPUT->footer(); 190 exit; 191 } 192 require_sesskey(); 193 if ($discussionid == null) { 194 \mod_forum\subscriptions::subscribe_user($user->id, $forum, $context, true); 195 redirect($returnto, get_string("nowsubscribed", "forum", $info), 1); 196 } else { 197 $discussion = $DB->get_record('forum_discussions', array('id' => $discussionid)); 198 $info->discussion = $discussion->name; 199 \mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion, $context); 200 redirect($returnto, get_string("discussionnowsubscribed", "forum", $info), 1); 201 } 202 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |