From cd4e6b1769dfe0399eeb29d13bb1030bd759172a Mon Sep 17 00:00:00 2001 From: samhemelryk Date: Thu, 24 Sep 2009 06:41:04 +0000 Subject: [PATCH] mod-forum MDL-19808 Added set_url calls, replaced deprecated functions --- mod/forum/index.php | 590 ++++++++-------- mod/forum/markposts.php | 145 ++-- mod/forum/post.php | 1294 +++++++++++++++++----------------- mod/forum/rate.php | 150 ++-- mod/forum/rate_ajax.php | 162 ++--- mod/forum/report.php | 169 ++--- mod/forum/search.php | 402 +++++------ mod/forum/settracking.php | 90 +-- mod/forum/subscribe.php | 182 ++--- mod/forum/subscribers.php | 221 +++--- mod/forum/unsubscribeall.php | 4 +- mod/forum/user.php | 19 +- 12 files changed, 1751 insertions(+), 1677 deletions(-) diff --git a/mod/forum/index.php b/mod/forum/index.php index 71cab7c1c7..41e22b6c6d 100644 --- a/mod/forum/index.php +++ b/mod/forum/index.php @@ -1,162 +1,295 @@ -dirroot . '/course/lib.php'); - require_once($CFG->dirroot . '/mod/forum/lib.php'); - require_once($CFG->libdir . '/rsslib.php'); +require_once(dirname(__FILE__) . '/../../config.php'); +require_once($CFG->dirroot . '/course/lib.php'); +require_once($CFG->dirroot . '/mod/forum/lib.php'); +require_once($CFG->libdir . '/rsslib.php'); - $id = optional_param('id', 0, PARAM_INT); // Course id - $subscribe = optional_param('subscribe', null, PARAM_INT); // Subscribe/Unsubscribe all forums +$id = optional_param('id', 0, PARAM_INT); // Course id +$subscribe = optional_param('subscribe', null, PARAM_INT); // Subscribe/Unsubscribe all forums - if ($id) { - if (! $course = $DB->get_record('course', array('id' => $id))) { - print_error('invalidcourseid'); - } - } else { - if (! $course = get_site()) { - print_error('nosite'); - } +$url = new moodle_url($CFG->wwwroot.'/mod/forum/index.php', array('id'=>$id)); +if ($subscribe !== null) { + $url->param('subscribe', $subscribe); +} +$PAGE->set_url($url); + +if ($id) { + if (! $course = $DB->get_record('course', array('id' => $id))) { + print_error('invalidcourseid'); + } +} else { + if (! $course = get_site()) { + print_error('nosite'); } +} - require_course_login($course); - $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); +require_course_login($course); +$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - unset($SESSION->fromdiscussion); +unset($SESSION->fromdiscussion); - add_to_log($course->id, 'forum', 'view forums', "index.php?id=$course->id"); +add_to_log($course->id, 'forum', 'view forums', "index.php?id=$course->id"); - $strforums = get_string('forums', 'forum'); - $strforum = get_string('forum', 'forum'); - $strdescription = get_string('description'); - $strdiscussions = get_string('discussions', 'forum'); - $strsubscribed = get_string('subscribed', 'forum'); - $strunreadposts = get_string('unreadposts', 'forum'); - $strtracking = get_string('tracking', 'forum'); - $strmarkallread = get_string('markallread', 'forum'); - $strtrackforum = get_string('trackforum', 'forum'); - $strnotrackforum = get_string('notrackforum', 'forum'); - $strsubscribe = get_string('subscribe', 'forum'); - $strunsubscribe = get_string('unsubscribe', 'forum'); - $stryes = get_string('yes'); - $strno = get_string('no'); - $strrss = get_string('rss'); - $strweek = get_string('week'); - $strsection = get_string('section'); +$strforums = get_string('forums', 'forum'); +$strforum = get_string('forum', 'forum'); +$strdescription = get_string('description'); +$strdiscussions = get_string('discussions', 'forum'); +$strsubscribed = get_string('subscribed', 'forum'); +$strunreadposts = get_string('unreadposts', 'forum'); +$strtracking = get_string('tracking', 'forum'); +$strmarkallread = get_string('markallread', 'forum'); +$strtrackforum = get_string('trackforum', 'forum'); +$strnotrackforum = get_string('notrackforum', 'forum'); +$strsubscribe = get_string('subscribe', 'forum'); +$strunsubscribe = get_string('unsubscribe', 'forum'); +$stryes = get_string('yes'); +$strno = get_string('no'); +$strrss = get_string('rss'); +$strweek = get_string('week'); +$strsection = get_string('section'); - $searchform = forum_search_form($course); +$searchform = forum_search_form($course); - // Start of the table for General Forums +// Start of the table for General Forums - $generaltable = new html_table(); - $generaltable->head = array ($strforum, $strdescription, $strdiscussions); - $generaltable->align = array ('left', 'left', 'center'); +$generaltable = new html_table(); +$generaltable->head = array ($strforum, $strdescription, $strdiscussions); +$generaltable->align = array ('left', 'left', 'center'); - if ($usetracking = forum_tp_can_track_forums()) { - $untracked = forum_tp_get_untracked_forums($USER->id, $course->id); +if ($usetracking = forum_tp_can_track_forums()) { + $untracked = forum_tp_get_untracked_forums($USER->id, $course->id); - $generaltable->head[] = $strunreadposts; - $generaltable->align[] = 'center'; + $generaltable->head[] = $strunreadposts; + $generaltable->align[] = 'center'; - $generaltable->head[] = $strtracking; - $generaltable->align[] = 'center'; - } + $generaltable->head[] = $strtracking; + $generaltable->align[] = 'center'; +} - $subscribed_forums = forum_get_subscribed_forums($course); +$subscribed_forums = forum_get_subscribed_forums($course); + +if ($can_subscribe = (!isguestuser() && has_capability('moodle/course:view', $coursecontext))) { + $generaltable->head[] = $strsubscribed; + $generaltable->align[] = 'center'; +} + +if ($show_rss = (($can_subscribe || $course->id == SITEID) && + isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) && + $CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) { + $generaltable->head[] = $strrss; + $generaltable->align[] = 'center'; +} - if ($can_subscribe = (!isguestuser() && has_capability('moodle/course:view', $coursecontext))) { - $generaltable->head[] = $strsubscribed; - $generaltable->align[] = 'center'; - } - if ($show_rss = (($can_subscribe || $course->id == SITEID) && - isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) && - $CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) { - $generaltable->head[] = $strrss; - $generaltable->align[] = 'center'; +// Parse and organise all the forums. Most forums are course modules but +// some special ones are not. These get placed in the general forums +// category with the forums in section 0. + +$forums = $DB->get_records('forum', array('course' => $course->id)); + +$generalforums = array(); +$learningforums = array(); +$modinfo =& get_fast_modinfo($course); + +if (!isset($modinfo->instances['forum'])) { + $modinfo->instances['forum'] = array(); +} + +foreach ($modinfo->instances['forum'] as $forumid=>$cm) { + if (!$cm->uservisible or !isset($forums[$forumid])) { + continue; } + $forum = $forums[$forumid]; - // Parse and organise all the forums. Most forums are course modules but - // some special ones are not. These get placed in the general forums - // category with the forums in section 0. + if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { + continue; // Shouldn't happen + } + + if (!has_capability('mod/forum:viewdiscussion', $context)) { + continue; + } - $forums = $DB->get_records('forum', array('course' => $course->id)); + // fill two type array - order in modinfo is the same as in course + if ($forum->type == 'news' or $forum->type == 'social') { + $generalforums[$forum->id] = $forum; - $generalforums = array(); - $learningforums = array(); - $modinfo =& get_fast_modinfo($course); + } else if ($course->id == SITEID or empty($cm->sectionnum)) { + $generalforums[$forum->id] = $forum; - if (!isset($modinfo->instances['forum'])) { - $modinfo->instances['forum'] = array(); + } else { + $learningforums[$forum->id] = $forum; } +} +/// Do course wide subscribe/unsubscribe +if (!is_null($subscribe) and !isguestuser() and !isguest()) { foreach ($modinfo->instances['forum'] as $forumid=>$cm) { - if (!$cm->uservisible or !isset($forums[$forumid])) { - continue; - } - $forum = $forums[$forumid]; + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + $cansub = false; - if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { - continue; // Shouldn't happen + if (has_capability('mod/forum:viewdiscussion', $modcontext)) { + $cansub = true; } - - if (!has_capability('mod/forum:viewdiscussion', $context)) { - continue; + if ($cansub && $cm->visible == 0 && + !has_capability('mod/forum:managesubscriptions', $modcontext)) + { + $cansub = false; } + if (!forum_is_forcesubscribed($forum)) { + $subscribed = forum_is_subscribed($USER->id, $forum); + if ((has_capability('moodle/course:manageactivities', $coursecontext, $USER->id) || $forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) && $subscribe && !$subscribed && $cansub) { + forum_subscribe($USER->id, $forumid); + } else if (!$subscribe && $subscribed) { + forum_unsubscribe($USER->id, $forumid); + } + } + } + $returnto = forum_go_back_to("index.php?id=$course->id"); + if ($subscribe) { + add_to_log($course->id, 'forum', 'subscribeall', "index.php?id=$course->id", $course->id); + redirect($returnto, get_string('nowallsubscribed', 'forum', format_string($course->shortname)), 1); + } else { + add_to_log($course->id, 'forum', 'unsubscribeall', "index.php?id=$course->id", $course->id); + redirect($returnto, get_string('nowallunsubscribed', 'forum', format_string($course->shortname)), 1); + } +} - // fill two type array - order in modinfo is the same as in course - if ($forum->type == 'news' or $forum->type == 'social') { - $generalforums[$forum->id] = $forum; +/// First, let's process the general forums and build up a display + +if ($generalforums) { + foreach ($generalforums as $forum) { + $cm = $modinfo->instances['forum'][$forum->id]; + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + + $count = forum_count_discussions($forum, $cm, $course); + + if ($usetracking) { + if ($forum->trackingtype == FORUM_TRACKING_OFF) { + $unreadlink = '-'; + $trackedlink = '-'; + + } else { + if (isset($untracked[$forum->id])) { + $unreadlink = '-'; + } else if ($unread = forum_tp_count_forum_unread_posts($cm, $course)) { + $unreadlink = ''.$unread.''; + $unreadlink .= ''.$strmarkallread.''; + } else { + $unreadlink = '0'; + } - } else if ($course->id == SITEID or empty($cm->sectionnum)) { - $generalforums[$forum->id] = $forum; + if ($forum->trackingtype == FORUM_TRACKING_ON) { + $trackedlink = $stryes; + } else { + $options = array('id'=>$forum->id); + if (!isset($untracked[$forum->id])) { + $form = html_form::make_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $stryes); + $form->button->title = $strnotrackforum; + $trackedlink = $OUTPUT->button($form); + } else { + $form = html_form::make_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $strno); + $form->button->title = $strtrackforum; + $trackedlink = $OUTPUT->button($form); + } + } + } + } + + $forum->intro = shorten_text(format_module_intro('forum', $forum, $cm->id), $CFG->forum_shortpost); + $forumname = format_string($forum->name, true);; + + if ($cm->visible) { + $style = ''; } else { - $learningforums[$forum->id] = $forum; + $style = 'class="dimmed"'; } - } + $forumlink = "id\" $style>".format_string($forum->name,true).""; + $discussionlink = "id\" $style>".$count.""; - /// Do course wide subscribe/unsubscribe - if (!is_null($subscribe) and !isguestuser() and !isguest()) { - foreach ($modinfo->instances['forum'] as $forumid=>$cm) { - $forum = $forums[$forumid]; - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - $cansub = false; + $row = array ($forumlink, $forum->intro, $discussionlink); + if ($usetracking) { + $row[] = $unreadlink; + $row[] = $trackedlink; // Tracking. + } - if (has_capability('mod/forum:viewdiscussion', $modcontext)) { - $cansub = true; - } - if ($cansub && $cm->visible == 0 && - !has_capability('mod/forum:managesubscriptions', $modcontext)) - { - $cansub = false; + if ($can_subscribe) { + if ($forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) { + $row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes, + 'unsubscribed' => $strno, 'forcesubscribed' => $stryes, + 'cantsubscribe' => '-'), false, false, true, $subscribed_forums); + } else { + $row[] = '-'; } - if (!forum_is_forcesubscribed($forum)) { - $subscribed = forum_is_subscribed($USER->id, $forum); - if ((has_capability('moodle/course:manageactivities', $coursecontext, $USER->id) || $forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) && $subscribe && !$subscribed && $cansub) { - forum_subscribe($USER->id, $forumid); - } else if (!$subscribe && $subscribed) { - forum_unsubscribe($USER->id, $forumid); + } + + //If this forum has RSS activated, calculate it + if ($show_rss) { + if ($forum->rsstype and $forum->rssarticles) { + //Calculate the tolltip text + if ($forum->rsstype == 1) { + $tooltiptext = get_string('rsssubscriberssdiscussions', 'forum', format_string($forum->name)); + } else { + $tooltiptext = get_string('rsssubscriberssposts', 'forum', format_string($forum->name)); } + //Get html code for RSS link + $row[] = rss_get_link($course->id, $USER->id, 'forum', $forum->id, $tooltiptext); + } else { + $row[] = ' '; } } - $returnto = forum_go_back_to("index.php?id=$course->id"); - if ($subscribe) { - add_to_log($course->id, 'forum', 'subscribeall', "index.php?id=$course->id", $course->id); - redirect($returnto, get_string('nowallsubscribed', 'forum', format_string($course->shortname)), 1); - } else { - add_to_log($course->id, 'forum', 'unsubscribeall', "index.php?id=$course->id", $course->id); - redirect($returnto, get_string('nowallunsubscribed', 'forum', format_string($course->shortname)), 1); - } + + $generaltable->data[] = $row; + } +} + + +// Start of the table for Learning Forums +$learningtable = new html_table(); +$learningtable->head = array ($strforum, $strdescription, $strdiscussions); +$learningtable->align = array ('left', 'left', 'center'); + +if ($usetracking) { + $learningtable->head[] = $strunreadposts; + $learningtable->align[] = 'center'; + + $learningtable->head[] = $strtracking; + $learningtable->align[] = 'center'; +} + +if ($can_subscribe) { + $learningtable->head[] = $strsubscribed; + $learningtable->align[] = 'center'; +} + +if ($show_rss = (($can_subscribe || $course->id == SITEID) && + isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) && + $CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) { + $learningtable->head[] = $strrss; + $learningtable->align[] = 'center'; +} + +/// Now let's process the learning forums + +if ($course->id != SITEID) { // Only real courses have learning forums + // Add extra field for section number, at the front + if ($course->format == 'weeks' or $course->format == 'weekscss') { + array_unshift($learningtable->head, $strweek); + } else { + array_unshift($learningtable->head, $strsection); } + array_unshift($learningtable->align, 'center'); - /// First, let's process the general forums and build up a display - if ($generalforums) { - foreach ($generalforums as $forum) { + if ($learningforums) { + $currentsection = ''; + foreach ($learningforums as $forum) { $cm = $modinfo->instances['forum'][$forum->id]; $context = get_context_instance(CONTEXT_MODULE, $cm->id); @@ -169,9 +302,9 @@ } else { if (isset($untracked[$forum->id])) { - $unreadlink = '-'; + $unreadlink = '-'; } else if ($unread = forum_tp_count_forum_unread_posts($cm, $course)) { - $unreadlink = ''.$unread.''; + $unreadlink = ''.$unread.''; $unreadlink .= ''.$strmarkallread.''; } else { @@ -197,7 +330,18 @@ } $forum->intro = shorten_text(format_module_intro('forum', $forum, $cm->id), $CFG->forum_shortpost); - $forumname = format_string($forum->name, true);; + + if ($cm->sectionnum != $currentsection) { + $printsection = $cm->sectionnum; + if ($currentsection) { + $learningtable->data[] = 'hr'; + } + $currentsection = $cm->sectionnum; + } else { + $printsection = ''; + } + + $forumname = format_string($forum->name,true);; if ($cm->visible) { $style = ''; @@ -207,7 +351,7 @@ $forumlink = "id\" $style>".format_string($forum->name,true).""; $discussionlink = "id\" $style>".$count.""; - $row = array ($forumlink, $forum->intro, $discussionlink); + $row = array ($printsection, $forumlink, $forum->intro, $discussionlink); if ($usetracking) { $row[] = $unreadlink; $row[] = $trackedlink; // Tracking. @@ -216,8 +360,8 @@ if ($can_subscribe) { if ($forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) { $row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes, - 'unsubscribed' => $strno, 'forcesubscribed' => $stryes, - 'cantsubscribe' => '-'), false, false, true, $subscribed_forums); + 'unsubscribed' => $strno, 'forcesubscribed' => $stryes, + 'cantsubscribe' => '-'), false, false, true, $subscribed_forums); } else { $row[] = '-'; } @@ -239,178 +383,40 @@ } } - $generaltable->data[] = $row; + $learningtable->data[] = $row; } } - - - // Start of the table for Learning Forums - $learningtable = new html_table(); - $learningtable->head = array ($strforum, $strdescription, $strdiscussions); - $learningtable->align = array ('left', 'left', 'center'); - - if ($usetracking) { - $learningtable->head[] = $strunreadposts; - $learningtable->align[] = 'center'; - - $learningtable->head[] = $strtracking; - $learningtable->align[] = 'center'; - } - - if ($can_subscribe) { - $learningtable->head[] = $strsubscribed; - $learningtable->align[] = 'center'; - } - - if ($show_rss = (($can_subscribe || $course->id == SITEID) && - isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) && - $CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) { - $learningtable->head[] = $strrss; - $learningtable->align[] = 'center'; - } - - /// Now let's process the learning forums - - if ($course->id != SITEID) { // Only real courses have learning forums - // Add extra field for section number, at the front - if ($course->format == 'weeks' or $course->format == 'weekscss') { - array_unshift($learningtable->head, $strweek); - } else { - array_unshift($learningtable->head, $strsection); - } - array_unshift($learningtable->align, 'center'); - - - if ($learningforums) { - $currentsection = ''; - foreach ($learningforums as $forum) { - $cm = $modinfo->instances['forum'][$forum->id]; - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - - $count = forum_count_discussions($forum, $cm, $course); - - if ($usetracking) { - if ($forum->trackingtype == FORUM_TRACKING_OFF) { - $unreadlink = '-'; - $trackedlink = '-'; - - } else { - if (isset($untracked[$forum->id])) { - $unreadlink = '-'; - } else if ($unread = forum_tp_count_forum_unread_posts($cm, $course)) { - $unreadlink = ''.$unread.''; - $unreadlink .= ''.$strmarkallread.''; - } else { - $unreadlink = '0'; - } - - if ($forum->trackingtype == FORUM_TRACKING_ON) { - $trackedlink = $stryes; - - } else { - $options = array('id'=>$forum->id); - if (!isset($untracked[$forum->id])) { - $form = html_form::make_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $stryes); - $form->button->title = $strnotrackforum; - $trackedlink = $OUTPUT->button($form); - } else { - $form = html_form::make_button($CFG->wwwroot.'/mod/forum/settracking.php', $options, $strno); - $form->button->title = $strtrackforum; - $trackedlink = $OUTPUT->button($form); - } - } - } - } - - $forum->intro = shorten_text(format_module_intro('forum', $forum, $cm->id), $CFG->forum_shortpost); - - if ($cm->sectionnum != $currentsection) { - $printsection = $cm->sectionnum; - if ($currentsection) { - $learningtable->data[] = 'hr'; - } - $currentsection = $cm->sectionnum; - } else { - $printsection = ''; - } - - $forumname = format_string($forum->name,true);; - - if ($cm->visible) { - $style = ''; - } else { - $style = 'class="dimmed"'; - } - $forumlink = "id\" $style>".format_string($forum->name,true).""; - $discussionlink = "id\" $style>".$count.""; - - $row = array ($printsection, $forumlink, $forum->intro, $discussionlink); - if ($usetracking) { - $row[] = $unreadlink; - $row[] = $trackedlink; // Tracking. - } - - if ($can_subscribe) { - if ($forum->forcesubscribe != FORUM_DISALLOWSUBSCRIBE) { - $row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes, - 'unsubscribed' => $strno, 'forcesubscribed' => $stryes, - 'cantsubscribe' => '-'), false, false, true, $subscribed_forums); - } else { - $row[] = '-'; - } - } - - //If this forum has RSS activated, calculate it - if ($show_rss) { - if ($forum->rsstype and $forum->rssarticles) { - //Calculate the tolltip text - if ($forum->rsstype == 1) { - $tooltiptext = get_string('rsssubscriberssdiscussions', 'forum', format_string($forum->name)); - } else { - $tooltiptext = get_string('rsssubscriberssposts', 'forum', format_string($forum->name)); - } - //Get html code for RSS link - $row[] = rss_get_link($course->id, $USER->id, 'forum', $forum->id, $tooltiptext); - } else { - $row[] = ' '; - } - } - - $learningtable->data[] = $row; - } - } - } - - - /// Output the page - $PAGE->navbar->add($strforums); - $PAGE->set_title("$course->shortname: $strforums"); - $PAGE->set_heading($course->fullname); - $PAGE->set_button($searchform); - echo $OUTPUT->header(); - - if (!isguest()) { - echo $OUTPUT->box_start('subscription'); - echo ''; - echo ''.get_string('allsubscribe', 'forum').''; - echo '
'; - echo ''.get_string('allunsubscribe', 'forum').''; - echo ''; - echo $OUTPUT->box_end(); - echo $OUTPUT->box(' ', 'clearer'); - } - - if ($generalforums) { - echo $OUTPUT->heading(get_string('generalforums', 'forum')); - echo $OUTPUT->table($generaltable); - } - - if ($learningforums) { - echo $OUTPUT->heading(get_string('learningforums', 'forum')); - echo $OUTPUT->table($learningtable); - } - - echo $OUTPUT->footer(); - -?> +} + + +/// Output the page +$PAGE->navbar->add($strforums); +$PAGE->set_title("$course->shortname: $strforums"); +$PAGE->set_heading($course->fullname); +$PAGE->set_button($searchform); +echo $OUTPUT->header(); + +if (!isguest()) { + echo $OUTPUT->box_start('subscription'); + echo ''; + echo ''.get_string('allsubscribe', 'forum').''; + echo '
'; + echo ''.get_string('allunsubscribe', 'forum').''; + echo ''; + echo $OUTPUT->box_end(); + echo $OUTPUT->box(' ', 'clearer'); +} + +if ($generalforums) { + echo $OUTPUT->heading(get_string('generalforums', 'forum')); + echo $OUTPUT->table($generaltable); +} + +if ($learningforums) { + echo $OUTPUT->heading(get_string('learningforums', 'forum')); + echo $OUTPUT->table($learningtable); +} + +echo $OUTPUT->footer(); + +?> \ No newline at end of file diff --git a/mod/forum/markposts.php b/mod/forum/markposts.php index b322fcf0bb..bd7ff27fc5 100644 --- a/mod/forum/markposts.php +++ b/mod/forum/markposts.php @@ -1,71 +1,80 @@ -get_record("forum", array("id" => $f))) { - print_error('invalidforumid', 'forum'); - } - - if (! $course = $DB->get_record("course", array("id" => $forum->course))) { - print_error('invalidcourseid'); - } - - if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { - print_error('invalidcoursemodule'); - } - - $user = $USER; - - require_course_login($course, false, $cm); +wwwroot.'/mod/forum/markposts.php', array('f'=>$f, 'mark'=>$mark)); +if ($d !== 0) { + $url->param('d', $d); +} +if ($returnpage !== 'index.php') { + $url->param('returnpage', $returnpage); +} +$PAGE->set_url($url); + +if (! $forum = $DB->get_record("forum", array("id" => $f))) { + print_error('invalidforumid', 'forum'); +} + +if (! $course = $DB->get_record("course", array("id" => $forum->course))) { + print_error('invalidcourseid'); +} + +if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + print_error('invalidcoursemodule'); +} + +$user = $USER; + +require_course_login($course, false, $cm); + +if ($returnpage == 'index.php') { + $returnto = forum_go_back_to($returnpage.'?id='.$course->id); +} else { + $returnto = forum_go_back_to($returnpage.'?f='.$forum->id); +} + +if (has_capability('moodle/legacy:guest', get_context_instance(CONTEXT_SYSTEM), 0, false)) { // Guests can't change forum + $PAGE->set_title($course->shortname); + $PAGE->set_heading($course->fullname); + echo $OUTPUT->header(); + echo $OUTPUT->confirm(get_string('noguesttracking', 'forum').'

'.get_string('liketologin'), get_login_url(), $returnto); + echo $OUTPUT->footer(); + exit; +} + +$info = new object(); +$info->name = fullname($user); +$info->forum = format_string($forum->name); + +if ($mark == 'read') { + if (!empty($d)) { + if (! $discussion = $DB->get_record('forum_discussions', array('id'=> $d, 'forum'=> $forum->id))) { + print_error('invaliddiscussionid', 'forum'); + } - if ($returnpage == 'index.php') { - $returnto = forum_go_back_to($returnpage.'?id='.$course->id); + if (forum_tp_mark_discussion_read($user, $d)) { + add_to_log($course->id, "discussion", "mark read", "view.php?f=$forum->id", $d, $cm->id); + } } else { - $returnto = forum_go_back_to($returnpage.'?f='.$forum->id); - } - - if (isguest()) { // Guests can't change forum - $PAGE->set_title($course->shortname); - $PAGE->set_heading($course->fullname); - echo $OUTPUT->header(); - echo $OUTPUT->confirm(get_string('noguesttracking', 'forum').'

'.get_string('liketologin'), get_login_url(), $returnto); - echo $OUTPUT->footer(); - exit; - } - - $info = new object(); - $info->name = fullname($user); - $info->forum = format_string($forum->name); - - if ($mark == 'read') { - if (!empty($d)) { - if (! $discussion = $DB->get_record('forum_discussions', array('id'=> $d, 'forum'=> $forum->id))) { - print_error('invaliddiscussionid', 'forum'); - } - - if (forum_tp_mark_discussion_read($user, $d)) { - add_to_log($course->id, "discussion", "mark read", "view.php?f=$forum->id", $d, $cm->id); - } - } else { - // Mark all messages read in current group - $currentgroup = groups_get_activity_group($cm); - if(!$currentgroup) { - // mark_forum_read requires ===false, while get_activity_group - // may return 0 - $currentgroup=false; - } - if (forum_tp_mark_forum_read($user, $forum->id,$currentgroup)) { - add_to_log($course->id, "forum", "mark read", "view.php?f=$forum->id", $forum->id, $cm->id); - } + // Mark all messages read in current group + $currentgroup = groups_get_activity_group($cm); + if(!$currentgroup) { + // mark_forum_read requires ===false, while get_activity_group + // may return 0 + $currentgroup=false; + } + if (forum_tp_mark_forum_read($user, $forum->id,$currentgroup)) { + add_to_log($course->id, "forum", "mark read", "view.php?f=$forum->id", $forum->id, $cm->id); } + } /// FUTURE - Add ability to mark them as unread. // } else { // subscribe @@ -75,8 +84,8 @@ // } else { // print_error("Could not start tracking that forum", $_SERVER["HTTP_REFERER"]); // } - } +} - redirect($returnto); +redirect($returnto); -?> +?> \ No newline at end of file diff --git a/mod/forum/post.php b/mod/forum/post.php index af9e9f7c48..8607bc6b3b 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -1,816 +1,820 @@ -set_url('/mod/forum/post.php', array( - 'reply' => $reply, - 'forum' => $forum, - 'edit' => $edit, - 'delete'=> $delete, - 'prune' => $prune, - 'name' => $name, - 'confirm'=>$confirm, - 'groupid'=>$groupid, - )); - //these page_params will be passed as hidden variables later in the form. - $page_params = array('reply'=>$reply, 'forum'=>$forum, 'edit'=>$edit); - - $sitecontext = get_context_instance(CONTEXT_SYSTEM); - - if (has_capability('moodle/legacy:guest', $sitecontext, NULL, false)) { - - if (!empty($forum)) { // User is starting a new discussion in a forum - if (! $forum = $DB->get_record('forum', array('id' => $forum))) { - print_error('invalidforumid', 'forum'); - } - } else if (!empty($reply)) { // User is writing a new reply - if (! $parent = forum_get_post_full($reply)) { - print_error('invalidparentpostid', 'forum'); - } - if (! $discussion = $DB->get_record('forum_discussions', array('id' => $parent->discussion))) { - print_error('notpartofdiscussion', 'forum'); - } - if (! $forum = $DB->get_record('forum', array('id' => $discussion->forum))) { - print_error('invalidforumid'); - } +require_once('../../config.php'); +require_once('lib.php'); + +$reply = optional_param('reply', 0, PARAM_INT); +$forum = optional_param('forum', 0, PARAM_INT); +$edit = optional_param('edit', 0, PARAM_INT); +$delete = optional_param('delete', 0, PARAM_INT); +$prune = optional_param('prune', 0, PARAM_INT); +$name = optional_param('name', '', PARAM_CLEAN); +$confirm = optional_param('confirm', 0, PARAM_INT); +$groupid = optional_param('groupid', null, PARAM_INT); + +$PAGE->set_url('/mod/forum/post.php', array( + 'reply' => $reply, + 'forum' => $forum, + 'edit' => $edit, + 'delete'=> $delete, + 'prune' => $prune, + 'name' => $name, + 'confirm'=>$confirm, + 'groupid'=>$groupid, + )); +//these page_params will be passed as hidden variables later in the form. +$page_params = array('reply'=>$reply, 'forum'=>$forum, 'edit'=>$edit); + +$sitecontext = get_context_instance(CONTEXT_SYSTEM); + +if (has_capability('moodle/legacy:guest', $sitecontext, NULL, false)) { + + if (!empty($forum)) { // User is starting a new discussion in a forum + if (! $forum = $DB->get_record('forum', array('id' => $forum))) { + print_error('invalidforumid', 'forum'); } - if (! $course = $DB->get_record('course', array('id' => $forum->course))) { - print_error('invalidcourseid'); + } else if (!empty($reply)) { // User is writing a new reply + if (! $parent = forum_get_post_full($reply)) { + print_error('invalidparentpostid', 'forum'); } - - if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { // For the logs - print_error('invalidcoursemodule'); - } else { - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + if (! $discussion = $DB->get_record('forum_discussions', array('id' => $parent->discussion))) { + print_error('notpartofdiscussion', 'forum'); } - - if (!get_referer()) { // No referer - probably coming in via email See MDL-9052 - require_login(); + if (! $forum = $DB->get_record('forum', array('id' => $discussion->forum))) { + print_error('invalidforumid'); } + } + if (! $course = $DB->get_record('course', array('id' => $forum->course))) { + print_error('invalidcourseid'); + } - $PAGE->set_title($course->shortname); - $PAGE->set_heading($course->fullname); + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { // For the logs + print_error('invalidcoursemodule'); + } else { + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + } - echo $OUTPUT->header(); - echo $OUTPUT->confirm(get_string('noguestpost', 'forum').'

'.get_string('liketologin'), get_login_url(), get_referer(false)); - echo $OUTPUT->footer(); - exit; + if (!get_referer()) { // No referer - probably coming in via email See MDL-9052 + require_login(); } - require_login(0, false); // Script is useless unless they're logged in + $PAGE->set_title($course->shortname); + $PAGE->set_heading($course->fullname); - if (!empty($forum)) { // User is starting a new discussion in a forum - if (! $forum = $DB->get_record("forum", array("id" => $forum))) { - print_error('invalidforumid', 'forum'); - } - if (! $course = $DB->get_record("course", array("id" => $forum->course))) { - print_error('invalidcourseid'); - } - if (! $cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { - print_error("invalidcoursemodule"); - } + echo $OUTPUT->header(); + echo $OUTPUT->confirm(get_string('noguestpost', 'forum').'

'.get_string('liketologin'), get_login_url(), get_referer(false)); + echo $OUTPUT->footer(); + exit; +} - $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); +require_login(0, false); // Script is useless unless they're logged in - if (! forum_user_can_post_discussion($forum, $groupid, -1, $cm)) { - if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! - $SESSION->wantsurl = $FULLME; - $SESSION->enrolcancel = $_SERVER['HTTP_REFERER']; - redirect($CFG->wwwroot.'/course/enrol.php?id='.$course->id, get_string('youneedtoenrol')); - } else { - print_error('nopostforum', 'forum'); - } - } +if (!empty($forum)) { // User is starting a new discussion in a forum + if (! $forum = $DB->get_record("forum", array("id" => $forum))) { + print_error('invalidforumid', 'forum'); + } + if (! $course = $DB->get_record("course", array("id" => $forum->course))) { + print_error('invalidcourseid'); + } + if (! $cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + print_error("invalidcoursemodule"); + } - if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $coursecontext)) { - print_error("activityiscurrentlyhidden"); - } + $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - if (isset($_SERVER["HTTP_REFERER"])) { - $SESSION->fromurl = $_SERVER["HTTP_REFERER"]; + if (! forum_user_can_post_discussion($forum, $groupid, -1, $cm)) { + if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! + $SESSION->wantsurl = $FULLME; + $SESSION->enrolcancel = $_SERVER['HTTP_REFERER']; + redirect($CFG->wwwroot.'/course/enrol.php?id='.$course->id, get_string('youneedtoenrol')); } else { - $SESSION->fromurl = ''; + print_error('nopostforum', 'forum'); } + } + if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $coursecontext)) { + print_error("activityiscurrentlyhidden"); + } - // Load up the $post variable. + if (isset($_SERVER["HTTP_REFERER"])) { + $SESSION->fromurl = $_SERVER["HTTP_REFERER"]; + } else { + $SESSION->fromurl = ''; + } - $post = new object(); - $post->course = $course->id; - $post->forum = $forum->id; - $post->discussion = 0; // ie discussion # not defined yet - $post->parent = 0; - $post->subject = ''; - $post->userid = $USER->id; - $post->message = ''; - $post->messageformat = FORMAT_HTML; // TODO: better default - $post->messagetrust = 0; - if (isset($groupid)) { - $post->groupid = $groupid; - } else { - $post->groupid = groups_get_activity_group($cm); - } + // Load up the $post variable. - forum_set_return(); + $post = new object(); + $post->course = $course->id; + $post->forum = $forum->id; + $post->discussion = 0; // ie discussion # not defined yet + $post->parent = 0; + $post->subject = ''; + $post->userid = $USER->id; + $post->message = ''; + $post->messageformat = FORMAT_HTML; // TODO: better default + $post->messagetrust = 0; - } else if (!empty($reply)) { // User is writing a new reply + if (isset($groupid)) { + $post->groupid = $groupid; + } else { + $post->groupid = groups_get_activity_group($cm); + } - if (! $parent = forum_get_post_full($reply)) { - print_error('invalidparentpostid', 'forum'); - } - if (! $discussion = $DB->get_record("forum_discussions", array("id" => $parent->discussion))) { - print_error('notpartofdiscussion', 'forum'); - } - if (! $forum = $DB->get_record("forum", array("id" => $discussion->forum))) { - print_error('invalidforumid', 'forum'); - } - if (! $course = $DB->get_record("course", array("id" => $discussion->course))) { - print_error('invalidcourseid'); - } - if (! $cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { - print_error('invalidcoursemodule'); - } + forum_set_return(); - // Ensure lang, theme, etc. is set up properly. MDL-6926 - $PAGE->set_course($course); +} else if (!empty($reply)) { // User is writing a new reply - $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + if (! $parent = forum_get_post_full($reply)) { + print_error('invalidparentpostid', 'forum'); + } + if (! $discussion = $DB->get_record("forum_discussions", array("id" => $parent->discussion))) { + print_error('notpartofdiscussion', 'forum'); + } + if (! $forum = $DB->get_record("forum", array("id" => $discussion->forum))) { + print_error('invalidforumid', 'forum'); + } + if (! $course = $DB->get_record("course", array("id" => $discussion->course))) { + print_error('invalidcourseid'); + } + if (! $cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + print_error('invalidcoursemodule'); + } - if (! forum_user_can_post($forum, $discussion, $USER, $cm, $course, $modcontext)) { - if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! - $SESSION->wantsurl = $FULLME; - $SESSION->enrolcancel = $_SERVER['HTTP_REFERER']; - redirect($CFG->wwwroot.'/course/enrol.php?id='.$course->id, get_string('youneedtoenrol')); - } else { - print_error('nopostforum', 'forum'); - } + // Ensure lang, theme, etc. is set up properly. MDL-6926 + $PAGE->set_course($course); + + $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + + if (! forum_user_can_post($forum, $discussion, $USER, $cm, $course, $modcontext)) { + if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! + $SESSION->wantsurl = $FULLME; + $SESSION->enrolcancel = $_SERVER['HTTP_REFERER']; + redirect($CFG->wwwroot.'/course/enrol.php?id='.$course->id, get_string('youneedtoenrol')); + } else { + print_error('nopostforum', 'forum'); } + } - // Make sure user can post here - if (groupmode($course, $cm) == SEPARATEGROUPS and !has_capability('moodle/site:accessallgroups', $modcontext)) { - if ($discussion->groupid == -1) { + // Make sure user can post here + if (isset($cm->groupmode) && empty($course->groupmodeforce)) { + $groupmode = $cm->groupmode; + } else { + $groupmode = $course->groupmode; + } + if ($groupmode == SEPARATEGROUPS and !has_capability('moodle/site:accessallgroups', $modcontext)) { + if ($discussion->groupid == -1) { + print_error('nopostforum', 'forum'); + } else { + if (!groups_is_member($discussion->groupid)) { print_error('nopostforum', 'forum'); - } else { - if (!groups_is_member($discussion->groupid)) { - print_error('nopostforum', 'forum'); - } } } + } - if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $coursecontext)) { - print_error("activityiscurrentlyhidden"); - } + if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $coursecontext)) { + print_error("activityiscurrentlyhidden"); + } - // Load up the $post variable. + // Load up the $post variable. - $post = new object(); - $post->course = $course->id; - $post->forum = $forum->id; - $post->discussion = $parent->discussion; - $post->parent = $parent->id; - $post->subject = $parent->subject; - $post->userid = $USER->id; - $post->message = ''; + $post = new object(); + $post->course = $course->id; + $post->forum = $forum->id; + $post->discussion = $parent->discussion; + $post->parent = $parent->id; + $post->subject = $parent->subject; + $post->userid = $USER->id; + $post->message = ''; - $post->groupid = ($discussion->groupid == -1) ? 0 : $discussion->groupid; + $post->groupid = ($discussion->groupid == -1) ? 0 : $discussion->groupid; - $strre = get_string('re', 'forum'); - if (!(substr($post->subject, 0, strlen($strre)) == $strre)) { - $post->subject = $strre.' '.$post->subject; - } + $strre = get_string('re', 'forum'); + if (!(substr($post->subject, 0, strlen($strre)) == $strre)) { + $post->subject = $strre.' '.$post->subject; + } - unset($SESSION->fromdiscussion); + unset($SESSION->fromdiscussion); - } else if (!empty($edit)) { // User is editing their own post +} else if (!empty($edit)) { // User is editing their own post - if (! $post = forum_get_post_full($edit)) { - print_error('invalidpostid', 'forum'); - } - if ($post->parent) { - if (! $parent = forum_get_post_full($post->parent)) { - print_error('invalidparentpostid', 'forum'); - } + if (! $post = forum_get_post_full($edit)) { + print_error('invalidpostid', 'forum'); + } + if ($post->parent) { + if (! $parent = forum_get_post_full($post->parent)) { + print_error('invalidparentpostid', 'forum'); } + } - if (! $discussion = $DB->get_record("forum_discussions", array("id" => $post->discussion))) { - print_error('notpartofdiscussion', 'forum'); - } - if (! $forum = $DB->get_record("forum", array("id" => $discussion->forum))) { - print_error('invalidforumid', 'forum'); - } - if (! $course = $DB->get_record("course", array("id" => $discussion->course))) { - print_error('invalidcourseid'); - } - if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { - print_error('invalidcoursemodule'); - } else { - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - } - if (!($forum->type == 'news' && !$post->parent && $discussion->timestart > time())) { - if (((time() - $post->created) > $CFG->maxeditingtime) and - !has_capability('mod/forum:editanypost', $modcontext)) { - print_error('maxtimehaspassed', 'forum', '', format_time($CFG->maxeditingtime)); - } - } - if (($post->userid <> $USER->id) and + if (! $discussion = $DB->get_record("forum_discussions", array("id" => $post->discussion))) { + print_error('notpartofdiscussion', 'forum'); + } + if (! $forum = $DB->get_record("forum", array("id" => $discussion->forum))) { + print_error('invalidforumid', 'forum'); + } + if (! $course = $DB->get_record("course", array("id" => $discussion->course))) { + print_error('invalidcourseid'); + } + if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + print_error('invalidcoursemodule'); + } else { + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + } + if (!($forum->type == 'news' && !$post->parent && $discussion->timestart > time())) { + if (((time() - $post->created) > $CFG->maxeditingtime) and !has_capability('mod/forum:editanypost', $modcontext)) { - print_error('cannoteditposts', 'forum'); + print_error('maxtimehaspassed', 'forum', '', format_time($CFG->maxeditingtime)); } + } + if (($post->userid <> $USER->id) and + !has_capability('mod/forum:editanypost', $modcontext)) { + print_error('cannoteditposts', 'forum'); + } - // Load up the $post variable. - $post->edit = $edit; - $post->course = $course->id; - $post->forum = $forum->id; - $post->groupid = ($discussion->groupid == -1) ? 0 : $discussion->groupid; - - $post = trusttext_pre_edit($post, 'message', $modcontext); - - unset($SESSION->fromdiscussion); + // Load up the $post variable. + $post->edit = $edit; + $post->course = $course->id; + $post->forum = $forum->id; + $post->groupid = ($discussion->groupid == -1) ? 0 : $discussion->groupid; + $post = trusttext_pre_edit($post, 'message', $modcontext); - }else if (!empty($delete)) { // User is deleting a post + unset($SESSION->fromdiscussion); - if (! $post = forum_get_post_full($delete)) { - print_error('invalidpostid', 'forum'); - } - if (! $discussion = $DB->get_record("forum_discussions", array("id" => $post->discussion))) { - print_error('notpartofdiscussion', 'forum'); - } - if (! $forum = $DB->get_record("forum", array("id" => $discussion->forum))) { - print_error('invalidforumid', 'forum'); - } - if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $forum->course)) { - print_error('invalidcoursemodule'); - } - if (!$course = $DB->get_record('course', array('id' => $forum->course))) { - print_error('invalidcourseid'); - } - require_login($course, false, $cm); - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); +}else if (!empty($delete)) { // User is deleting a post - if ( !(($post->userid == $USER->id && has_capability('mod/forum:deleteownpost', $modcontext)) - || has_capability('mod/forum:deleteanypost', $modcontext)) ) { - print_error('cannotdeletepost', 'forum'); - } + if (! $post = forum_get_post_full($delete)) { + print_error('invalidpostid', 'forum'); + } + if (! $discussion = $DB->get_record("forum_discussions", array("id" => $post->discussion))) { + print_error('notpartofdiscussion', 'forum'); + } + if (! $forum = $DB->get_record("forum", array("id" => $discussion->forum))) { + print_error('invalidforumid', 'forum'); + } + if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $forum->course)) { + print_error('invalidcoursemodule'); + } + if (!$course = $DB->get_record('course', array('id' => $forum->course))) { + print_error('invalidcourseid'); + } + require_login($course, false, $cm); + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - $replycount = forum_count_replies($post); + if ( !(($post->userid == $USER->id && has_capability('mod/forum:deleteownpost', $modcontext)) + || has_capability('mod/forum:deleteanypost', $modcontext)) ) { + print_error('cannotdeletepost', 'forum'); + } - if (!empty($confirm) && confirm_sesskey()) { // User has confirmed the delete - if ($post->totalscore) { - notice(get_string("couldnotdeleteratings", "forum"), - forum_go_back_to("discuss.php?d=$post->discussion")); + $replycount = forum_count_replies($post); - } else if ($replycount && !has_capability('mod/forum:deleteanypost', $modcontext)) { - print_error("couldnotdeletereplies", "forum", - forum_go_back_to("discuss.php?d=$post->discussion")); + if (!empty($confirm) && confirm_sesskey()) { // User has confirmed the delete - } else { - if (! $post->parent) { // post is a discussion topic as well, so delete discussion - if ($forum->type == 'single') { - notice("Sorry, but you are not allowed to delete that discussion!", - forum_go_back_to("discuss.php?d=$post->discussion")); - } - forum_delete_discussion($discussion, false, $course, $cm, $forum); + if ($post->totalscore) { + notice(get_string("couldnotdeleteratings", "forum"), + forum_go_back_to("discuss.php?d=$post->discussion")); - add_to_log($discussion->course, "forum", "delete discussion", - "view.php?id=$cm->id", "$forum->id", $cm->id); + } else if ($replycount && !has_capability('mod/forum:deleteanypost', $modcontext)) { + print_error("couldnotdeletereplies", "forum", + forum_go_back_to("discuss.php?d=$post->discussion")); - redirect("view.php?f=$discussion->forum"); + } else { + if (! $post->parent) { // post is a discussion topic as well, so delete discussion + if ($forum->type == 'single') { + notice("Sorry, but you are not allowed to delete that discussion!", + forum_go_back_to("discuss.php?d=$post->discussion")); + } + forum_delete_discussion($discussion, false, $course, $cm, $forum); - } else if (forum_delete_post($post, has_capability('mod/forum:deleteanypost', $modcontext), - $course, $cm, $forum)) { + add_to_log($discussion->course, "forum", "delete discussion", + "view.php?id=$cm->id", "$forum->id", $cm->id); - if ($forum->type == 'single') { - // Single discussion forums are an exception. We show - // the forum itself since it only has one discussion - // thread. - $discussionurl = "view.php?f=$forum->id"; - } else { - $discussionurl = "discuss.php?d=$post->discussion"; - } + redirect("view.php?f=$discussion->forum"); - add_to_log($discussion->course, "forum", "delete post", $discussionurl, "$post->id", $cm->id); + } else if (forum_delete_post($post, has_capability('mod/forum:deleteanypost', $modcontext), + $course, $cm, $forum)) { - redirect(forum_go_back_to($discussionurl)); + if ($forum->type == 'single') { + // Single discussion forums are an exception. We show + // the forum itself since it only has one discussion + // thread. + $discussionurl = "view.php?f=$forum->id"; } else { - print_error('errorwhiledelete', 'forum'); + $discussionurl = "discuss.php?d=$post->discussion"; } - } + add_to_log($discussion->course, "forum", "delete post", $discussionurl, "$post->id", $cm->id); - } else { // User just asked to delete something + redirect(forum_go_back_to($discussionurl)); + } else { + print_error('errorwhiledelete', 'forum'); + } + } - forum_set_return(); - if ($replycount) { - if (!has_capability('mod/forum:deleteanypost', $modcontext)) { - print_error("couldnotdeletereplies", "forum", - forum_go_back_to("discuss.php?d=$post->discussion")); - } - echo $OUTPUT->header(); - echo $OUTPUT->confirm(get_string("deletesureplural", "forum", $replycount+1), - "post.php?delete=$delete&confirm=$delete", - $CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'#p'.$post->id); + } else { // User just asked to delete something - forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false); + forum_set_return(); - if (empty($post->edit)) { - $forumtracked = forum_tp_is_tracked($forum); - $posts = forum_get_all_discussion_posts($discussion->id, "created ASC", $forumtracked); - forum_print_posts_nested($course, $cm, $forum, $discussion, $post, false, false, $forumtracked, $posts); - } - } else { - echo $OUTPUT->header(); - echo $OUTPUT->confirm(get_string("deletesure", "forum", $replycount), - "post.php?delete=$delete&confirm=$delete", - $CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'#p'.$post->id); - forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false); + if ($replycount) { + if (!has_capability('mod/forum:deleteanypost', $modcontext)) { + print_error("couldnotdeletereplies", "forum", + forum_go_back_to("discuss.php?d=$post->discussion")); } + echo $OUTPUT->header(); + echo $OUTPUT->confirm(get_string("deletesureplural", "forum", $replycount+1), + "post.php?delete=$delete&confirm=$delete", + $CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'#p'.$post->id); + forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false); + + if (empty($post->edit)) { + $forumtracked = forum_tp_is_tracked($forum); + $posts = forum_get_all_discussion_posts($discussion->id, "created ASC", $forumtracked); + forum_print_posts_nested($course, $cm, $forum, $discussion, $post, false, false, $forumtracked, $posts); + } + } else { + echo $OUTPUT->header(); + echo $OUTPUT->confirm(get_string("deletesure", "forum", $replycount), + "post.php?delete=$delete&confirm=$delete", + $CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'#p'.$post->id); + forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false); } - echo $OUTPUT->footer(); - die; + } + echo $OUTPUT->footer(); + die; - } else if (!empty($prune)) { // Pruning - if (!$post = forum_get_post_full($prune)) { - print_error('invalidpostid', 'forum'); - } - if (!$discussion = $DB->get_record("forum_discussions", array("id" => $post->discussion))) { - print_error('notpartofdiscussion', 'forum'); - } - if (!$forum = $DB->get_record("forum", array("id" => $discussion->forum))) { - print_error('invalidforumid', 'forum'); - } - if ($forum->type == 'single') { - print_error('cannotsplit', 'forum'); - } - if (!$post->parent) { - print_error('alreadyfirstpost', 'forum'); - } - if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $forum->course)) { // For the logs - print_error('invalidcoursemodule'); - } else { - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - } - if (!has_capability('mod/forum:splitdiscussions', $modcontext)) { - print_error('cannotsplit', 'forum'); - } +} else if (!empty($prune)) { // Pruning - if (!empty($name) && confirm_sesskey()) { // User has confirmed the prune + if (!$post = forum_get_post_full($prune)) { + print_error('invalidpostid', 'forum'); + } + if (!$discussion = $DB->get_record("forum_discussions", array("id" => $post->discussion))) { + print_error('notpartofdiscussion', 'forum'); + } + if (!$forum = $DB->get_record("forum", array("id" => $discussion->forum))) { + print_error('invalidforumid', 'forum'); + } + if ($forum->type == 'single') { + print_error('cannotsplit', 'forum'); + } + if (!$post->parent) { + print_error('alreadyfirstpost', 'forum'); + } + if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $forum->course)) { // For the logs + print_error('invalidcoursemodule'); + } else { + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + } + if (!has_capability('mod/forum:splitdiscussions', $modcontext)) { + print_error('cannotsplit', 'forum'); + } - $newdiscussion = new object(); - $newdiscussion->course = $discussion->course; - $newdiscussion->forum = $discussion->forum; - $newdiscussion->name = $name; - $newdiscussion->firstpost = $post->id; - $newdiscussion->userid = $discussion->userid; - $newdiscussion->groupid = $discussion->groupid; - $newdiscussion->assessed = $discussion->assessed; - $newdiscussion->usermodified = $post->userid; - $newdiscussion->timestart = $discussion->timestart; - $newdiscussion->timeend = $discussion->timeend; + if (!empty($name) && confirm_sesskey()) { // User has confirmed the prune - $newid = $DB->insert_record('forum_discussions', $newdiscussion); + $newdiscussion = new object(); + $newdiscussion->course = $discussion->course; + $newdiscussion->forum = $discussion->forum; + $newdiscussion->name = $name; + $newdiscussion->firstpost = $post->id; + $newdiscussion->userid = $discussion->userid; + $newdiscussion->groupid = $discussion->groupid; + $newdiscussion->assessed = $discussion->assessed; + $newdiscussion->usermodified = $post->userid; + $newdiscussion->timestart = $discussion->timestart; + $newdiscussion->timeend = $discussion->timeend; - $newpost = new object(); - $newpost->id = $post->id; - $newpost->parent = 0; - $newpost->subject = $name; + $newid = $DB->insert_record('forum_discussions', $newdiscussion); - $DB->update_record("forum_posts", $newpost); + $newpost = new object(); + $newpost->id = $post->id; + $newpost->parent = 0; + $newpost->subject = $name; - forum_change_discussionid($post->id, $newid); + $DB->update_record("forum_posts", $newpost); - // update last post in each discussion - forum_discussion_update_last_post($discussion->id); - forum_discussion_update_last_post($newid); + forum_change_discussionid($post->id, $newid); - add_to_log($discussion->course, "forum", "prune post", - "discuss.php?d=$newid", "$post->id", $cm->id); + // update last post in each discussion + forum_discussion_update_last_post($discussion->id); + forum_discussion_update_last_post($newid); - redirect(forum_go_back_to("discuss.php?d=$newid")); + add_to_log($discussion->course, "forum", "prune post", + "discuss.php?d=$newid", "$post->id", $cm->id); - } else { // User just asked to prune something + redirect(forum_go_back_to("discuss.php?d=$newid")); - $course = $DB->get_record('course', array('id' => $forum->course)); + } else { // User just asked to prune something - $PAGE->navbar->add(format_string($post->subject, true), new moodle_url($CFG->wwwroot.'/mod/forum/discuss.php', array('d'=>$discussion->id))); - $PAGE->navbar->add(get_string("prune", "forum")); - $PAGE->set_title(format_string($discussion->name).": ".format_string($post->subject)); - echo $OUTPUT->header(); - echo $OUTPUT->heading(get_string('pruneheading', 'forum')); - echo '
'; + $course = $DB->get_record('course', array('id' => $forum->course)); - include('prune.html'); + $PAGE->navbar->add(format_string($post->subject, true), new moodle_url($CFG->wwwroot.'/mod/forum/discuss.php', array('d'=>$discussion->id))); + $PAGE->navbar->add(get_string("prune", "forum")); + $PAGE->set_title(format_string($discussion->name).": ".format_string($post->subject)); + echo $OUTPUT->header(); + echo $OUTPUT->heading(get_string('pruneheading', 'forum')); + echo '
'; - forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false); - echo '
'; - } - echo $OUTPUT->footer(); - die; - } else { - print_error('unknowaction'); + include('prune.html'); + forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false); + echo '
'; } + echo $OUTPUT->footer(); + die; +} else { + print_error('unknowaction'); - if (!isset($coursecontext)) { - // Has not yet been set by post.php. - $coursecontext = get_context_instance(CONTEXT_COURSE, $forum->course); - } +} + +if (!isset($coursecontext)) { + // Has not yet been set by post.php. + $coursecontext = get_context_instance(CONTEXT_COURSE, $forum->course); +} // from now on user must be logged on properly - if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { // For the logs - print_error('invalidcoursemodule'); - } - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - require_login($course, false, $cm); +if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { // For the logs + print_error('invalidcoursemodule'); +} +$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); +require_login($course, false, $cm); - if (isguestuser()) { - // just in case - print_error('noguest'); +if (isguestuser()) { + // just in case + print_error('noguest'); +} + +if (!isset($forum->maxattachments)) { // TODO - delete this once we add a field to the forum table + $forum->maxattachments = 3; +} + +require_once('post_form.php'); + +$mform_post = new mod_forum_post_form('post.php', array('course'=>$course, 'cm'=>$cm, 'coursecontext'=>$coursecontext, 'modcontext'=>$modcontext, 'forum'=>$forum, 'post'=>$post)); + +$draftitemid = file_get_submitted_draft_itemid('attachments'); +file_prepare_draft_area($draftitemid, $modcontext->id, 'forum_attachment', empty($post->id)?null:$post->id); + +//load data into form NOW! + +if ($USER->id != $post->userid) { // Not the original author, so add a message to the end + $data->date = userdate($post->modified); + if ($post->messageformat == FORMAT_HTML) { + $data->name = ''. + fullname($USER).''; + $post->message .= '

('.get_string('editedby', 'forum', $data).')

'; + } else { + $data->name = fullname($USER); + $post->message .= "\n\n(".get_string('editedby', 'forum', $data).')'; } +} - if (!isset($forum->maxattachments)) { // TODO - delete this once we add a field to the forum table - $forum->maxattachments = 3; +if (!empty($parent)) { + $heading = get_string("yourreply", "forum"); +} else { + if ($forum->type == 'qanda') { + $heading = get_string('yournewquestion', 'forum'); + } else { + $heading = get_string('yournewtopic', 'forum'); + } +} + +if (forum_is_subscribed($USER->id, $forum->id)) { + $subscribe = true; + +} else if (forum_user_has_posted($forum->id, 0, $USER->id)) { + $subscribe = false; + +} else { + // user not posted yet - use subscription default specified in profile + $subscribe = !empty($USER->autosubscribe); +} + +$draftid_editor = file_get_submitted_draft_itemid('message'); +$currenttext = file_prepare_draft_area($draftid_editor, $modcontext->id, 'forum_post', empty($post->id) ? null : $post->id, array('subdirs'=>true), $post->message); +$mform_post->set_data(array( 'attachments'=>$draftitemid, + 'general'=>$heading, + 'subject'=>$post->subject, + 'message'=>array( + 'text'=>$currenttext, + 'format'=>empty($post->messageformat) ? FORMAT_HTML : $post->messageformat, //TODO: add some better default + 'itemid'=>$draftid_editor + ), + 'subscribe'=>$subscribe?1:0, + 'mailnow'=>!empty($post->mailnow), + 'userid'=>$post->userid, + 'parent'=>$post->parent, + 'discussion'=>$post->discussion, + 'course'=>$course->id) + + $page_params + + + (isset($post->format)?array( + 'format'=>$post->format): + array())+ + + (isset($discussion->timestart)?array( + 'timestart'=>$discussion->timestart): + array())+ + + (isset($discussion->timeend)?array( + 'timeend'=>$discussion->timeend): + array())+ + + (isset($post->groupid)?array( + 'groupid'=>$post->groupid): + array())+ + + (isset($discussion->id)? + array('discussion'=>$discussion->id): + array())); + +if ($fromform = $mform_post->get_data()) { + + if (empty($SESSION->fromurl)) { + $errordestination = "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"; + } else { + $errordestination = $SESSION->fromurl; } - require_once('post_form.php'); + $fromform->itemid = $fromform->message['itemid']; + $fromform->messageformat = $fromform->message['format']; + $fromform->message = $fromform->message['text']; + // WARNING: the $fromform->message array has been overwritten, do not use it anymore! + $fromform->messagetrust = trusttext_trusted($modcontext); - $mform_post = new mod_forum_post_form('post.php', array('course'=>$course, 'cm'=>$cm, 'coursecontext'=>$coursecontext, 'modcontext'=>$modcontext, 'forum'=>$forum, 'post'=>$post)); + if ($fromform->edit) { // Updating a post + unset($fromform->groupid); + $fromform->id = $fromform->edit; + $message = ''; - $draftitemid = file_get_submitted_draft_itemid('attachments'); - file_prepare_draft_area($draftitemid, $modcontext->id, 'forum_attachment', empty($post->id)?null:$post->id); + //fix for bug #4314 + if (!$realpost = $DB->get_record('forum_posts', array('id' => $fromform->id))) { + $realpost = new object; + $realpost->userid = -1; + } - //load data into form NOW! - if ($USER->id != $post->userid) { // Not the original author, so add a message to the end - $data->date = userdate($post->modified); - if ($post->messageformat == FORMAT_HTML) { - $data->name = ''. - fullname($USER).''; - $post->message .= '

('.get_string('editedby', 'forum', $data).')

'; - } else { - $data->name = fullname($USER); - $post->message .= "\n\n(".get_string('editedby', 'forum', $data).')'; + // if user has edit any post capability + // or has either startnewdiscussion or reply capability and is editting own post + // then he can proceed + // MDL-7066 + if ( !(($realpost->userid == $USER->id && (has_capability('mod/forum:replypost', $modcontext) + || has_capability('mod/forum:startdiscussion', $modcontext))) || + has_capability('mod/forum:editanypost', $modcontext)) ) { + print_error('cannotupdatepost', 'forum'); } - } - if (!empty($parent)) { - $heading = get_string("yourreply", "forum"); - } else { - if ($forum->type == 'qanda') { - $heading = get_string('yournewquestion', 'forum'); - } else { - $heading = get_string('yournewtopic', 'forum'); + $updatepost = $fromform; //realpost + $updatepost->forum = $forum->id; + if (!forum_update_post($updatepost, $mform_post, $message)) { + print_error("couldnotupdate", "forum", $errordestination); } - } - if (forum_is_subscribed($USER->id, $forum->id)) { - $subscribe = true; + // MDL-11818 + if (($forum->type == 'single') && ($updatepost->parent == '0')){ // updating first post of single discussion type -> updating forum intro + $forum->intro = $updatepost->message; + $forum->timemodified = time(); + $DB->update_record("forum", $forum); + } - } else if (forum_user_has_posted($forum->id, 0, $USER->id)) { - $subscribe = false; + $timemessage = 2; + if (!empty($message)) { // if we're printing stuff about the file upload + $timemessage = 4; + } + $message .= '
'.get_string("postupdated", "forum"); - } else { - // user not posted yet - use subscription default specified in profile - $subscribe = !empty($USER->autosubscribe); - } - - $draftid_editor = file_get_submitted_draft_itemid('message'); - $currenttext = file_prepare_draft_area($draftid_editor, $modcontext->id, 'forum_post', empty($post->id) ? null : $post->id, array('subdirs'=>true), $post->message); - $mform_post->set_data(array( 'attachments'=>$draftitemid, - 'general'=>$heading, - 'subject'=>$post->subject, - 'message'=>array( - 'text'=>$currenttext, - 'format'=>empty($post->messageformat) ? FORMAT_HTML : $post->messageformat, //TODO: add some better default - 'itemid'=>$draftid_editor - ), - 'subscribe'=>$subscribe?1:0, - 'mailnow'=>!empty($post->mailnow), - 'userid'=>$post->userid, - 'parent'=>$post->parent, - 'discussion'=>$post->discussion, - 'course'=>$course->id) + - $page_params + - - (isset($post->format)?array( - 'format'=>$post->format): - array())+ - - (isset($discussion->timestart)?array( - 'timestart'=>$discussion->timestart): - array())+ - - (isset($discussion->timeend)?array( - 'timeend'=>$discussion->timeend): - array())+ - - (isset($post->groupid)?array( - 'groupid'=>$post->groupid): - array())+ - - (isset($discussion->id)? - array('discussion'=>$discussion->id): - array())); - - if ($fromform = $mform_post->get_data()) { - - if (empty($SESSION->fromurl)) { - $errordestination = "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"; + if ($subscribemessage = forum_post_subscription($fromform, $forum)) { + $timemessage = 4; + } + if ($forum->type == 'single') { + // Single discussion forums are an exception. We show + // the forum itself since it only has one discussion + // thread. + $discussionurl = "view.php?f=$forum->id"; } else { - $errordestination = $SESSION->fromurl; + $discussionurl = "discuss.php?d=$discussion->id#p$fromform->id"; } + add_to_log($course->id, "forum", "update post", + "$discussionurl&parent=$fromform->id", "$fromform->id", $cm->id); - $fromform->itemid = $fromform->message['itemid']; - $fromform->messageformat = $fromform->message['format']; - $fromform->message = $fromform->message['text']; - // WARNING: the $fromform->message array has been overwritten, do not use it anymore! - $fromform->messagetrust = trusttext_trusted($modcontext); - - if ($fromform->edit) { // Updating a post - unset($fromform->groupid); - $fromform->id = $fromform->edit; - $message = ''; - - //fix for bug #4314 - if (!$realpost = $DB->get_record('forum_posts', array('id' => $fromform->id))) { - $realpost = new object; - $realpost->userid = -1; - } + redirect(forum_go_back_to("$discussionurl"), $message.$subscribemessage, $timemessage); + exit; - // if user has edit any post capability - // or has either startnewdiscussion or reply capability and is editting own post - // then he can proceed - // MDL-7066 - if ( !(($realpost->userid == $USER->id && (has_capability('mod/forum:replypost', $modcontext) - || has_capability('mod/forum:startdiscussion', $modcontext))) || - has_capability('mod/forum:editanypost', $modcontext)) ) { - print_error('cannotupdatepost', 'forum'); - } - - $updatepost = $fromform; //realpost - $updatepost->forum = $forum->id; - if (!forum_update_post($updatepost, $mform_post, $message)) { - print_error("couldnotupdate", "forum", $errordestination); - } - // MDL-11818 - if (($forum->type == 'single') && ($updatepost->parent == '0')){ // updating first post of single discussion type -> updating forum intro - $forum->intro = $updatepost->message; - $forum->timemodified = time(); - $DB->update_record("forum", $forum); - } + } else if ($fromform->discussion) { // Adding a new post to an existing discussion + unset($fromform->groupid); + $message = ''; + $addpost = $fromform; + $addpost->forum=$forum->id; + if ($fromform->id = forum_add_new_post($addpost, $mform_post, $message)) { $timemessage = 2; if (!empty($message)) { // if we're printing stuff about the file upload $timemessage = 4; } - $message .= '
'.get_string("postupdated", "forum"); if ($subscribemessage = forum_post_subscription($fromform, $forum)) { $timemessage = 4; } + + if (!empty($fromform->mailnow)) { + $message .= get_string("postmailnow", "forum"); + $timemessage = 4; + } else { + $message .= '

