course)) { error("Course ID is incorrect - discussion is faulty"); } if (!$forum = get_record("forum", "id", $discussion->forum)) { notify("Bad forum ID stored in this discussion"); } if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { error('Course Module ID was incorrect'); } // move this down fix for MDL-6926 require_once("lib.php"); require_course_login($course, true, $cm); $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); $canviewdiscussion = has_capability('mod/forum:viewdiscussion', $modcontext); if ($forum->type == "news") { if (!($USER->id == $discussion->userid || (($discussion->timestart == 0 || $discussion->timestart <= time()) && ($discussion->timeend == 0 || $discussion->timeend > time())))) { error('Discussion ID was incorrect or no longer exists', "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"); } } if (!empty($move)) { if (!$sourceforum = get_record('forum', 'id', $fromforum)) { error('Cannot find which forum this discussion is being moved from'); } if ($sourceforum->type == 'single') { error('Cannot move discussion from a simple single discussion forum'); } require_capability('mod/forum:movediscussions', $modcontext); if ($forum = get_record("forum", "id", $move)) { if (!forum_move_attachments($discussion, $move)) { notify("Errors occurred while moving attachment directories - check your file permissions"); } set_field("forum_discussions", "forum", $forum->id, "id", $discussion->id); $discussion->forum = $forum->id; if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { add_to_log($course->id, "forum", "move discussion", "discuss.php?d=$discussion->id", "$discussion->id", $cm->id); } else { add_to_log($course->id, "forum", "move discussion", "discuss.php?d=$discussion->id", "$discussion->id"); } $discussionmoved = true; require_once('rsslib.php'); require_once($CFG->libdir.'/rsslib.php'); // Delete the RSS files for the 2 forums because we want to force // the regeneration of the feeds since the discussions have been // moved. if (!forum_rss_delete_file($forum) || !forum_rss_delete_file($sourceforum)) { notify('Could not purge the cached RSS feeds for the source and/or'. 'destination forum(s) - check your file permissionsforums'); } } else { error('You can\'t move to that forum - it doesn\'t exist!'); } } $logparameters = "d=$discussion->id"; if ($parent) { $logparameters .= "&parent=$parent"; } if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { add_to_log($course->id, "forum", "view discussion", "discuss.php?$logparameters", "$discussion->id", $cm->id); } else { add_to_log($course->id, "forum", "view discussion", "discuss.php?$logparameters", "$discussion->id"); } unset($SESSION->fromdiscussion); if ($mode) { set_user_preference('forum_displaymode', $mode); } $displaymode = get_user_preferences('forum_displaymode', $CFG->forum_displaymode); if ($parent) { if (abs($displaymode) == 1) { // If flat AND parent, then force nested display this time $displaymode = 3; } } else { $parent = $discussion->firstpost; } if (!forum_user_can_view_post($parent, $course, $cm, $forum, $discussion)) { error('You do not have permissions to view this post', "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"); } if (! $post = forum_get_post_full($parent)) { error("Discussion no longer exists", "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"); } if (forum_tp_can_track_forums($forum) && forum_tp_is_tracked($forum) && $CFG->forum_usermarksread) { if ($mark == 'read') { forum_tp_add_read_record($USER->id, $postid, $discussion->id, $forum->id); } else if ($mark == 'unread') { forum_tp_delete_read_records($USER->id, $postid); } } $searchform = forum_search_form($course); $navlinks = array(); $navlinks[] = array('name' => get_string('forums', 'forum'), 'link' => "../forum/index.php?id=$course->id", 'type' => 'activity'); $navlinks[] = array('name' => format_string($forum->name,true), 'link' => "../forum/view.php?f=$forum->id", 'type' => 'activityinstance'); $navlinks[] = array('name' => format_string($discussion->name,true), 'link' => "discuss.php?d=$discussion->id", 'type' => 'title'); if ($parent != $discussion->firstpost) { $navlinks[] = array('name' => format_string($post->subject,true), 'type' => 'title'); } $navigation = build_navigation($navlinks); print_header("$course->shortname: ".format_string($discussion->name), $course->fullname, $navigation, "", "", true, $searchform, navmenu($course, $cm)); /// Check to see if groups are being used in this forum /// If so, make sure the current person is allowed to see this discussion /// Also, if we know they should be able to reply, then explicitly set $canreply if ($forum->type == 'news') { $capname = 'mod/forum:replynews'; } else { $capname = 'mod/forum:replypost'; } $groupmode = groups_get_activity_groupmode($cm); if ($canreply = has_capability($capname, $modcontext)) { if ($groupmode && !has_capability('moodle/site:accessallgroups', $modcontext)) { // Groups must be kept separate //change this to groups_is_member $mygroupid = mygroupid($course->id); //only useful if 0, otherwise it's an array now if ($groupmode == SEPARATEGROUPS) { require_login(); if ((empty($mygroupid) and $discussion->groupid == -1) || (groups_is_member($discussion->groupid) || $mygroupid == $discussion->groupid)) { // $canreply = true; } elseif ($discussion->groupid == -1) { $canreply = false; } else { print_heading("Sorry, you can't see this discussion because you are not in this group"); print_footer($course); die; } } else if ($groupmode == VISIBLEGROUPS) { $canreply = ( (empty($mygroupid) && $discussion->groupid == -1) || (groups_is_member($discussion->groupid) || $mygroupid == $discussion->groupid) ); } } } else { // allow guests to see the link $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! $canreply = true; } } /// Print the controls across the top echo '
'; // groups selector not needed here echo ""; forum_print_mode_form($discussion->id, $displaymode); echo ""; if ($forum->type != 'single' && has_capability('mod/forum:movediscussions', $modcontext)) { // Popup menu to move discussions to other forums. The discussion in a // single discussion forum can't be moved. if ($forums = get_all_instances_in_course("forum", $course)) { if ($course->format == 'weeks') { $strsection = get_string("week"); } else { $strsection = get_string("topic"); } $section = -1; foreach ($forums as $courseforum) { if (!empty($courseforum->section) and $section != $courseforum->section) { $forummenu[] = "-------------- $strsection $courseforum->section --------------"; } $section = $courseforum->section; if ($courseforum->id != $forum->id) { $url = "discuss.php?d=$discussion->id&fromforum=$discussion->forum&move=$courseforum->id"; $forummenu[$url] = format_string($courseforum->name,true); } } if (!empty($forummenu)) { echo "
"; echo popup_form("$CFG->wwwroot/mod/forum/", $forummenu, "forummenu", "", get_string("movethisdiscussionto", "forum"), "", "", true); echo "
"; } } } echo "
"; if (!empty($forum->blockafter) && !empty($forum->blockperiod)) { $a->blockafter = $forum->blockafter; $a->blockperiod = get_string('secondstotime'.$forum->blockperiod); notify(get_string('thisforumisthrottled','forum',$a)); } if ($forum->type == 'qanda' && !has_capability('mod/forum:viewqandawithoutposting', $modcontext) && !forum_user_has_posted($forum->id,$discussion->id,$USER->id)) { notify(get_string('qandanotify','forum')); } if (isset($discussionmoved)) { notify(get_string("discussionmoved", "forum", format_string($forum->name,true))); } /// Print the actual discussion if (!$canviewdiscussion) { notice(get_string('noviewdiscussionspermission', 'forum')); } else { $canrate = has_capability('mod/forum:rate', $modcontext); forum_print_discussion($course, $forum, $discussion, $post, $displaymode, $canreply, $canrate); } print_footer($course); ?>