MDL-16043: manage case when administrator set enrol_remotecoursefield or enrol_remote...
[moodle-linuxchix.git] / mod / forum / index.php
blob400ed8feab3c7b50ae7af6c0ef91b944e9f6538f
1 <?php // $Id$
3 require_once("../../config.php");
4 require_once("lib.php");
5 require_once("$CFG->libdir/rsslib.php");
7 $id = optional_param('id', 0, PARAM_INT); // Course id
8 $subscribe = optional_param('subscribe', null, PARAM_INT); // Subscribe/Unsubscribe all forums
10 if ($id) {
11 if (! $course = get_record('course', 'id', $id)) {
12 error("Course ID is incorrect");
14 } else {
15 if (! $course = get_site()) {
16 error("Could not find a top-level course!");
20 require_course_login($course);
21 $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
24 unset($SESSION->fromdiscussion);
26 add_to_log($course->id, 'forum', 'view forums', "index.php?id=$course->id");
28 $strforums = get_string('forums', 'forum');
29 $strforum = get_string('forum', 'forum');
30 $strdescription = get_string('description');
31 $strdiscussions = get_string('discussions', 'forum');
32 $strsubscribed = get_string('subscribed', 'forum');
33 $strunreadposts = get_string('unreadposts', 'forum');
34 $strtracking = get_string('tracking', 'forum');
35 $strmarkallread = get_string('markallread', 'forum');
36 $strtrackforum = get_string('trackforum', 'forum');
37 $strnotrackforum = get_string('notrackforum', 'forum');
38 $strsubscribe = get_string('subscribe', 'forum');
39 $strunsubscribe = get_string('unsubscribe', 'forum');
40 $stryes = get_string('yes');
41 $strno = get_string('no');
42 $strrss = get_string('rss');
43 $strweek = get_string('week');
44 $strsection = get_string('section');
46 $searchform = forum_search_form($course);
49 // Start of the table for General Forums
51 $generaltable->head = array ($strforum, $strdescription, $strdiscussions);
52 $generaltable->align = array ('left', 'left', 'center');
54 if ($usetracking = forum_tp_can_track_forums()) {
55 $untracked = forum_tp_get_untracked_forums($USER->id, $course->id);
57 $generaltable->head[] = $strunreadposts;
58 $generaltable->align[] = 'center';
60 $generaltable->head[] = $strtracking;
61 $generaltable->align[] = 'center';
64 $subscribed_forums = forum_get_subscribed_forums($course);
66 if ($can_subscribe = (!isguestuser() && has_capability('moodle/course:view', $coursecontext))) {
67 $generaltable->head[] = $strsubscribed;
68 $generaltable->align[] = 'center';
71 if ($show_rss = (($can_subscribe || $course->id == SITEID) &&
72 isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) &&
73 $CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) {
74 $generaltable->head[] = $strrss;
75 $generaltable->align[] = 'center';
79 // Parse and organise all the forums. Most forums are course modules but
80 // some special ones are not. These get placed in the general forums
81 // category with the forums in section 0.
83 $forums = get_records('forum', 'course', $course->id);
85 $generalforums = array();
86 $learningforums = array();
87 $modinfo =& get_fast_modinfo($course);
89 if (!isset($modinfo->instances['forum'])) {
90 $modinfo->instances['forum'] = array();
93 foreach ($modinfo->instances['forum'] as $forumid=>$cm) {
94 if (!$cm->uservisible or !isset($forums[$forumid])) {
95 continue;
98 $forum = $forums[$forumid];
100 if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) {
101 continue; // Shouldn't happen
104 if (!has_capability('mod/forum:viewdiscussion', $context)) {
105 continue;
108 // fill two type array - order in modinfo is the same as in course
109 if ($forum->type == 'news' or $forum->type == 'social') {
110 $generalforums[$forum->id] = $forum;
112 } else if ($course->id == SITEID or empty($cm->sectionnum)) {
113 $generalforums[$forum->id] = $forum;
115 } else {
116 $learningforums[$forum->id] = $forum;
120 /// Do course wide subscribe/unsubscribe
121 if (!is_null($subscribe) and !isguestuser() and !isguest()) {
122 foreach ($modinfo->instances['forum'] as $forumid=>$cm) {
123 $forum = $forums[$forumid];
124 $cansub = false;
125 if (has_capability('mod/forum:viewdiscussion', $cm)) {
126 $cansub = true;
128 if ($cansub && $cm->visible == 0 &&
129 !has_capability('mod/forum:managesubscriptions', $cm))
131 $cansub = false;
133 if (!forum_is_forcesubscribed($forum)) {
134 $subscribed = forum_is_subscribed($USER->id, $forum);
135 if ($subscribe && !$subscribed && $cansub) {
136 forum_subscribe($USER->id, $forumid);
137 } else if (!$subscribe && $subscribed) {
138 forum_unsubscribe($USER->id, $forumid);
142 $returnto = forum_go_back_to("index.php?id=$course->id");
143 if ($subscribe) {
144 add_to_log($course->id, 'forum', 'subscribeall', "index.php?id=$course->id", $course->id);
145 redirect($returnto, get_string('nowallsubscribed', 'forum', format_string($course->shortname)), 1);
146 } else {
147 add_to_log($course->id, 'forum', 'unsubscribeall', "index.php?id=$course->id", $course->id);
148 redirect($returnto, get_string('nowallunsubscribed', 'forum', format_string($course->shortname)), 1);
152 /// First, let's process the general forums and build up a display
154 $introoptions = new object();
155 $introoptions->para = false;
157 if ($generalforums) {
158 foreach ($generalforums as $forum) {
159 $cm = $modinfo->instances['forum'][$forum->id];
160 $context = get_context_instance(CONTEXT_MODULE, $cm->id);
162 $count = forum_count_discussions($forum, $cm, $course);
164 if ($usetracking) {
165 if ($forum->trackingtype == FORUM_TRACKING_OFF) {
166 $unreadlink = '-';
167 $trackedlink = '-';
169 } else {
170 if (isset($untracked[$forum->id])) {
171 $unreadlink = '-';
172 } else if ($unread = forum_tp_count_forum_unread_posts($cm, $course)) {
173 $unreadlink = '<span class="unread"><a href="view.php?f='.$forum->id.'">'.$unread.'</a>';
174 $unreadlink .= '<a title="'.$strmarkallread.'" href="markposts.php?f='.
175 $forum->id.'&amp;mark=read"><img src="'.$CFG->pixpath.'/t/clear.gif" alt="'.$strmarkallread.'" /></a></span>';
176 } else {
177 $unreadlink = '<span class="read">0</span>';
180 if ($forum->trackingtype == FORUM_TRACKING_ON) {
181 $trackedlink = $stryes;
183 } else {
184 $options = array('id'=>$forum->id);
185 if (!isset($untracked[$forum->id])) {
186 $trackedlink = print_single_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $stryes, 'post', '_self', true, $strnotrackforum);
187 } else {
188 $trackedlink = print_single_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $strno, 'post', '_self', true, $strtrackforum);
194 $forum->intro = shorten_text(trim(format_text($forum->intro, FORMAT_HTML, $introoptions)), $CFG->forum_shortpost);
195 $forumname = format_string($forum->name, true);;
197 if ($cm->visible) {
198 $style = '';
199 } else {
200 $style = 'class="dimmed"';
202 $forumlink = "<a href=\"view.php?f=$forum->id\" $style>".format_string($forum->name,true)."</a>";
203 $discussionlink = "<a href=\"view.php?f=$forum->id\" $style>".$count."</a>";
205 $row = array ($forumlink, $forum->intro, $discussionlink);
206 if ($usetracking) {
207 $row[] = $unreadlink;
208 $row[] = $trackedlink; // Tracking.
211 if ($can_subscribe) {
212 if ($forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) {
213 $row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes,
214 'unsubscribed' => $strno, 'forcesubscribed' => $stryes,
215 'cantsubscribe' => '-'), false, false, true, $subscribed_forums);
216 } else {
217 $row[] = '-';
221 //If this forum has RSS activated, calculate it
222 if ($show_rss) {
223 if ($forum->rsstype and $forum->rssarticles) {
224 //Calculate the tolltip text
225 if ($forum->rsstype == 1) {
226 $tooltiptext = get_string('rsssubscriberssdiscussions', 'forum', format_string($forum->name));
227 } else {
228 $tooltiptext = get_string('rsssubscriberssposts', 'forum', format_string($forum->name));
230 //Get html code for RSS link
231 $row[] = rss_get_link($course->id, $USER->id, 'forum', $forum->id, $tooltiptext);
232 } else {
233 $row[] = '&nbsp;';
237 $generaltable->data[] = $row;
242 // Start of the table for Learning Forums
243 $learningtable->head = array ($strforum, $strdescription, $strdiscussions);
244 $learningtable->align = array ('left', 'left', 'center');
246 if ($usetracking) {
247 $learningtable->head[] = $strunreadposts;
248 $learningtable->align[] = 'center';
250 $learningtable->head[] = $strtracking;
251 $learningtable->align[] = 'center';
254 if ($can_subscribe) {
255 $learningtable->head[] = $strsubscribed;
256 $learningtable->align[] = 'center';
259 if ($show_rss = (($can_subscribe || $course->id == SITEID) &&
260 isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) &&
261 $CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) {
262 $learningtable->head[] = $strrss;
263 $learningtable->align[] = 'center';
266 /// Now let's process the learning forums
268 if ($course->id != SITEID) { // Only real courses have learning forums
269 // Add extra field for section number, at the front
270 if ($course->format == 'weeks' or $course->format == 'weekscss') {
271 array_unshift($learningtable->head, $strweek);
272 } else {
273 array_unshift($learningtable->head, $strsection);
275 array_unshift($learningtable->align, 'center');
278 if ($learningforums) {
279 $currentsection = '';
280 foreach ($learningforums as $forum) {
281 $cm = $modinfo->instances['forum'][$forum->id];
282 $context = get_context_instance(CONTEXT_MODULE, $cm->id);
284 $count = forum_count_discussions($forum, $cm, $course);
286 if ($usetracking) {
287 if ($forum->trackingtype == FORUM_TRACKING_OFF) {
288 $unreadlink = '-';
289 $trackedlink = '-';
291 } else {
292 if (isset($untracked[$forum->id])) {
293 $unreadlink = '-';
294 } else if ($unread = forum_tp_count_forum_unread_posts($cm, $course)) {
295 $unreadlink = '<span class="unread"><a href="view.php?f='.$forum->id.'">'.$unread.'</a>';
296 $unreadlink .= '<a title="'.$strmarkallread.'" href="markposts.php?f='.
297 $forum->id.'&amp;mark=read"><img src="'.$CFG->pixpath.'/t/clear.gif" alt="'.$strmarkallread.'" /></a></span>';
298 } else {
299 $unreadlink = '<span class="read">0</span>';
302 if ($forum->trackingtype == FORUM_TRACKING_ON) {
303 $trackedlink = $stryes;
305 } else {
306 $options = array('id'=>$forum->id);
307 if (!isset($untracked[$forum->id])) {
308 $trackedlink = print_single_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $stryes, 'post', '_self', true, $strnotrackforum);
309 } else {
310 $trackedlink = print_single_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $strno, 'post', '_self', true, $strtrackforum);
316 $introoptions->para=false;
317 $forum->intro = shorten_text(trim(format_text($forum->intro, FORMAT_HTML, $introoptions)), $CFG->forum_shortpost);
319 if ($cm->sectionnum != $currentsection) {
320 $printsection = $cm->sectionnum;
321 if ($currentsection) {
322 $learningtable->data[] = 'hr';
324 $currentsection = $cm->sectionnum;
325 } else {
326 $printsection = '';
329 $forumname = format_string($forum->name,true);;
331 if ($cm->visible) {
332 $style = '';
333 } else {
334 $style = 'class="dimmed"';
336 $forumlink = "<a href=\"view.php?f=$forum->id\" $style>".format_string($forum->name,true)."</a>";
337 $discussionlink = "<a href=\"view.php?f=$forum->id\" $style>".$count."</a>";
339 $row = array ($printsection, $forumlink, $forum->intro, $discussionlink);
340 if ($usetracking) {
341 $row[] = $unreadlink;
342 $row[] = $trackedlink; // Tracking.
345 if ($can_subscribe) {
346 if ($forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) {
347 $row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes,
348 'unsubscribed' => $strno, 'forcesubscribed' => $stryes,
349 'cantsubscribe' => '-'), false, false, true, $subscribed_forums);
350 } else {
351 $row[] = '-';
355 //If this forum has RSS activated, calculate it
356 if ($show_rss) {
357 if ($forum->rsstype and $forum->rssarticles) {
358 //Calculate the tolltip text
359 if ($forum->rsstype == 1) {
360 $tooltiptext = get_string('rsssubscriberssdiscussions', 'forum', format_string($forum->name));
361 } else {
362 $tooltiptext = get_string('rsssubscriberssposts', 'forum', format_string($forum->name));
364 //Get html code for RSS link
365 $row[] = rss_get_link($course->id, $USER->id, 'forum', $forum->id, $tooltiptext);
366 } else {
367 $row[] = '&nbsp;';
371 $learningtable->data[] = $row;
377 /// Output the page
378 $navlinks = array();
379 $navlinks[] = array('name' => $strforums, 'link' => '', 'type' => 'activity');
381 print_header("$course->shortname: $strforums", $course->fullname,
382 build_navigation($navlinks),
383 "", "", true, $searchform, navmenu($course));
385 if (!isguest()) {
386 print_box_start('subscription');
387 echo '<span class="helplink">';
388 echo '<a href="index.php?id='.$course->id.'&amp;subscribe=1">'.get_string('allsubscribe', 'forum').'</a>';
389 echo '</span><br /><span class="helplink">';
390 echo '<a href="index.php?id='.$course->id.'&amp;subscribe=0">'.get_string('allunsubscribe', 'forum').'</a>';
391 echo '</span>';
392 print_box_end();
393 print_box('&nbsp;', 'clearer');
396 if ($generalforums) {
397 print_heading(get_string('generalforums', 'forum'));
398 print_table($generaltable);
401 if ($learningforums) {
402 print_heading(get_string('learningforums', 'forum'));
403 print_table($learningtable);
406 print_footer($course);