'.get_string("postaddedsuccess", "forum") . '

'; + $message .= '

'.get_string("postaddedtimeleft", "forum", format_time($CFG->maxeditingtime)) . '

'; + } + if ($forum->type == 'single') { // Single discussion forums are an exception. We show // the forum itself since it only has one discussion // thread. $discussionurl = "view.php?f=$forum->id"; } else { - $discussionurl = "discuss.php?d=$discussion->id#p$fromform->id"; + $discussionurl = "discuss.php?d=$discussion->id"; + } + add_to_log($course->id, "forum", "add post", + "$discussionurl&parent=$fromform->id", "$fromform->id", $cm->id); + + // Update completion state + $completion=new completion_info($course); + if($completion->is_enabled($cm) && + ($forum->completionreplies || $forum->completionposts)) { + $completion->update_state($cm,COMPLETION_COMPLETE); } - add_to_log($course->id, "forum", "update post", - "$discussionurl&parent=$fromform->id", "$fromform->id", $cm->id); - - redirect(forum_go_back_to("$discussionurl"), $message.$subscribemessage, $timemessage); - - exit; + redirect(forum_go_back_to("$discussionurl#p$fromform->id"), $message.$subscribemessage, $timemessage); - } else if ($fromform->discussion) { // Adding a new post to an existing discussion - unset($fromform->groupid); - $message = ''; - $addpost = $fromform; - $addpost->forum=$forum->id; - if ($fromform->id = forum_add_new_post($addpost, $mform_post, $message)) { + } else { + print_error("couldnotadd", "forum", $errordestination); + } + exit; - $timemessage = 2; - if (!empty($message)) { // if we're printing stuff about the file upload - $timemessage = 4; - } + } else { // Adding a new discussion + if (!forum_user_can_post_discussion($forum, $fromform->groupid, -1, $cm, $modcontext)) { + print_error('cannotcreatediscussion', 'forum'); + } + if (empty($fromform->groupid)) { + $fromform->groupid = -1; + } - if ($subscribemessage = forum_post_subscription($fromform, $forum)) { - $timemessage = 4; - } + $fromform->mailnow = empty($fromform->mailnow) ? 0 : 1; + $discussion = $fromform; + $discussion->name = $fromform->subject; + $discussion->intro = $fromform->message; + $newstopic = false; - if (!empty($fromform->mailnow)) { - $message .= get_string("postmailnow", "forum"); - $timemessage = 4; - } else { - $message .= '

'.get_string("postaddedsuccess", "forum") . '

'; - $message .= '

'.get_string("postaddedtimeleft", "forum", format_time($CFG->maxeditingtime)) . '

'; - } + if ($forum->type == 'news' && !$fromform->parent) { + $newstopic = true; + } + $discussion->timestart = $fromform->timestart; + $discussion->timeend = $fromform->timeend; - if ($forum->type == 'single') { - // Single discussion forums are an exception. We show - // the forum itself since it only has one discussion - // thread. - $discussionurl = "view.php?f=$forum->id"; - } else { - $discussionurl = "discuss.php?d=$discussion->id"; - } - add_to_log($course->id, "forum", "add post", - "$discussionurl&parent=$fromform->id", "$fromform->id", $cm->id); - - // Update completion state - $completion=new completion_info($course); - if($completion->is_enabled($cm) && - ($forum->completionreplies || $forum->completionposts)) { - $completion->update_state($cm,COMPLETION_COMPLETE); - } + $message = ''; + if ($discussion->id = forum_add_discussion($discussion, $mform_post, $message)) { - redirect(forum_go_back_to("$discussionurl#p$fromform->id"), $message.$subscribemessage, $timemessage); + add_to_log($course->id, "forum", "add discussion", + "discuss.php?d=$discussion->id", "$discussion->id", $cm->id); - } else { - print_error("couldnotadd", "forum", $errordestination); + $timemessage = 2; + if (!empty($message)) { // if we're printing stuff about the file upload + $timemessage = 4; } - exit; - } else { // Adding a new discussion - if (!forum_user_can_post_discussion($forum, $fromform->groupid, -1, $cm, $modcontext)) { - print_error('cannotcreatediscussion', 'forum'); - } - if (empty($fromform->groupid)) { - $fromform->groupid = -1; + if ($fromform->mailnow) { + $message .= get_string("postmailnow", "forum"); + $timemessage = 4; + } else { + $message .= '

'.get_string("postaddedsuccess", "forum") . '

'; + $message .= '

'.get_string("postaddedtimeleft", "forum", format_time($CFG->maxeditingtime)) . '

'; } - $fromform->mailnow = empty($fromform->mailnow) ? 0 : 1; - $discussion = $fromform; - $discussion->name = $fromform->subject; - $discussion->intro = $fromform->message; - $newstopic = false; - - if ($forum->type == 'news' && !$fromform->parent) { - $newstopic = true; + if ($subscribemessage = forum_post_subscription($discussion, $forum)) { + $timemessage = 4; } - $discussion->timestart = $fromform->timestart; - $discussion->timeend = $fromform->timeend; - $message = ''; - if ($discussion->id = forum_add_discussion($discussion, $mform_post, $message)) { - - add_to_log($course->id, "forum", "add discussion", - "discuss.php?d=$discussion->id", "$discussion->id", $cm->id); - - $timemessage = 2; - if (!empty($message)) { // if we're printing stuff about the file upload - $timemessage = 4; - } - - if ($fromform->mailnow) { - $message .= get_string("postmailnow", "forum"); - $timemessage = 4; - } else { - $message .= '

'.get_string("postaddedsuccess", "forum") . '

'; - $message .= '

'.get_string("postaddedtimeleft", "forum", format_time($CFG->maxeditingtime)) . '

'; - } - - if ($subscribemessage = forum_post_subscription($discussion, $forum)) { - $timemessage = 4; - } - - // Update completion status - $completion=new completion_info($course); - if($completion->is_enabled($cm) && - ($forum->completiondiscussions || $forum->completionposts)) { - $completion->update_state($cm,COMPLETION_COMPLETE); - } - - redirect(forum_go_back_to("view.php?f=$fromform->forum"), $message.$subscribemessage, $timemessage); - - } else { - print_error("couldnotadd", "forum", $errordestination); + // Update completion status + $completion=new completion_info($course); + if($completion->is_enabled($cm) && + ($forum->completiondiscussions || $forum->completionposts)) { + $completion->update_state($cm,COMPLETION_COMPLETE); } - exit; - } - } - - - - // To get here they need to edit a post, and the $post - // variable will be loaded with all the particulars, - // so bring up the form. - - // $course, $forum are defined. $discussion is for edit and reply only. + redirect(forum_go_back_to("view.php?f=$fromform->forum"), $message.$subscribemessage, $timemessage); - if ($post->discussion) { - if (! $toppost = $DB->get_record("forum_posts", array("discussion" => $post->discussion, "parent" => 0))) { - print_error('cannotfindparentpost', 'forum', '', $post->id); + } else { + print_error("couldnotadd", "forum", $errordestination); } - } else { - $toppost->subject = ($forum->type == "news") ? get_string("addanewtopic", "forum") : - get_string("addanewdiscussion", "forum"); - } - if (empty($post->edit)) { - $post->edit = ''; - } - - if (empty($discussion->name)) { - if (empty($discussion)) { - $discussion = new object; - } - $discussion->name = $forum->name; - } - if ($forum->type == 'single') { - // There is only one discussion thread for this forum type. We should - // not show the discussion name (same as forum name in this case) in - // the breadcrumbs. - $strdiscussionname = ''; - } else { - // Show the discussion name in the breadcrumbs. - $strdiscussionname = format_string($discussion->name).':'; + exit; } +} - $forcefocus = empty($reply) ? NULL : 'message'; - - if (!empty($discussion->id)) { - $PAGE->navbar->add(format_string($toppost->subject, true), "discuss.php?d=$discussion->id"); - } - if ($post->parent) { - $PAGE->navbar->add(get_string('editing', 'forum')); - } - $PAGE->set_title("$course->shortname: $strdiscussionname ".format_string($toppost->subject)); - $PAGE->set_heading($course->fullname); - $PAGE->set_focuscontrol($mform_post->focus($forcefocus)); +// To get here they need to edit a post, and the $post +// variable will be loaded with all the particulars, +// so bring up the form. - echo $OUTPUT->header(); +// $course, $forum are defined. $discussion is for edit and reply only. -// checkup - if (!empty($parent) && !forum_user_can_see_post($forum, $discussion, $post, null, $cm)) { - print_error('cannotreply', 'forum'); +if ($post->discussion) { + if (! $toppost = $DB->get_record("forum_posts", array("discussion" => $post->discussion, "parent" => 0))) { + print_error('cannotfindparentpost', 'forum', '', $post->id); } - if (empty($parent) && empty($edit) && !forum_user_can_post_discussion($forum, $groupid, -1, $cm, $modcontext)) { - print_error('cannotcreatediscussion', 'forum'); +} else { + $toppost->subject = ($forum->type == "news") ? get_string("addanewtopic", "forum") : + get_string("addanewdiscussion", "forum"); +} + +if (empty($post->edit)) { + $post->edit = ''; +} + +if (empty($discussion->name)) { + if (empty($discussion)) { + $discussion = new object; } + $discussion->name = $forum->name; +} +if ($forum->type == 'single') { + // There is only one discussion thread for this forum type. We should + // not show the discussion name (same as forum name in this case) in + // the breadcrumbs. + $strdiscussionname = ''; +} else { + // Show the discussion name in the breadcrumbs. + $strdiscussionname = format_string($discussion->name).':'; +} + +$forcefocus = empty($reply) ? NULL : 'message'; + +if (!empty($discussion->id)) { + $PAGE->navbar->add(format_string($toppost->subject, true), "discuss.php?d=$discussion->id"); +} + +if ($post->parent) { + $PAGE->navbar->add(get_string('editing', 'forum')); +} + +$PAGE->set_title("$course->shortname: $strdiscussionname ".format_string($toppost->subject)); +$PAGE->set_heading($course->fullname); +$PAGE->set_focuscontrol($mform_post->focus($forcefocus)); + +echo $OUTPUT->header(); - if ($forum->type == 'qanda' - && !has_capability('mod/forum:viewqandawithoutposting', $modcontext) - && !empty($discussion->id) - && !forum_user_has_posted($forum->id, $discussion->id, $USER->id)) { - echo $OUTPUT->notification(get_string('qandanotify','forum')); +// checkup +if (!empty($parent) && !forum_user_can_see_post($forum, $discussion, $post, null, $cm)) { + print_error('cannotreply', 'forum'); +} +if (empty($parent) && empty($edit) && !forum_user_can_post_discussion($forum, $groupid, -1, $cm, $modcontext)) { + print_error('cannotcreatediscussion', 'forum'); +} + +if ($forum->type == 'qanda' + && !has_capability('mod/forum:viewqandawithoutposting', $modcontext) + && !empty($discussion->id) + && !forum_user_has_posted($forum->id, $discussion->id, $USER->id)) { + echo $OUTPUT->notification(get_string('qandanotify','forum')); +} + +forum_check_throttling($forum, $cm); + +if (!empty($parent)) { + if (! $discussion = $DB->get_record('forum_discussions', array('id' => $parent->discussion))) { + print_error('notpartofdiscussion', 'forum'); } - forum_check_throttling($forum, $cm); - - if (!empty($parent)) { - if (! $discussion = $DB->get_record('forum_discussions', array('id' => $parent->discussion))) { - print_error('notpartofdiscussion', 'forum'); - } - - forum_print_post($parent, $discussion, $forum, $cm, $course, false, false, false); - if (empty($post->edit)) { - if ($forum->type != 'qanda' || forum_user_can_see_discussion($forum, $discussion, $modcontext)) { - $forumtracked = forum_tp_is_tracked($forum); - $posts = forum_get_all_discussion_posts($discussion->id, "created ASC", $forumtracked); - forum_print_posts_threaded($course, $cm, $forum, $discussion, $parent, 0, false, false, $forumtracked, $posts); - } - } - } else { - if (!empty($forum->intro)) { - echo $OUTPUT->box(format_module_intro('forum', $forum, $cm->id), 'generalbox', 'intro'); + forum_print_post($parent, $discussion, $forum, $cm, $course, false, false, false); + if (empty($post->edit)) { + if ($forum->type != 'qanda' || forum_user_can_see_discussion($forum, $discussion, $modcontext)) { + $forumtracked = forum_tp_is_tracked($forum); + $posts = forum_get_all_discussion_posts($discussion->id, "created ASC", $forumtracked); + forum_print_posts_threaded($course, $cm, $forum, $discussion, $parent, 0, false, false, $forumtracked, $posts); } } +} else { + if (!empty($forum->intro)) { + echo $OUTPUT->box(format_module_intro('forum', $forum, $cm->id), 'generalbox', 'intro'); + } +} - $mform_post->display(); - - echo $OUTPUT->footer(); +$mform_post->display(); +echo $OUTPUT->footer(); -?> +?> \ No newline at end of file diff --git a/mod/forum/rate.php b/mod/forum/rate.php index 3db0a72356..8d22663058 100644 --- a/mod/forum/rate.php +++ b/mod/forum/rate.php @@ -1,108 +1,110 @@ -get_record('forum', array('id' => $forumid))) { - print_error('invalidforumid', 'forum'); - } - - if (!$course = $DB->get_record('course', array('id' => $forum->course))) { - print_error('invalidcourseid'); - } +$PAGE->set_url(new moodle_url($CFG->wwwroot.'/mod/forum/rate.php', array('forumid'=>$forumid))); - if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { - print_error('invalidcoursemodule'); - } else { - $forum->cmidnumber = $cm->id; //MDL-12961 - } +if (!$forum = $DB->get_record('forum', array('id' => $forumid))) { + print_error('invalidforumid', 'forum'); +} - require_login($course, false, $cm); +if (!$course = $DB->get_record('course', array('id' => $forum->course))) { + print_error('invalidcourseid'); +} - if (isguestuser()) { - print_error('noguestrate', 'forum'); +if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { + print_error('invalidcoursemodule'); +} else { + $forum->cmidnumber = $cm->id; //MDL-12961 } - if (!$forum->assessed) { - print_error('norate', 'forum'); - } +require_login($course, false, $cm); - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - require_capability('mod/forum:rate', $context); +if (isguestuser()) { + print_error('noguestrate', 'forum'); +} - if ($data = data_submitted()) { +if (!$forum->assessed) { + print_error('norate', 'forum'); +} - $discussionid = false; +$context = get_context_instance(CONTEXT_MODULE, $cm->id); +require_capability('mod/forum:rate', $context); - /// Calculate scale values - $scale_values = make_grades_menu($forum->scale); +if ($data = data_submitted()) { - foreach ((array)$data as $postid => $rating) { - if (!is_numeric($postid)) { - continue; - } + $discussionid = false; - // following query validates the submitted postid too - $sql = "SELECT fp.* - FROM {forum_posts} fp, {forum_discussions} fd - WHERE fp.id = ? AND fp.discussion = fd.id AND fd.forum = ?"; +/// Calculate scale values + $scale_values = make_grades_menu($forum->scale); - if (!$post = $DB->get_record_sql($sql, array($postid, $forum->id))) { - print_error('invalidpostid', 'forum', '', $postid); - } + foreach ((array)$data as $postid => $rating) { + if (!is_numeric($postid)) { + continue; + } - $discussionid = $post->discussion; + // following query validates the submitted postid too + $sql = "SELECT fp.* + FROM {forum_posts} fp, {forum_discussions} fd + WHERE fp.id = ? AND fp.discussion = fd.id AND fd.forum = ?"; - if ($forum->assesstimestart and $forum->assesstimefinish) { - if ($post->created < $forum->assesstimestart or $post->created > $forum->assesstimefinish) { - // we can not rate this, ignore it - this should not happen anyway unless teacher changes setting - continue; - } - } + if (!$post = $DB->get_record_sql($sql, array($postid, $forum->id))) { + print_error('invalidpostid', 'forum', '', $postid); + } + + $discussionid = $post->discussion; - /// Check rate is valid for for that forum scale values - if (!array_key_exists($rating, $scale_values) && $rating != FORUM_UNSET_POST_RATING) { - print_error('invalidrate', 'forum', '', $rating); + if ($forum->assesstimestart and $forum->assesstimefinish) { + if ($post->created < $forum->assesstimestart or $post->created > $forum->assesstimefinish) { + // we can not rate this, ignore it - this should not happen anyway unless teacher changes setting + continue; } + } - if ($rating == FORUM_UNSET_POST_RATING) { - $DB->delete_records('forum_ratings', array('post' => $postid, 'userid' => $USER->id)); - forum_update_grades($forum, $post->userid); + /// Check rate is valid for for that forum scale values + if (!array_key_exists($rating, $scale_values) && $rating != FORUM_UNSET_POST_RATING) { + print_error('invalidrate', 'forum', '', $rating); + } + + if ($rating == FORUM_UNSET_POST_RATING) { + $DB->delete_records('forum_ratings', array('post' => $postid, 'userid' => $USER->id)); + forum_update_grades($forum, $post->userid); - } else if ($oldrating = $DB->get_record('forum_ratings', array('userid' => $USER->id, 'post' => $post->id))) { - if ($rating != $oldrating->rating) { - $oldrating->rating = $rating; - $oldrating->time = time(); - $DB->update_record('forum_ratings', $oldrating); - forum_update_grades($forum, $post->userid); - } - - } else { - $newrating = new object(); - $newrating->userid = $USER->id; - $newrating->time = time(); - $newrating->post = $post->id; - $newrating->rating = $rating; - - $DB->insert_record('forum_ratings', $newrating); + } else if ($oldrating = $DB->get_record('forum_ratings', array('userid' => $USER->id, 'post' => $post->id))) { + if ($rating != $oldrating->rating) { + $oldrating->rating = $rating; + $oldrating->time = time(); + $DB->update_record('forum_ratings', $oldrating); forum_update_grades($forum, $post->userid); } - } - if ($forum->type == 'single' or !$discussionid) { - redirect("$CFG->wwwroot/mod/forum/view.php?id=$cm->id", get_string('ratingssaved', 'forum')); } else { - redirect("$CFG->wwwroot/mod/forum/discuss.php?d=$discussionid", get_string('ratingssaved', 'forum')); + $newrating = new object(); + $newrating->userid = $USER->id; + $newrating->time = time(); + $newrating->post = $post->id; + $newrating->rating = $rating; + + $DB->insert_record('forum_ratings', $newrating); + forum_update_grades($forum, $post->userid); } + } + if ($forum->type == 'single' or !$discussionid) { + redirect("$CFG->wwwroot/mod/forum/view.php?id=$cm->id", get_string('ratingssaved', 'forum')); } else { - print_error('invalidaccess', 'forum'); + redirect("$CFG->wwwroot/mod/forum/discuss.php?d=$discussionid", get_string('ratingssaved', 'forum')); } -?> +} else { + print_error('invalidaccess', 'forum'); +} + +?> \ No newline at end of file diff --git a/mod/forum/rate_ajax.php b/mod/forum/rate_ajax.php index f0478f715f..376acd2fab 100644 --- a/mod/forum/rate_ajax.php +++ b/mod/forum/rate_ajax.php @@ -1,4 +1,4 @@ -dirroot . '/mod/forum/lib.php'); +require_once('../../config.php'); +require_once($CFG->dirroot . '/mod/forum/lib.php'); /// In developer debug mode, when there is a debug=1 in the URL send as plain text /// for easier debugging. - if (debugging('', DEBUG_DEVELOPER) && optional_param('debug', false, PARAM_BOOL)) { - header('Content-type: text/plain; charset=UTF-8'); - $debugmode = true; - } else { - header('Content-type: application/json'); - $debugmode = false; - } +if (debugging('', DEBUG_DEVELOPER) && optional_param('debug', false, PARAM_BOOL)) { + header('Content-type: text/plain; charset=UTF-8'); + $debugmode = true; +} else { + header('Content-type: application/json'); + $debugmode = false; +} /// Here we maintain response contents - $response = array('status'=> 'Error', 'message'=>'kk'); +$response = array('status'=> 'Error', 'message'=>'kk'); /// Check access. - if (!isloggedin()) { - print_error('mustbeloggedin'); - } - if (isguestuser()) { - print_error('noguestrate', 'forum'); - } - if (!confirm_sesskey()) { - print_error('invalidsesskey'); - } +if (!isloggedin()) { + print_error('mustbeloggedin'); +} +if (isguestuser()) { + print_error('noguestrate', 'forum'); +} +if (!confirm_sesskey()) { + print_error('invalidsesskey'); +} /// Check required params - $postid = required_param('postid', PARAM_INT); // The postid to rate - $rate = required_param('rate', PARAM_INT); // The rate to apply +$postid = required_param('postid', PARAM_INT); // The postid to rate +$rate = required_param('rate', PARAM_INT); // The rate to apply + +$PAGE->set_url(new moodle_url($CFG->wwwroot.'/mod/forum/rate_ajax.php', array('postid'=>$postid,'rate'=>$rate))); /// Check postid is valid - if (!$post = $DB->get_record_sql('SELECT p.*, - d.forum AS forumid - FROM {forum_posts} p - JOIN {forum_discussions} d ON p.discussion = d.id - WHERE p.id = ?', array($postid))) { - print_error('invalidpostid', 'forum', '', $postid);; - } +if (!$post = $DB->get_record_sql('SELECT p.*, + d.forum AS forumid + FROM {forum_posts} p + JOIN {forum_discussions} d ON p.discussion = d.id + WHERE p.id = ?', array($postid))) { + print_error('invalidpostid', 'forum', '', $postid);; +} /// Check forum - if (!$forum = $DB->get_record('forum', array('id' => $post->forumid))) { - print_error('invalidforumid', 'forum'); - } +if (!$forum = $DB->get_record('forum', array('id' => $post->forumid))) { + print_error('invalidforumid', 'forum'); +} /// Check course - if (!$course = $DB->get_record('course', array('id' => $forum->course))) { - print_error('invalidcourseid'); - } +if (!$course = $DB->get_record('course', array('id' => $forum->course))) { + print_error('invalidcourseid'); +} /// Check coursemodule - if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { - print_error('invalidcoursemodule'); - } else { - $forum->cmidnumber = $cm->id; //MDL-12961 - } +if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { + print_error('invalidcoursemodule'); +} else { + $forum->cmidnumber = $cm->id; //MDL-12961 +} /// Check forum can be rated - if (!$forum->assessed) { - print_error('norate', 'forum'); - } +if (!$forum->assessed) { + print_error('norate', 'forum'); +} /// Check user can rate - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - require_capability('mod/forum:rate', $context); +$context = get_context_instance(CONTEXT_MODULE, $cm->id); +require_capability('mod/forum:rate', $context); /// Check timed ratings - if ($forum->assesstimestart and $forum->assesstimefinish) { - if ($post->created < $forum->assesstimestart or $post->created > $forum->assesstimefinish) { - // we can not rate this, ignore it - this should not happen anyway unless teacher changes setting - print_error('norate', 'forum'); - } +if ($forum->assesstimestart and $forum->assesstimefinish) { + if ($post->created < $forum->assesstimestart or $post->created > $forum->assesstimefinish) { + // we can not rate this, ignore it - this should not happen anyway unless teacher changes setting + print_error('norate', 'forum'); } +} /// Calculate scale values - $scale_values = make_grades_menu($forum->scale); +$scale_values = make_grades_menu($forum->scale); /// Check rate is valid for for that forum scale values - if (!array_key_exists($rate, $scale_values) && $rate != FORUM_UNSET_POST_RATING) { - print_error('invalidrate', 'forum'); - } +if (!array_key_exists($rate, $scale_values) && $rate != FORUM_UNSET_POST_RATING) { + print_error('invalidrate', 'forum'); +} /// Everything ready, process rate /// Deleting rate - if ($rate == FORUM_UNSET_POST_RATING) { - $DB->delete_records('forum_ratings', array('post' => $postid, 'userid' => $USER->id)); +if ($rate == FORUM_UNSET_POST_RATING) { + $DB->delete_records('forum_ratings', array('post' => $postid, 'userid' => $USER->id)); /// Updating rate - } else if ($oldrating = $DB->get_record('forum_ratings', array('userid' => $USER->id, 'post' => $post->id))) { - if ($rate != $oldrating->rating) { - $oldrating->rating = $rate; - $oldrating->time = time(); - $DB->update_record('forum_ratings', $oldrating); - } +} else if ($oldrating = $DB->get_record('forum_ratings', array('userid' => $USER->id, 'post' => $post->id))) { + if ($rate != $oldrating->rating) { + $oldrating->rating = $rate; + $oldrating->time = time(); + $DB->update_record('forum_ratings', $oldrating); + } /// Inserting rate - } else { - $newrating = new object(); - $newrating->userid = $USER->id; - $newrating->time = time(); - $newrating->post = $post->id; - $newrating->rating = $rate; - $DB->insert_record('forum_ratings', $newrating); - } +} else { + $newrating = new object(); + $newrating->userid = $USER->id; + $newrating->time = time(); + $newrating->post = $post->id; + $newrating->rating = $rate; + $DB->insert_record('forum_ratings', $newrating); +} /// Update grades - forum_update_grades($forum, $post->userid); +forum_update_grades($forum, $post->userid); /// Check user can see any rate - $canviewanyrating = has_capability('mod/forum:viewanyrating', $context); +$canviewanyrating = has_capability('mod/forum:viewanyrating', $context); /// Decide if rates info is displayed - $rateinfo = ''; - if ($canviewanyrating) { - $rateinfo = forum_print_ratings($postid, $scale_values, $forum->assessed, true, NULL, true); - } +$rateinfo = ''; +if ($canviewanyrating) { + $rateinfo = forum_print_ratings($postid, $scale_values, $forum->assessed, true, NULL, true); +} /// Calculate response - $response['status'] = 'Ok'; - $response['message'] = $rateinfo; - echo json_encode($response); +$response['status'] = 'Ok'; +$response['message'] = $rateinfo; +echo json_encode($response); -?> +?> \ No newline at end of file diff --git a/mod/forum/report.php b/mod/forum/report.php index 4f3f5a4e72..83566313c0 100644 --- a/mod/forum/report.php +++ b/mod/forum/report.php @@ -1,87 +1,94 @@ -get_record('forum_posts', array('id' => $id))) { - print_error('invalidpostid','forum'); - } - - if (! $discussion = $DB->get_record('forum_discussions', array('id' => $post->discussion))) { - print_error('invaliddiscussion', 'forum'); - } - - if (! $forum = $DB->get_record('forum', array('id' => $discussion->forum))) { - print_error('invalidforumid', 'forum'); - } - - if (! $course = $DB->get_record('course', array('id' => $forum->course))) { - print_error('invalidcourseid'); - } - - if (! $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { - print_error('invalidcoursemodule'); +require_once("../../config.php"); +require_once("lib.php"); + +$id = required_param('id', PARAM_INT); +$sort = optional_param('sort', '', PARAM_ALPHA); + +$url = new moodle_url($CFG->wwwroot.'/mod/forum/report.php', array('id'=>$id)); +if ($sort !== 0) { + $url->param('sort', $sort); +} +$PAGE->set_url($url); + +if (! $post = $DB->get_record('forum_posts', array('id' => $id))) { + print_error('invalidpostid','forum'); +} + +if (! $discussion = $DB->get_record('forum_discussions', array('id' => $post->discussion))) { + print_error('invaliddiscussion', 'forum'); +} + +if (! $forum = $DB->get_record('forum', array('id' => $discussion->forum))) { + print_error('invalidforumid', 'forum'); +} + +if (! $course = $DB->get_record('course', array('id' => $forum->course))) { + print_error('invalidcourseid'); +} + +if (! $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { + print_error('invalidcoursemodule'); +} + +require_login($course, false, $cm); +$context = get_context_instance(CONTEXT_MODULE, $cm->id); + +if (!$forum->assessed) { + print_error('norate', 'forum'); +} + +if (!has_capability('mod/forum:viewrating', $context)) { + print_error('noviewrate', 'forum'); +} +if (!has_capability('mod/forum:viewanyrating', $context) and $USER->id != $post->userid) { + print_error('noviewanyrate', 'forum'); +} + +switch ($sort) { + case 'firstname': $sqlsort = "u.firstname ASC"; break; + case 'rating': $sqlsort = "r.rating ASC"; break; + default: $sqlsort = "r.time ASC"; +} + +$scalemenu = make_grades_menu($forum->scale); + +$strratings = get_string('ratings', 'forum'); +$strrating = get_string('rating', 'forum'); +$strname = get_string('name'); +$strtime = get_string('time'); + +$PAGE->set_title("$strratings: ".format_string($post->subject)); +echo $OUTPUT->header(); + +if (!$ratings = forum_get_ratings($post->id, $sqlsort)) { + print_error('noresult', 'forum', '', format_string($post->subject)); + +} else { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + foreach ($ratings as $rating) { + echo ''; + echo "'; + echo '"; + echo '"; + echo "\n"; } + echo "
 id&sort=firstname\">$strnameid&sort=rating\">$strratingid&sort=time\">$strtime
"; + echo $OUTPUT->user_picture(moodle_user_picture::make($rating, $forum->course)); + echo ''.fullname($rating).''.$scalemenu[$rating->rating]."'.userdate($rating->time)."
"; + echo "
"; +} - require_login($course, false, $cm); - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - - if (!$forum->assessed) { - print_error('norate', 'forum'); - } - - if (!has_capability('mod/forum:viewrating', $context)) { - print_error('noviewrate', 'forum'); - } - if (!has_capability('mod/forum:viewanyrating', $context) and $USER->id != $post->userid) { - print_error('noviewanyrate', 'forum'); - } - - switch ($sort) { - case 'firstname': $sqlsort = "u.firstname ASC"; break; - case 'rating': $sqlsort = "r.rating ASC"; break; - default: $sqlsort = "r.time ASC"; - } - - $scalemenu = make_grades_menu($forum->scale); - - $strratings = get_string('ratings', 'forum'); - $strrating = get_string('rating', 'forum'); - $strname = get_string('name'); - $strtime = get_string('time'); - - $PAGE->set_title("$strratings: ".format_string($post->subject)); - echo $OUTPUT->header(); - - if (!$ratings = forum_get_ratings($post->id, $sqlsort)) { - print_error('noresult', 'forum', '', format_string($post->subject)); - - } else { - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - foreach ($ratings as $rating) { - echo ''; - echo "'; - echo '"; - echo '"; - echo "\n"; - } - echo "
 id&sort=firstname\">$strnameid&sort=rating\">$strratingid&sort=time\">$strtime
