|
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 00024 require_once('../../config.php'); 00025 require_once('lib.php'); 00026 require_once($CFG->libdir.'/completionlib.php'); 00027 00028 $id = optional_param('id', 0, PARAM_INT); // Course Module ID 00029 $f = optional_param('f', 0, PARAM_INT); // Forum ID 00030 $mode = optional_param('mode', 0, PARAM_INT); // Display mode (for single forum) 00031 $showall = optional_param('showall', '', PARAM_INT); // show all discussions on one page 00032 $changegroup = optional_param('group', -1, PARAM_INT); // choose the current group 00033 $page = optional_param('page', 0, PARAM_INT); // which page to show 00034 $search = optional_param('search', '', PARAM_CLEAN);// search string 00035 00036 $params = array(); 00037 if ($id) { 00038 $params['id'] = $id; 00039 } else { 00040 $params['f'] = $f; 00041 } 00042 if ($page) { 00043 $params['page'] = $page; 00044 } 00045 if ($search) { 00046 $params['search'] = $search; 00047 } 00048 $PAGE->set_url('/mod/forum/view.php', $params); 00049 00050 if ($id) { 00051 if (! $cm = get_coursemodule_from_id('forum', $id)) { 00052 print_error('invalidcoursemodule'); 00053 } 00054 if (! $course = $DB->get_record("course", array("id" => $cm->course))) { 00055 print_error('coursemisconf'); 00056 } 00057 if (! $forum = $DB->get_record("forum", array("id" => $cm->instance))) { 00058 print_error('invalidforumid', 'forum'); 00059 } 00060 if ($forum->type == 'single') { 00061 $PAGE->set_pagetype('mod-forum-discuss'); 00062 } 00063 // move require_course_login here to use forced language for course 00064 // fix for MDL-6926 00065 require_course_login($course, true, $cm); 00066 $strforums = get_string("modulenameplural", "forum"); 00067 $strforum = get_string("modulename", "forum"); 00068 } else if ($f) { 00069 00070 if (! $forum = $DB->get_record("forum", array("id" => $f))) { 00071 print_error('invalidforumid', 'forum'); 00072 } 00073 if (! $course = $DB->get_record("course", array("id" => $forum->course))) { 00074 print_error('coursemisconf'); 00075 } 00076 00077 if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { 00078 print_error('missingparameter'); 00079 } 00080 // move require_course_login here to use forced language for course 00081 // fix for MDL-6926 00082 require_course_login($course, true, $cm); 00083 $strforums = get_string("modulenameplural", "forum"); 00084 $strforum = get_string("modulename", "forum"); 00085 } else { 00086 print_error('missingparameter'); 00087 } 00088 00089 if (!$PAGE->button) { 00090 $PAGE->set_button(forum_search_form($course, $search)); 00091 } 00092 00093 $context = get_context_instance(CONTEXT_MODULE, $cm->id); 00094 $PAGE->set_context($context); 00095 00096 if (!empty($CFG->enablerssfeeds) && !empty($CFG->forum_enablerssfeeds) && $forum->rsstype && $forum->rssarticles) { 00097 require_once("$CFG->libdir/rsslib.php"); 00098 00099 $rsstitle = format_string($course->shortname, true, array('context' => get_context_instance(CONTEXT_COURSE, $course->id))) . ': %fullname%'; 00100 rss_add_http_header($context, 'mod_forum', $forum, $rsstitle); 00101 } 00102 00103 // Mark viewed if required 00104 $completion = new completion_info($course); 00105 $completion->set_module_viewed($cm); 00106 00108 00109 $PAGE->set_title(format_string($forum->name)); 00110 $PAGE->add_body_class('forumtype-'.$forum->type); 00111 $PAGE->set_heading(format_string($course->fullname)); 00112 00113 echo $OUTPUT->header(); 00114 00116 if (empty($cm->visible) and !has_capability('moodle/course:viewhiddenactivities', $context)) { 00117 notice(get_string("activityiscurrentlyhidden")); 00118 } 00119 00120 if (!has_capability('mod/forum:viewdiscussion', $context)) { 00121 notice(get_string('noviewdiscussionspermission', 'forum')); 00122 } 00123 00125 groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/forum/view.php?id=' . $cm->id); 00126 $currentgroup = groups_get_activity_group($cm); 00127 $groupmode = groups_get_activity_groupmode($cm); 00128 00130 if ($cm->id) { 00131 add_to_log($course->id, "forum", "view forum", "view.php?id=$cm->id", "$forum->id", $cm->id); 00132 } else { 00133 add_to_log($course->id, "forum", "view forum", "view.php?f=$forum->id", "$forum->id"); 00134 } 00135 00136 $SESSION->fromdiscussion = $FULLME; // Return here if we post or set subscription etc 00137 00138 00140 00141 // If it's a simple single discussion forum, we need to print the display 00142 // mode control. 00143 if ($forum->type == 'single') { 00144 $discussion = NULL; 00145 $discussions = $DB->get_records('forum_discussions', array('forum'=>$forum->id), 'timemodified ASC'); 00146 if (!empty($discussions)) { 00147 $discussion = array_pop($discussions); 00148 } 00149 if ($discussion) { 00150 if ($mode) { 00151 set_user_preference("forum_displaymode", $mode); 00152 } 00153 $displaymode = get_user_preferences("forum_displaymode", $CFG->forum_displaymode); 00154 forum_print_mode_form($forum->id, $displaymode, $forum->type); 00155 } 00156 } 00157 00158 if (!empty($forum->blockafter) && !empty($forum->blockperiod)) { 00159 $a->blockafter = $forum->blockafter; 00160 $a->blockperiod = get_string('secondstotime'.$forum->blockperiod); 00161 echo $OUTPUT->notification(get_string('thisforumisthrottled','forum',$a)); 00162 } 00163 00164 if ($forum->type == 'qanda' && !has_capability('moodle/course:manageactivities', $context)) { 00165 echo $OUTPUT->notification(get_string('qandanotify','forum')); 00166 } 00167 00168 switch ($forum->type) { 00169 case 'single': 00170 if (!empty($discussions) && count($discussions) > 1) { 00171 echo $OUTPUT->notification(get_string('warnformorepost', 'forum')); 00172 } 00173 if (! $post = forum_get_post_full($discussion->firstpost)) { 00174 print_error('cannotfindfirstpost', 'forum'); 00175 } 00176 if ($mode) { 00177 set_user_preference("forum_displaymode", $mode); 00178 } 00179 00180 $canreply = forum_user_can_post($forum, $discussion, $USER, $cm, $course, $context); 00181 $canrate = has_capability('mod/forum:rate', $context); 00182 $displaymode = get_user_preferences("forum_displaymode", $CFG->forum_displaymode); 00183 00184 echo ' '; // this should fix the floating in FF 00185 forum_print_discussion($course, $cm, $forum, $discussion, $post, $displaymode, $canreply, $canrate); 00186 break; 00187 00188 case 'eachuser': 00189 if (!empty($forum->intro)) { 00190 echo $OUTPUT->box(format_module_intro('forum', $forum, $cm->id), 'generalbox', 'intro'); 00191 } 00192 echo '<p class="mdl-align">'; 00193 if (forum_user_can_post_discussion($forum, null, -1, $cm)) { 00194 print_string("allowsdiscussions", "forum"); 00195 } else { 00196 echo ' '; 00197 } 00198 echo '</p>'; 00199 if (!empty($showall)) { 00200 forum_print_latest_discussions($course, $forum, 0, 'header', '', -1, -1, -1, 0, $cm); 00201 } else { 00202 forum_print_latest_discussions($course, $forum, -1, 'header', '', -1, -1, $page, $CFG->forum_manydiscussions, $cm); 00203 } 00204 break; 00205 00206 case 'teacher': 00207 if (!empty($showall)) { 00208 forum_print_latest_discussions($course, $forum, 0, 'header', '', -1, -1, -1, 0, $cm); 00209 } else { 00210 forum_print_latest_discussions($course, $forum, -1, 'header', '', -1, -1, $page, $CFG->forum_manydiscussions, $cm); 00211 } 00212 break; 00213 00214 case 'blog': 00215 if (!empty($forum->intro)) { 00216 echo $OUTPUT->box(format_module_intro('forum', $forum, $cm->id), 'generalbox', 'intro'); 00217 } 00218 echo '<br />'; 00219 if (!empty($showall)) { 00220 forum_print_latest_discussions($course, $forum, 0, 'plain', '', -1, -1, -1, 0, $cm); 00221 } else { 00222 forum_print_latest_discussions($course, $forum, -1, 'plain', '', -1, -1, $page, $CFG->forum_manydiscussions, $cm); 00223 } 00224 break; 00225 00226 default: 00227 if (!empty($forum->intro)) { 00228 echo $OUTPUT->box(format_module_intro('forum', $forum, $cm->id), 'generalbox', 'intro'); 00229 } 00230 echo '<br />'; 00231 if (!empty($showall)) { 00232 forum_print_latest_discussions($course, $forum, 0, 'header', '', -1, -1, -1, 0, $cm); 00233 } else { 00234 forum_print_latest_discussions($course, $forum, -1, 'header', '', -1, -1, $page, $CFG->forum_manydiscussions, $cm); 00235 } 00236 00237 00238 break; 00239 } 00240 00241 echo $OUTPUT->footer($course); 00242 00243