|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00035 require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); 00036 require_once($CFG->dirroot.'/mod/forum/lib.php'); 00037 00038 $id = required_param('id', PARAM_INT); // the forum to subscribe or unsubscribe to 00039 $mode = optional_param('mode', null, PARAM_INT); // the forum's subscription mode 00040 $user = optional_param('user', 0, PARAM_INT); // userid of the user to subscribe, defaults to $USER 00041 $sesskey = optional_param('sesskey', null, PARAM_RAW); // sesskey 00042 00043 $url = new moodle_url('/mod/forum/subscribe.php', array('id'=>$id)); 00044 if (!is_null($mode)) { 00045 $url->param('mode', $mode); 00046 } 00047 if ($user !== 0) { 00048 $url->param('user', $user); 00049 } 00050 if (!is_null($sesskey)) { 00051 $url->param('sesskey', $sesskey); 00052 } 00053 $PAGE->set_url($url); 00054 00055 $forum = $DB->get_record('forum', array('id' => $id), '*', MUST_EXIST); 00056 $course = $DB->get_record('course', array('id' => $forum->course), '*', MUST_EXIST); 00057 $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id, false, MUST_EXIST); 00058 $context = get_context_instance(CONTEXT_MODULE, $cm->id); 00059 00060 if ($user) { 00061 require_sesskey(); 00062 if (!has_capability('mod/forum:managesubscriptions', $context)) { 00063 print_error('nopermissiontosubscribe', 'forum'); 00064 } 00065 $user = $DB->get_record('user', array('id' => $user), MUST_EXIST); 00066 } else { 00067 $user = $USER; 00068 } 00069 00070 if (isset($cm->groupmode) && empty($course->groupmodeforce)) { 00071 $groupmode = $cm->groupmode; 00072 } else { 00073 $groupmode = $course->groupmode; 00074 } 00075 if ($groupmode && !forum_is_subscribed($user->id, $forum) && !has_capability('moodle/site:accessallgroups', $context)) { 00076 if (!groups_get_all_groups($course->id, $USER->id)) { 00077 print_error('cannotsubscribe', 'forum'); 00078 } 00079 } 00080 00081 require_login($course->id, false, $cm); 00082 00083 if (is_null($mode) and !is_enrolled($context, $USER, '', true)) { // Guests and visitors can't subscribe - only enrolled 00084 $PAGE->set_title($course->shortname); 00085 $PAGE->set_heading($course->fullname); 00086 if (isguestuser()) { 00087 echo $OUTPUT->header(); 00088 echo $OUTPUT->confirm(get_string('subscribeenrolledonly', 'forum').'<br /><br />'.get_string('liketologin'), 00089 get_login_url(), new moodle_url('/mod/forum/view.php', array('f'=>$id))); 00090 echo $OUTPUT->footer(); 00091 exit; 00092 } else { 00093 // there should not be any links leading to this place, just redirect 00094 redirect(new moodle_url('/mod/forum/view.php', array('f'=>$id)), get_string('subscribeenrolledonly', 'forum')); 00095 } 00096 } 00097 00098 $returnto = optional_param('backtoindex',0,PARAM_INT) 00099 ? "index.php?id=".$course->id 00100 : "view.php?f=$id"; 00101 00102 if (!is_null($mode) and has_capability('mod/forum:managesubscriptions', $context)) { 00103 require_sesskey(); 00104 switch ($mode) { 00105 case FORUM_CHOOSESUBSCRIBE : // 0 00106 forum_forcesubscribe($forum->id, 0); 00107 redirect($returnto, get_string("everyonecannowchoose", "forum"), 1); 00108 break; 00109 case FORUM_FORCESUBSCRIBE : // 1 00110 forum_forcesubscribe($forum->id, 1); 00111 redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); 00112 break; 00113 case FORUM_INITIALSUBSCRIBE : // 2 00114 forum_forcesubscribe($forum->id, 2); 00115 redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); 00116 break; 00117 case FORUM_DISALLOWSUBSCRIBE : // 3 00118 forum_forcesubscribe($forum->id, 3); 00119 redirect($returnto, get_string("noonecansubscribenow", "forum"), 1); 00120 break; 00121 default: 00122 print_error(get_string('invalidforcesubscribe', 'forum')); 00123 } 00124 } 00125 00126 if (forum_is_forcesubscribed($forum)) { 00127 redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); 00128 } 00129 00130 $info = new stdClass(); 00131 $info->name = fullname($user); 00132 $info->forum = format_string($forum->name); 00133 00134 if (forum_is_subscribed($user->id, $forum->id)) { 00135 if (is_null($sesskey)) { // we came here via link in email 00136 $PAGE->set_title($course->shortname); 00137 $PAGE->set_heading($course->fullname); 00138 echo $OUTPUT->header(); 00139 echo $OUTPUT->confirm(get_string('confirmunsubscribe', 'forum', format_string($forum->name)), 00140 new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/forum/view.php', array('f' => $id))); 00141 echo $OUTPUT->footer(); 00142 exit; 00143 } 00144 require_sesskey(); 00145 if (forum_unsubscribe($user->id, $forum->id)) { 00146 add_to_log($course->id, "forum", "unsubscribe", "view.php?f=$forum->id", $forum->id, $cm->id); 00147 redirect($returnto, get_string("nownotsubscribed", "forum", $info), 1); 00148 } else { 00149 print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); 00150 } 00151 00152 } else { // subscribe 00153 if ($forum->forcesubscribe == FORUM_DISALLOWSUBSCRIBE && 00154 !has_capability('mod/forum:managesubscriptions', $context)) { 00155 print_error('disallowsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); 00156 } 00157 if (!has_capability('mod/forum:viewdiscussion', $context)) { 00158 print_error('noviewdiscussionspermission', 'forum', $_SERVER["HTTP_REFERER"]); 00159 } 00160 if (is_null($sesskey)) { // we came here via link in email 00161 $PAGE->set_title($course->shortname); 00162 $PAGE->set_heading($course->fullname); 00163 echo $OUTPUT->header(); 00164 echo $OUTPUT->confirm(get_string('confirmsubscribe', 'forum', format_string($forum->name)), 00165 new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/forum/view.php', array('f' => $id))); 00166 echo $OUTPUT->footer(); 00167 exit; 00168 } 00169 require_sesskey(); 00170 forum_subscribe($user->id, $forum->id); 00171 add_to_log($course->id, "forum", "subscribe", "view.php?f=$forum->id", $forum->id, $cm->id); 00172 redirect($returnto, get_string("nowsubscribed", "forum", $info), 1); 00173 }