"; - echo $OUTPUT->user_picture(moodle_user_picture::make($rating, $forum->course)); - echo ''.fullname($rating).''.$scalemenu[$rating->rating]."'.userdate($rating->time)."
"; - echo "
"; - } +echo $OUTPUT->close_window_button(); +echo $OUTPUT->footer(); - echo $OUTPUT->close_window_button(); - echo $OUTPUT->footer(); -?> +?> \ No newline at end of file diff --git a/mod/forum/search.php b/mod/forum/search.php index ed67ff01e5..1280c2c4b7 100644 --- a/mod/forum/search.php +++ b/mod/forum/search.php @@ -1,242 +1,242 @@ -set_url($FULLME); - if (empty($search)) { // Check the other parameters instead - if (!empty($words)) { - $search .= ' '.$words; - } - if (!empty($userid)) { - $search .= ' userid:'.$userid; - } - if (!empty($forumid)) { - $search .= ' forumid:'.$forumid; - } - if (!empty($user)) { - $search .= ' '.forum_clean_search_terms($user, 'user:'); - } - if (!empty($subject)) { - $search .= ' '.forum_clean_search_terms($subject, 'subject:'); - } - if (!empty($fullwords)) { - $search .= ' '.forum_clean_search_terms($fullwords, '+'); - } - if (!empty($notwords)) { - $search .= ' '.forum_clean_search_terms($notwords, '-'); - } - if (!empty($phrase)) { - $search .= ' "'.$phrase.'"'; - } - if (!empty($datefrom)) { - $search .= ' datefrom:'.$datefrom; - } - if (!empty($dateto)) { - $search .= ' dateto:'.$dateto; - } - $individualparams = true; - } else { - $individualparams = false; +if (empty($search)) { // Check the other parameters instead + if (!empty($words)) { + $search .= ' '.$words; } - - if ($search) { - $search = forum_clean_search_terms($search); + if (!empty($userid)) { + $search .= ' userid:'.$userid; } - - if (!$course = $DB->get_record('course', array('id'=>$id))) { - print_error('invalidcourseid'); + if (!empty($forumid)) { + $search .= ' forumid:'.$forumid; + } + if (!empty($user)) { + $search .= ' '.forum_clean_search_terms($user, 'user:'); + } + if (!empty($subject)) { + $search .= ' '.forum_clean_search_terms($subject, 'subject:'); + } + if (!empty($fullwords)) { + $search .= ' '.forum_clean_search_terms($fullwords, '+'); + } + if (!empty($notwords)) { + $search .= ' '.forum_clean_search_terms($notwords, '-'); } + if (!empty($phrase)) { + $search .= ' "'.$phrase.'"'; + } + if (!empty($datefrom)) { + $search .= ' datefrom:'.$datefrom; + } + if (!empty($dateto)) { + $search .= ' dateto:'.$dateto; + } + $individualparams = true; +} else { + $individualparams = false; +} - require_course_login($course); +if ($search) { + $search = forum_clean_search_terms($search); +} - add_to_log($course->id, "forum", "search", "search.php?id=$course->id&search=".urlencode($search), $search); +if (!$course = $DB->get_record('course', array('id'=>$id))) { + print_error('invalidcourseid'); +} - $strforums = get_string("modulenameplural", "forum"); - $strsearch = get_string("search", "forum"); - $strsearchresults = get_string("searchresults", "forum"); - $strpage = get_string("page"); +require_course_login($course); - if (!$search || $showform) { +add_to_log($course->id, "forum", "search", "search.php?id=$course->id&search=".urlencode($search), $search); - $PAGE->navbar->add($strforums, new moodle_url($CFG->wwwroot.'/mod/forum/index.php', array('id'=>$course->id))); - $PAGE->navbar->add($strsearch); +$strforums = get_string("modulenameplural", "forum"); +$strsearch = get_string("search", "forum"); +$strsearchresults = get_string("searchresults", "forum"); +$strpage = get_string("page"); - $PAGE->set_title($strsearch); - $PAGE->set_focuscontrol('search.words'); - echo $OUTPUT->header(); +if (!$search || $showform) { - forum_print_big_search_form($course); - echo $OUTPUT->footer(); - exit; - } + $PAGE->navbar->add($strforums, new moodle_url($CFG->wwwroot.'/mod/forum/index.php', array('id'=>$course->id))); + $PAGE->navbar->add($strsearch); -/// We need to do a search now and print results + $PAGE->set_title($strsearch); + $PAGE->set_focuscontrol('search.words'); + echo $OUTPUT->header(); - $searchterms = str_replace('forumid:', 'instance:', $search); - $searchterms = explode(' ', $searchterms); + forum_print_big_search_form($course); + echo $OUTPUT->footer(); + exit; +} - $searchform = forum_search_form($course, $search); +/// We need to do a search now and print results - $PAGE->navbar->add($strsearch, new moodle_url($CFG->wwwroot.'/mod/forum/search.php', array('id'=>$course->id))); - $PAGE->navbar->add(s($search, true)); - if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount)) { - $PAGE->set_title($strsearchresults); - $PAGE->set_focuscontrol('search.words'); - echo $OUTPUT->header(); - echo $OUTPUT->heading(get_string("nopostscontaining", "forum", $search)); +$searchterms = str_replace('forumid:', 'instance:', $search); +$searchterms = explode(' ', $searchterms); - if (!$individualparams) { - $words = $search; - } +$searchform = forum_search_form($course, $search); - forum_print_big_search_form($course); +$PAGE->navbar->add($strsearch, new moodle_url($CFG->wwwroot.'/mod/forum/search.php', array('id'=>$course->id))); +$PAGE->navbar->add(s($search, true)); +if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount)) { + $PAGE->set_title($strsearchresults); + $PAGE->set_focuscontrol('search.words'); + echo $OUTPUT->header(); + echo $OUTPUT->heading(get_string("nopostscontaining", "forum", $search)); - echo $OUTPUT->footer(); - exit; + if (!$individualparams) { + $words = $search; } - $PAGE->set_title($strsearchresults); - $PAGE->set_button($searchform); - echo $OUTPUT->header(); - echo ''; - - echo $OUTPUT->heading("$strsearchresults: $totalcount"); - - $url = new moodle_url('search.php', array('search' => urlencode($search), 'id' => $course->id, 'perpage' => $perpage)); - echo $OUTPUT->paging_bar(moodle_paging_bar::make($totalcount, $page, $perpage, $url)); - - //added to implement highlighting of search terms found only in HTML markup - //fiedorow - 9/2/2005 - $strippedsearch = str_replace('user:','',$search); - $strippedsearch = str_replace('subject:','',$strippedsearch); - $strippedsearch = str_replace('"','',$strippedsearch); - $searchterms = explode(' ', $strippedsearch); // Search for words independently - foreach ($searchterms as $key => $searchterm) { - if (preg_match('/^\-/',$searchterm)) { - unset($searchterms[$key]); - } else { - $searchterms[$key] = preg_replace('/^\+/','',$searchterm); - } + forum_print_big_search_form($course); + + echo $OUTPUT->footer(); + exit; +} + +$PAGE->set_title($strsearchresults); +$PAGE->set_button($searchform); +echo $OUTPUT->header(); +echo ''; + +echo $OUTPUT->heading("$strsearchresults: $totalcount"); + +$url = new moodle_url('search.php', array('search' => urlencode($search), 'id' => $course->id, 'perpage' => $perpage)); +echo $OUTPUT->paging_bar(moodle_paging_bar::make($totalcount, $page, $perpage, $url)); + +//added to implement highlighting of search terms found only in HTML markup +//fiedorow - 9/2/2005 +$strippedsearch = str_replace('user:','',$search); +$strippedsearch = str_replace('subject:','',$strippedsearch); +$strippedsearch = str_replace('"','',$strippedsearch); +$searchterms = explode(' ', $strippedsearch); // Search for words independently +foreach ($searchterms as $key => $searchterm) { + if (preg_match('/^\-/',$searchterm)) { + unset($searchterms[$key]); + } else { + $searchterms[$key] = preg_replace('/^\+/','',$searchterm); } - $strippedsearch = implode(' ', $searchterms); // Rebuild the string +} +$strippedsearch = implode(' ', $searchterms); // Rebuild the string - foreach ($posts as $post) { +foreach ($posts as $post) { - // Replace the simple subject with the three items forum name -> thread name -> subject - // (if all three are appropriate) each as a link. - if (! $discussion = $DB->get_record('forum_discussions', array('id' => $post->discussion))) { - print_error('invaliddiscussionid', 'forum'); - } - if (! $forum = $DB->get_record('forum', array('id' => "$discussion->forum"))) { - print_error('invalidforumid', 'forum'); - } + // Replace the simple subject with the three items forum name -> thread name -> subject + // (if all three are appropriate) each as a link. + if (! $discussion = $DB->get_record('forum_discussions', array('id' => $post->discussion))) { + print_error('invaliddiscussionid', 'forum'); + } + if (! $forum = $DB->get_record('forum', array('id' => "$discussion->forum"))) { + print_error('invalidforumid', 'forum'); + } - if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { - print_error('invalidcoursemodule'); - } + if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { + print_error('invalidcoursemodule'); + } - $post->subject = highlight($strippedsearch, $post->subject); - $discussion->name = highlight($strippedsearch, $discussion->name); + $post->subject = highlight($strippedsearch, $post->subject); + $discussion->name = highlight($strippedsearch, $discussion->name); - $fullsubject = "id\">".format_string($forum->name,true).""; - if ($forum->type != 'single') { - $fullsubject .= " -> id\">".format_string($discussion->name,true).""; - if ($post->parent != 0) { - $fullsubject .= " -> discussion&parent=$post->id\">".format_string($post->subject,true).""; - } + $fullsubject = "id\">".format_string($forum->name,true).""; + if ($forum->type != 'single') { + $fullsubject .= " -> id\">".format_string($discussion->name,true).""; + if ($post->parent != 0) { + $fullsubject .= " -> discussion&parent=$post->id\">".format_string($post->subject,true).""; } + } - $post->subject = $fullsubject; - $post->subjectnoformat = true; + $post->subject = $fullsubject; + $post->subjectnoformat = true; - // Identify search terms only found in HTML markup, and add a warning about them to - // the start of the message text. However, do not do the highlighting here. forum_print_post - // will do it for us later. - $missing_terms = ""; + // Identify search terms only found in HTML markup, and add a warning about them to + // the start of the message text. However, do not do the highlighting here. forum_print_post + // will do it for us later. + $missing_terms = ""; - $options = new object(); - $options->trusted = $post->messagetrust; - $message = highlight($strippedsearch, - format_text($post->message, $post->messageformat, $options, $course->id), - 0, '', ''); + $options = new object(); + $options->trusted = $post->messagetrust; + $message = highlight($strippedsearch, + format_text($post->message, $post->messageformat, $options, $course->id), + 0, '', ''); - foreach ($searchterms as $searchterm) { - if (preg_match("/$searchterm/i",$message) && !preg_match('/'.$searchterm.'<\/fgw9sdpq4>/i',$message)) { - $missing_terms .= " $searchterm"; - } + foreach ($searchterms as $searchterm) { + if (preg_match("/$searchterm/i",$message) && !preg_match('/'.$searchterm.'<\/fgw9sdpq4>/i',$message)) { + $missing_terms .= " $searchterm"; } + } - if ($missing_terms) { - $strmissingsearchterms = get_string('missingsearchterms','forum'); - $post->message = '

'.$strmissingsearchterms.' '.$missing_terms.'

'.$post->message; - } + if ($missing_terms) { + $strmissingsearchterms = get_string('missingsearchterms','forum'); + $post->message = '

'.$strmissingsearchterms.' '.$missing_terms.'

'.$post->message; + } - // Prepare a link to the post in context, to be displayed after the forum post. - $fulllink = "discussion#p$post->id\">".get_string("postincontext", "forum").""; + // Prepare a link to the post in context, to be displayed after the forum post. + $fulllink = "discussion#p$post->id\">".get_string("postincontext", "forum").""; - // Now pring the post. - forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false, false, - $fulllink, $strippedsearch, -99, false); - } + // Now pring the post. + forum_print_post($post, $discussion, $forum, $cm, $course, false, false, false, false, + $fulllink, $strippedsearch, -99, false); +} - echo $OUTPUT->paging_bar(moodle_paging_bar::make($totalcount, $page, $perpage, $url)); +echo $OUTPUT->paging_bar(moodle_paging_bar::make($totalcount, $page, $perpage, $url)); - echo $OUTPUT->footer(); +echo $OUTPUT->footer(); @@ -406,4 +406,4 @@ function forum_menu_list($course) { return $menu; } -?> +?> \ No newline at end of file diff --git a/mod/forum/settracking.php b/mod/forum/settracking.php index 6e0a6b6252..05e848f467 100644 --- a/mod/forum/settracking.php +++ b/mod/forum/settracking.php @@ -2,50 +2,56 @@ // Set tracking option for the forum. - require_once("../../config.php"); - require_once("lib.php"); - - $id = required_param('id',PARAM_INT); // The forum to subscribe or unsubscribe to - $returnpage = optional_param('returnpage', 'index.php', PARAM_FILE); // Page to return to. - - if (! $forum = $DB->get_record("forum", array("id" => $id))) { - print_error('invalidforumid', 'forum'); - } - - if (! $course = $DB->get_record("course", array("id" => $forum->course))) { - print_error('invalidcoursemodule'); - } - - if (! $cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { - print_error('invalidcoursemodule'); - } - - require_course_login($course, false, $cm); - - $returnto = forum_go_back_to($returnpage.'?id='.$course->id.'&f='.$forum->id); - - if (!forum_tp_can_track_forums($forum)) { - redirect($returnto); +require_once("../../config.php"); +require_once("lib.php"); + +$id = required_param('id',PARAM_INT); // The forum to subscribe or unsubscribe to +$returnpage = optional_param('returnpage', 'index.php', PARAM_FILE); // Page to return to. + +$url = new moodle_url($CFG->wwwroot.'/mod/forum/settracking.php', array('id'=>$id)); +if ($returnpage !== 'index.php') { + $url->param('returnpage', $returnpage); +} +$PAGE->set_url($url); + +if (! $forum = $DB->get_record("forum", array("id" => $id))) { + print_error('invalidforumid', 'forum'); +} + +if (! $course = $DB->get_record("course", array("id" => $forum->course))) { + print_error('invalidcoursemodule'); +} + +if (! $cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + print_error('invalidcoursemodule'); +} + +require_course_login($course, false, $cm); + +$returnto = forum_go_back_to($returnpage.'?id='.$course->id.'&f='.$forum->id); + +if (!forum_tp_can_track_forums($forum)) { + redirect($returnto); +} + +$info = new object(); +$info->name = fullname($USER); +$info->forum = format_string($forum->name); +if (forum_tp_is_tracked($forum) ) { + if (forum_tp_stop_tracking($forum->id)) { + add_to_log($course->id, "forum", "stop tracking", "view.php?f=$forum->id", $forum->id, $cm->id); + redirect($returnto, get_string("nownottracking", "forum", $info), 1); + } else { + print_error('cannottrack', '', $_SERVER["HTTP_REFERER"]); } - $info = new object(); - $info->name = fullname($USER); - $info->forum = format_string($forum->name); - if (forum_tp_is_tracked($forum) ) { - if (forum_tp_stop_tracking($forum->id)) { - add_to_log($course->id, "forum", "stop tracking", "view.php?f=$forum->id", $forum->id, $cm->id); - redirect($returnto, get_string("nownottracking", "forum", $info), 1); - } else { - print_error('cannottrack', '', $_SERVER["HTTP_REFERER"]); - } - - } else { // subscribe - if (forum_tp_start_tracking($forum->id)) { - add_to_log($course->id, "forum", "start tracking", "view.php?f=$forum->id", $forum->id, $cm->id); - redirect($returnto, get_string("nowtracking", "forum", $info), 1); - } else { - print_error('cannottrack', '', $_SERVER["HTTP_REFERER"]); - } +} else { // subscribe + if (forum_tp_start_tracking($forum->id)) { + add_to_log($course->id, "forum", "start tracking", "view.php?f=$forum->id", $forum->id, $cm->id); + redirect($returnto, get_string("nowtracking", "forum", $info), 1); + } else { + print_error('cannottrack', '', $_SERVER["HTTP_REFERER"]); } +} ?> diff --git a/mod/forum/subscribe.php b/mod/forum/subscribe.php index a70d64addf..21c344821a 100644 --- a/mod/forum/subscribe.php +++ b/mod/forum/subscribe.php @@ -1,103 +1,115 @@ -get_record("forum", array("id" => $id))) { - print_error('invalidforumid', 'forum'); +require_once("../../config.php"); +require_once("lib.php"); + +$id = required_param('id',PARAM_INT); // The forum to subscribe or unsubscribe to +$force = optional_param('force','',PARAM_ALPHA); // Force everyone to be subscribed to this forum? +$user = optional_param('user',0,PARAM_INT); + +$url = new moodle_url($CFG->wwwroot.'/mod/forum/subscribe.php', array('id'=>$id)); +if ($force !== '') { + $url->param('force', $force); +} +if ($user !== 0) { + $url->param('user', $user); +} +$PAGE->set_url($url); + +if (! $forum = $DB->get_record("forum", array("id" => $id))) { + print_error('invalidforumid', 'forum'); +} + +if (! $course = $DB->get_record("course", array("id" => $forum->course))) { + print_error('invalidcoursemodule'); +} + +if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + $context = get_context_instance(CONTEXT_MODULE, $cm->id); +} else { + $cm->id = 0; + $context = get_context_instance(CONTEXT_MODULE, $cm->id); +} + +if ($user) { + if (!has_capability('mod/forum:managesubscriptions', $context)) { + print_error('nopermissiontosubscribe', 'forum'); } - - if (! $course = $DB->get_record("course", array("id" => $forum->course))) { - print_error('invalidcoursemodule'); + if (!$user = $DB->get_record("user", array("id" => $user))) { + print_error('invaliduserid'); } - - if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - } else { - $cm->id = 0; - $context = get_context_instance(CONTEXT_MODULE, $cm->id); +} else { + $user = $USER; +} + +if (isset($cm->groupmode) && empty($course->groupmodeforce)) { + $groupmode = $cm->groupmode; +} else { + $groupmode = $course->groupmode; +} +if ($groupmode && !forum_is_subscribed($user->id, $forum) && !has_capability('moodle/site:accessallgroups', $context)) { + if (!groups_get_all_groups($course->id, $USER->id)) { + print_error('cannotsubscribe', 'forum'); } +} - if ($user) { - if (!has_capability('mod/forum:managesubscriptions', $context)) { - print_error('nopermissiontosubscribe', 'forum'); - } - if (!$user = $DB->get_record("user", array("id" => $user))) { - print_error('invaliduserid'); - } +require_login($course->id, false, $cm); + +if (has_capability('moodle/legacy:guest', get_context_instance(CONTEXT_SYSTEM), 0, false)) { // Guests can't subscribe + $PAGE->set_title($course->shortname); + $PAGE->set_heading($course->fullname); + echo $OUTPUT->header(); + echo $OUTPUT->confirm(get_string('noguestsubscribe', 'forum').'

'.get_string('liketologin'), + get_login_url(), new moodle_url()); + echo $OUTPUT->footer(); + exit; +} + +$returnto = optional_param('backtoindex',0,PARAM_INT) + ? "index.php?id=".$course->id + : "view.php?f=$id"; + +if ($force and has_capability('mod/forum:managesubscriptions', $context)) { + if (forum_is_forcesubscribed($forum)) { + forum_forcesubscribe($forum->id, 0); + redirect($returnto, get_string("everyonecannowchoose", "forum"), 1); } else { - $user = $USER; + forum_forcesubscribe($forum->id, 1); + redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); } +} - if (groupmode($course, $cm) - and !forum_is_subscribed($user->id, $forum) - and !has_capability('moodle/site:accessallgroups', $context)) { - if (!groups_get_all_groups($course->id, $USER->id)) { - print_error('cannotsubscribe', 'forum'); - } - } +if (forum_is_forcesubscribed($forum)) { + redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); +} - require_login($course->id, false, $cm); +$info->name = fullname($user); +$info->forum = format_string($forum->name); - if (isguest()) { // Guests can't subscribe - $PAGE->set_title($course->shortname); - $PAGE->set_heading($course->fullname); - echo $OUTPUT->header(); - echo $OUTPUT->confirm(get_string('noguestsubscribe', 'forum').'

'.get_string('liketologin'), - get_login_url(), new moodle_url()); - echo $OUTPUT->footer(); - exit; +if (forum_is_subscribed($user->id, $forum->id)) { + if (forum_unsubscribe($user->id, $forum->id)) { + add_to_log($course->id, "forum", "unsubscribe", "view.php?f=$forum->id", $forum->id, $cm->id); + redirect($returnto, get_string("nownotsubscribed", "forum", $info), 1); + } else { + print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); } - $returnto = optional_param('backtoindex',0,PARAM_INT) - ? "index.php?id=".$course->id - : "view.php?f=$id"; - - if ($force and has_capability('mod/forum:managesubscriptions', $context)) { - if (forum_is_forcesubscribed($forum)) { - forum_forcesubscribe($forum->id, 0); - redirect($returnto, get_string("everyonecannowchoose", "forum"), 1); - } else { - forum_forcesubscribe($forum->id, 1); - redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); - } +} else { // subscribe + if ($forum->forcesubscribe == FORUM_DISALLOWSUBSCRIBE && + !has_capability('mod/forum:managesubscriptions', $context)) { + print_error('disallowsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); } - - if (forum_is_forcesubscribed($forum)) { - redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); + if (!has_capability('mod/forum:viewdiscussion', $context)) { + print_error('cannotsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); } - - $info->name = fullname($user); - $info->forum = format_string($forum->name); - - if (forum_is_subscribed($user->id, $forum->id)) { - if (forum_unsubscribe($user->id, $forum->id)) { - add_to_log($course->id, "forum", "unsubscribe", "view.php?f=$forum->id", $forum->id, $cm->id); - redirect($returnto, get_string("nownotsubscribed", "forum", $info), 1); - } else { - print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); - } - - } else { // subscribe - if ($forum->forcesubscribe == FORUM_DISALLOWSUBSCRIBE && - !has_capability('mod/forum:managesubscriptions', $context)) { - print_error('disallowsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); - } - if (!has_capability('mod/forum:viewdiscussion', $context)) { - print_error('cannotsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); - } - if (forum_subscribe($user->id, $forum->id) ) { - add_to_log($course->id, "forum", "subscribe", "view.php?f=$forum->id", $forum->id, $cm->id); - redirect($returnto, get_string("nowsubscribed", "forum", $info), 1); - } else { - print_error('cannotsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); - } + if (forum_subscribe($user->id, $forum->id) ) { + add_to_log($course->id, "forum", "subscribe", "view.php?f=$forum->id", $forum->id, $cm->id); + redirect($returnto, get_string("nowsubscribed", "forum", $info), 1); + } else { + print_error('cannotsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); } +} -?> +?> \ No newline at end of file diff --git a/mod/forum/subscribers.php b/mod/forum/subscribers.php index 912430aff4..61cf82743b 100644 --- a/mod/forum/subscribers.php +++ b/mod/forum/subscribers.php @@ -1,155 +1,164 @@ -get_record('forum', array('id'=>$id))) { - print_error('invalidforumid', 'forum'); - } +$url = new moodle_url($CFG->wwwroot.'/mod/forum/subscribers.php', array('id'=>$id)); +if ($group !== 0) { + $url->param('group', $group); +} +if ($edit !== 0) { + $url->param('edit', $edit); +} +$PAGE->set_url($url); - if (! $course = $DB->get_record('course', array('id'=>$forum->course))) { - print_error('invalidcourseid'); - } +if (! $forum = $DB->get_record('forum', array('id'=>$id))) { + print_error('invalidforumid', 'forum'); +} - if (! $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { - $cm->id = 0; - } +if (! $course = $DB->get_record('course', array('id'=>$forum->course))) { + print_error('invalidcourseid'); +} - require_login($course->id, false, $cm); +if (! $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { + $cm->id = 0; +} - $context = get_context_instance(CONTEXT_MODULE, $cm->id); +require_login($course->id, false, $cm); - if (!has_capability('mod/forum:viewsubscribers', $context)) { - print_error('nopermissiontosubscribe', 'forum'); - } +$context = get_context_instance(CONTEXT_MODULE, $cm->id); - unset($SESSION->fromdiscussion); +if (!has_capability('mod/forum:viewsubscribers', $context)) { + print_error('nopermissiontosubscribe', 'forum'); +} - add_to_log($course->id, "forum", "view subscribers", "subscribers.php?id=$forum->id", $forum->id, $cm->id); +unset($SESSION->fromdiscussion); - $strsubscribeall = get_string("subscribeall", "forum"); - $strsubscribenone = get_string("subscribenone", "forum"); - $strsubscribers = get_string("subscribers", "forum"); - $strforums = get_string("forums", "forum"); +add_to_log($course->id, "forum", "view subscribers", "subscribers.php?id=$forum->id", $forum->id, $cm->id); - $PAGE->navbar->add($strsubscribers); - $PAGE->set_title($strsubscribers); - if (has_capability('mod/forum:managesubscriptions', $context)) { - $PAGE->set_button(forum_update_subscriptions_button($course->id, $id)); - if ($edit != -1) { - $USER->subscriptionsediting = $edit; - } - } else { - unset($USER->subscriptionsediting); +$strsubscribeall = get_string("subscribeall", "forum"); +$strsubscribenone = get_string("subscribenone", "forum"); +$strsubscribers = get_string("subscribers", "forum"); +$strforums = get_string("forums", "forum"); + +$PAGE->navbar->add($strsubscribers); +$PAGE->set_title($strsubscribers); +if (has_capability('mod/forum:managesubscriptions', $context)) { + $PAGE->set_button(forum_update_subscriptions_button($course->id, $id)); + if ($edit != -1) { + $USER->subscriptionsediting = $edit; } - echo $OUTPUT->header(); +} else { + unset($USER->subscriptionsediting); +} +echo $OUTPUT->header(); /// Check to see if groups are being used in this forum - groups_print_activity_menu($cm, "subscribers.php?id=$forum->id"); - $currentgroup = groups_get_activity_group($cm); - $groupmode = groups_get_activity_groupmode($cm); - - if (empty($USER->subscriptionsediting)) { /// Display an overview of subscribers +groups_print_activity_menu($cm, "subscribers.php?id=$forum->id"); +$currentgroup = groups_get_activity_group($cm); +$groupmode = groups_get_activity_groupmode($cm); - if (! $users = forum_subscribed_users($course, $forum, $currentgroup, $context) ) { +if (empty($USER->subscriptionsediting)) { /// Display an overview of subscribers - echo $OUTPUT->heading(get_string("nosubscribers", "forum")); + if (! $users = forum_subscribed_users($course, $forum, $currentgroup, $context) ) { - } else { + echo $OUTPUT->heading(get_string("nosubscribers", "forum")); - echo $OUTPUT->heading(get_string("subscribersto","forum", "'".format_string($forum->name)."'")); + } else { - echo ''; - foreach ($users as $user) { - echo ''; - } - echo "
'; - echo $OUTPUT->user_picture(moodle_user_picture::make($user, $course->id)); - echo ''; - echo fullname($user); - echo ''; - echo $user->email; - echo '
"; + echo $OUTPUT->heading(get_string("subscribersto","forum", "'".format_string($forum->name)."'")); + + echo ''; + foreach ($users as $user) { + echo ''; } - - echo $OUTPUT->footer(); - exit; + echo "
'; + echo $OUTPUT->user_picture(moodle_user_picture::make($user, $course->id)); + echo ''; + echo fullname($user); + echo ''; + echo $user->email; + echo '
"; } + echo $OUTPUT->footer(); + exit; +} + /// We are in editing mode. - $strexistingsubscribers = get_string("existingsubscribers", 'forum'); - $strpotentialsubscribers = get_string("potentialsubscribers", 'forum'); - $straddsubscriber = get_string("addsubscriber", 'forum'); - $strremovesubscriber = get_string("removesubscriber", 'forum'); - $strsearch = get_string("search"); - $strsearchresults = get_string("searchresults"); - $strshowall = get_string("showall"); - $strsubscribers = get_string("subscribers", "forum"); - $strforums = get_string("forums", "forum"); +$strexistingsubscribers = get_string("existingsubscribers", 'forum'); +$strpotentialsubscribers = get_string("potentialsubscribers", 'forum'); +$straddsubscriber = get_string("addsubscriber", 'forum'); +$strremovesubscriber = get_string("removesubscriber", 'forum'); +$strsearch = get_string("search"); +$strsearchresults = get_string("searchresults"); +$strshowall = get_string("showall"); +$strsubscribers = get_string("subscribers", "forum"); +$strforums = get_string("forums", "forum"); - $searchtext = optional_param('searchtext', '', PARAM_RAW); - if ($frm = data_submitted()) { +$searchtext = optional_param('searchtext', '', PARAM_RAW); +if ($frm = data_submitted()) { /// A form was submitted so process the input - if (!empty($frm->add) and !empty($frm->addselect)) { - foreach ($frm->addselect as $addsubscriber) { - if (! forum_subscribe($addsubscriber, $id)) { - print_error('cannotaddsubscriber', 'forum', '', $addsubscriber); - } + if (!empty($frm->add) and !empty($frm->addselect)) { + foreach ($frm->addselect as $addsubscriber) { + if (! forum_subscribe($addsubscriber, $id)) { + print_error('cannotaddsubscriber', 'forum', '', $addsubscriber); } - } else if (!empty($frm->remove) and !empty($frm->removeselect)) { - foreach ($frm->removeselect as $removesubscriber) { - if (! forum_unsubscribe($removesubscriber, $id)) { - print_error('cannotremovesubscriber', 'forum', '', $removesubscriber); - } + } + } else if (!empty($frm->remove) and !empty($frm->removeselect)) { + foreach ($frm->removeselect as $removesubscriber) { + if (! forum_unsubscribe($removesubscriber, $id)) { + print_error('cannotremovesubscriber', 'forum', '', $removesubscriber); } - } else if (!empty($frm->showall)) { - $searchtext = ''; } + } else if (!empty($frm->showall)) { + $searchtext = ''; } +} /// Get all existing subscribers for this forum. - if (!$subscribers = forum_subscribed_users($course, $forum, $currentgroup, $context)) { - $subscribers = array(); - } +if (!$subscribers = forum_subscribed_users($course, $forum, $currentgroup, $context)) { + $subscribers = array(); +} /// Get all the potential subscribers excluding users already subscribed - $users = forum_get_potential_subscribers($context, $currentgroup, 'id,email,firstname,lastname', 'firstname ASC, lastname ASC'); - if (!$users) { - $users = array(); - } - foreach ($subscribers as $subscriber) { - unset($users[$subscriber->id]); - } +$users = forum_get_potential_subscribers($context, $currentgroup, 'id,email,firstname,lastname', 'firstname ASC, lastname ASC'); +if (!$users) { + $users = array(); +} +foreach ($subscribers as $subscriber) { + unset($users[$subscriber->id]); +} /// This is yucky, but do the search in PHP, becuase the list we are using comes from get_users_by_capability, /// which does not allow searching in the database. Fortunately the list is only this list of users in this /// course, which is normally OK, except on the site course of a big site. But before you can enter a search /// term, you have already seen a page that lists everyone, since this code never does paging, so you have probably /// already crashed your server if you are going to. This will be fixed properly for Moodle 2.0: MDL-17550. - if ($searchtext) { - $searchusers = array(); - $lcsearchtext = moodle_strtolower($searchtext); - foreach ($users as $userid => $user) { - if (strpos(moodle_strtolower($user->email), $lcsearchtext) !== false || - strpos(moodle_strtolower($user->firstname . ' ' . $user->lastname), $lcsearchtext) !== false) { - $searchusers[$userid] = $user; - } - unset($users[$userid]); +if ($searchtext) { + $searchusers = array(); + $lcsearchtext = moodle_strtolower($searchtext); + foreach ($users as $userid => $user) { + if (strpos(moodle_strtolower($user->email), $lcsearchtext) !== false || + strpos(moodle_strtolower($user->firstname . ' ' . $user->lastname), $lcsearchtext) !== false) { + $searchusers[$userid] = $user; } + unset($users[$userid]); } +} - echo $OUTPUT->box_start('generalbox boxaligncenter'); +echo $OUTPUT->box_start('generalbox boxaligncenter'); - include('subscriber.html'); +include('subscriber.html'); - echo $OUTPUT->box_end(); +echo $OUTPUT->box_end(); - echo $OUTPUT->footer(); +echo $OUTPUT->footer(); -?> +?> \ No newline at end of file diff --git a/mod/forum/unsubscribeall.php b/mod/forum/unsubscribeall.php index 3118536cba..c19b8e7148 100644 --- a/mod/forum/unsubscribeall.php +++ b/mod/forum/unsubscribeall.php @@ -1,10 +1,12 @@ -set_url(new moodle_url($CFG->wwwroot.'/mod/forum/unsubscribeall.php')); + require_login(); $return = $CFG->wwwroot.'/'; diff --git a/mod/forum/user.php b/mod/forum/user.php index f3cf59503d..c06aec86e0 100644 --- a/mod/forum/user.php +++ b/mod/forum/user.php @@ -1,4 +1,4 @@ -wwwroot.'/mod/forum/user.php', array('course'=>$course)); +if ($id !== 0) { + $url->param('id', $id); +} +if ($mode !== 'posts') { + $url->param('mode', $mode); +} +if ($page !== 0) { + $url->param('page', $page); +} +if ($perpage !== 5) { + $url->param('perpage', $perpage); +} +$PAGE->set_url($url); + if (empty($id)) { // See your own profile by default require_login(); $id = $USER->id; @@ -176,4 +191,4 @@ if ($posts = forum_search_posts($searchterms, $searchcourse, $page*$perpage, $pe echo ''; echo $OUTPUT->footer(); -?> +?> \ No newline at end of file -- 2.39.5