From 2b63df96c3e99a69f498fd4fd0e2e7da5e235e27 Mon Sep 17 00:00:00 2001 From: jamiesensei Date: Tue, 7 Nov 2006 08:48:18 +0000 Subject: [PATCH] migrated mod/forum/post.php to formslib and fixed a string in course/edit_form.php --- course/edit_form.php | 2 +- lang/en_utf8/form.php | 3 +- lib/form/format.php | 16 +- lib/formslib.php | 20 +- mod/forum/lib.php | 236 ++++++++--------- mod/forum/post.php | 594 ++++++++++++++++++++---------------------- 6 files changed, 431 insertions(+), 440 deletions(-) diff --git a/course/edit_form.php b/course/edit_form.php index 1729bddd8e..b37ec1c271 100644 --- a/course/edit_form.php +++ b/course/edit_form.php @@ -42,7 +42,7 @@ class course_edit_form extends moodleform { /// form definition with new course defaults //-------------------------------------------------------------------------------- - $mform->addElement('header','general', get_string('general')); + $mform->addElement('header','general', get_string('general', 'form')); //must have create course capability in both categories in order to move course if (has_capability('moodle/course:create', $categorycontext)) { diff --git a/lang/en_utf8/form.php b/lang/en_utf8/form.php index 00387bff8b..62d16eb71c 100644 --- a/lang/en_utf8/form.php +++ b/lang/en_utf8/form.php @@ -1,4 +1,4 @@ -name (class $a->classname)'; $string['nonexistentformelements'] = 'Trying to add help buttons to nonexistent form elements : $a'; $string['requiredelement'] = 'Required field.'; +$string['general'] = 'General Settings'; ?> diff --git a/lib/form/format.php b/lib/form/format.php index 53cc039415..cdf6d9d21d 100644 --- a/lib/form/format.php +++ b/lib/form/format.php @@ -32,7 +32,6 @@ class MoodleQuickForm_format extends MoodleQuickForm_select{ HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes); $this->_persistantFreeze = true; $this->_type = 'format'; - echo $useHtmlEditor; $this->_useHtmlEditor=$useHtmlEditor; if ($this->_useHtmlEditor==null){ $this->_useHtmlEditor=can_use_html_editor(); @@ -74,14 +73,15 @@ class MoodleQuickForm_format extends MoodleQuickForm_select{ } } if (null !== $value) { - $this->setValue($value); + $format=$value; }else{ - if ($this->_useHtmlEditor){ - $this->setValue(array(FORMAT_HTML)); - - }else{ - $this->setValue(array(FORMAT_MOODLE)); - } + $format=FORMAT_MOODLE; + } + $caller->setFormat($this->getName(), $format, $this->_useHtmlEditor); + if ($this->_useHtmlEditor){ + $this->setValue(array(FORMAT_HTML)); + }else{ + $this->setValue(array($format)); } return true; break; diff --git a/lib/formslib.php b/lib/formslib.php index af2ebda810..0dcfea0cc4 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -131,6 +131,21 @@ class moodleform { } } + /** + * Called after setting up defaults for form and before displaying it. + * + * @param string $elementname + * @param string $formatname + * @param object $context + */ + function trusttext_prepare_edit($elementname, $formatname, $context) { + $defaultvalue=$this->_form->_defaultValues[$elementname]; + extract($this->_form->_formats[$formatname]);// format and usehtml + trusttext_prepare_edit($defaultvalue, $format, + $usehtml, $context); + $this->_form->setDefault($elementname, $defaultvalue); + } + function display() { $this->_form->display(); } @@ -160,6 +175,7 @@ class moodleform { class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { var $_types = array(); + var $_formats = array(); /** @@ -195,7 +211,9 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { $this->_helpImageURL.'" />'); $this->setRequiredNote(get_string('denotesreq', 'form', $this->getReqHTML())); } - + function setFormat($elementname, $format, $usehtml) { + $this->_formats[$elementname]=compact('format', 'usehtml'); + } function setType($elementname, $paramtype) { $this->_types[$elementname] = $paramtype; } diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 6d9097c58a..395f9278cc 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -99,7 +99,7 @@ function forum_add_instance($forum) { if (!isset($forum->assessed)) { $forum->assessed = 0; } - + if (!empty($forum->ratingtime)) { $forum->assesstimestart = make_timestamp($forum->startyear, $forum->startmonth, $forum->startday, $forum->starthour, $forum->startminute, 0); @@ -150,7 +150,7 @@ function forum_update_instance($forum) { if (empty($forum->assessed)) { $forum->assessed = 0; } - + if (!empty($forum->ratingtime)) { $forum->assesstimestart = make_timestamp($forum->startyear, $forum->startmonth, $forum->startday, $forum->starthour, $forum->startminute, 0); @@ -339,9 +339,9 @@ function forum_cron() { } } } - + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); // Cached already - + if ($users = forum_subscribed_users($course, $forum, 0, true)) { $mailcount=0; @@ -356,7 +356,7 @@ function forum_cron() { } } } - + // make sure we're allowed to see it... if (!forum_user_can_see_post($forum, $discussion, $post, $userto)) { continue; @@ -397,7 +397,7 @@ function forum_cron() { $mailcount++; /// Mark post as read if forum_usermarksread is set off - if (!$CFG->forum_usermarksread && forum_tp_can_track_forums($forum, $userto) && + if (!$CFG->forum_usermarksread && forum_tp_can_track_forums($forum, $userto) && forum_tp_is_tracked($forum, $userto->id)) { if (!forum_tp_mark_post_read($userto->id, $post, $forum->id)) { mtrace("Error: mod/forum/cron.php: Could not mark post $post->id read for user $userto->id". @@ -575,8 +575,8 @@ function forum_cron() { $posthtml .= forum_make_mail_post($post, $userfrom, $userto, $course, false, $canreply, true, false); /// Create an array of postid's for this user to mark as read. - if (!$CFG->forum_usermarksread && - forum_tp_can_track_forums($forum, $userto) && + if (!$CFG->forum_usermarksread && + forum_tp_can_track_forums($forum, $userto) && forum_tp_is_tracked($forum, $userto->id)) { $markread[$post->id]->post = $post; $markread[$post->id]->forumid = $forum->id; @@ -609,8 +609,8 @@ function forum_cron() { $usermailcount++; /// Mark post as read if forum_usermarksread is set off - if (!$CFG->forum_usermarksread && - forum_tp_can_track_forums($forum->id, $userto) && + if (!$CFG->forum_usermarksread && + forum_tp_can_track_forums($forum->id, $userto) && forum_tp_is_tracked($forum->id, $userto->id)) { foreach ($markread as $postinfo) { if (!forum_tp_mark_post_read($userto->id, $postinfo->post, $postinfo->forumid)) { @@ -648,13 +648,13 @@ function forum_cron() { function forum_make_mail_text($course, $forum, $discussion, $post, $userfrom, $userto, $bare = false) { global $CFG; - + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { error('Course Module ID was incorrect'); } $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); $viewfullnames = has_capability('moodle/site:viewfullnames', $modcontext); - + $by = New stdClass; $by->name = fullname($userfrom, $viewfullnames); $by->date = userdate($post->modified, "", $userto->timezone); @@ -796,11 +796,11 @@ function forum_print_overview($courses,&$htmlarray) { $sql .= ") AND l.module = 'forum' AND action $LIKE 'add post%' " ." AND userid != ".$USER->id." GROUP BY cmid,l.course,instance"; - + if (!$new = get_records_sql($sql)) { $new = array(); // avoid warnings } - + // also get all forum tracking stuff ONCE. $trackingforums = array(); foreach ($forums as $forum) { @@ -808,7 +808,7 @@ function forum_print_overview($courses,&$htmlarray) { $trackingforums[$forum->id] = $forum; } } - + if (count($trackingforums) > 0) { $cutoffdate = isset($CFG->forum_oldpostdays) ? (time() - ($CFG->forum_oldpostdays*24*60*60)) : 0; $sql = 'SELECT d.forum,d.course,COUNT(p.id) AS count '. @@ -859,7 +859,7 @@ function forum_print_overview($courses,&$htmlarray) { } $str .= ''; } - if (!empty($str)) { + if (!empty($str)) { if (!array_key_exists($forum->course,$htmlarray)) { $htmlarray[$forum->course] = array(); } @@ -868,7 +868,7 @@ function forum_print_overview($courses,&$htmlarray) { } $htmlarray[$forum->course]['forum'] .= $str; } - } + } } function forum_print_recent_activity($course, $isteacher, $timestart) { @@ -919,7 +919,7 @@ function forum_print_recent_activity($course, $isteacher, $timestart) { && $post->groupid != -1) { /// Open discussions have groupid -1 $groupmode[$post->forum] = groupmode($course, $cm[$post->forum]); - + if ($groupmode[$post->forum]) { //hope i didn't break anything if (!@in_array($mygroupid, $post->groupid))/*$mygroupid != $post->groupid*/{ @@ -1096,7 +1096,7 @@ function forum_get_post_full($postid) { function forum_get_discussion_posts($discussion, $sort, $forumid) { /// Gets posts with all info ready for forum_print_post -/// We pass forumid in because we always know it so no need to make a +/// We pass forumid in because we always know it so no need to make a /// complicated join to find it out. global $CFG; @@ -1109,7 +1109,7 @@ function forum_get_discussion_posts($discussion, $sort, $forumid) { function forum_get_child_posts($parent, $forumid) { /// Gets posts with all info ready for forum_print_post -/// We pass forumid in because we always know it so no need to make a +/// We pass forumid in because we always know it so no need to make a /// complicated join to find it out. global $CFG; @@ -1130,13 +1130,13 @@ function forum_get_child_posts($parent, $forumid) { * viewhiddentimedposts */ function forum_get_readable_forums($userid, $courseid=0) { - + global $CFG, $USER; - + if (!$forummod = get_record('modules', 'name', 'forum')) { error('The forum module is not installed'); } - + if ($courseid) { $courses = get_records('course', 'id', $courseid); } else { @@ -1147,16 +1147,16 @@ function forum_get_readable_forums($userid, $courseid=0) { } $readableforums = array(); - + foreach($courses as $course) { $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - + if (has_capability('moodle/course:viewhiddenactivities', $coursecontext)) { $selecthidden = ' AND cm.visible = 1'; } else { $selecthidden = ''; } - + $selectforums = "SELECT f.id AS id, f.name AS name, f.type AS type, @@ -1171,20 +1171,20 @@ function forum_get_readable_forums($userid, $courseid=0) { AND cm.module = {$forummod->id} $selecthidden ORDER BY f.name ASC"; - + if ($forums = get_records_sql($selectforums)) { - + $group = user_group($course->id, $userid); - + foreach ($forums as $forum) { $forumcontext = get_context_instance(CONTEXT_MODULE, $forum->cmid); - + // Evaluate groupmode. $cm = new object; $cm->id = $forum->cmid; $cm->groupmode = $forum->cmgroupmode; $forum->cmgroupmode = groupmode($course, $cm); - + if ($forum->cmgroupmode == SEPARATEGROUPS && !has_capability('moodle/site:accessallgroups', $forumcontext)) { $forum->accessallgroups = false; @@ -1198,14 +1198,14 @@ function forum_get_readable_forums($userid, $courseid=0) { $forum->viewhiddentimedposts = has_capability('mod/forum:viewhiddentimedposts', $forumcontext); - + if ($forum->type == 'qanda' && !has_capability('mod/forum:viewqandawithoutposting', $forumcontext)) { // We need to check whether the user has posted in the qanda forum. $forum->onlydiscussions = array(); // Holds discussion ids for the discussions // the user is allowed to see in this forum. - + if ($discussionspostedin = forum_discussions_user_has_posted_in($forum->id, $USER->id)) { foreach ($discussionspostedin as $d) { @@ -1218,10 +1218,10 @@ function forum_get_readable_forums($userid, $courseid=0) { } } } // End foreach $courses - + //print_object($courses); //print_object($readableforums); - + return $readableforums; } @@ -1235,13 +1235,13 @@ function forum_get_readable_forums($userid, $courseid=0) { * @param $extrasql * @return array of posts found */ -function forum_search_posts($searchterms, $courseid=0, $limitfrom=0, $limitnum=50, +function forum_search_posts($searchterms, $courseid=0, $limitfrom=0, $limitnum=50, &$totalcount, $extrasql='') { global $CFG, $USER; require_once($CFG->libdir.'/searchlib.php'); $forums = forum_get_readable_forums($USER->id, $courseid); - + if (count($forums) == 0) { return false; } @@ -1298,7 +1298,7 @@ function forum_search_posts($searchterms, $courseid=0, $limitfrom=0, $limitnum=5 $messagesearch = ''; $searchstring = ''; - + // Need to concat these back together for parser to work. foreach($searchterms as $searchterm){ if ($searchstring != '') { @@ -1425,7 +1425,7 @@ function forum_get_post_from_log($log) { if ($log->action == "add post") { - return get_record_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid, + return get_record_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid, u.firstname, u.lastname, u.email, u.picture FROM {$CFG->prefix}forum_discussions d, {$CFG->prefix}forum_posts p, @@ -1440,7 +1440,7 @@ function forum_get_post_from_log($log) { } else if ($log->action == "add discussion") { - return get_record_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid, + return get_record_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid, u.firstname, u.lastname, u.email, u.picture FROM {$CFG->prefix}forum_discussions d, {$CFG->prefix}forum_posts p, @@ -1542,12 +1542,12 @@ function forum_get_discussions($forum="0", $forumsort="d.timemodified DESC", $timelimit = ''; if (!empty($CFG->forum_enabletimedposts)) { - + if (!$cm = get_coursemodule_from_instance('forum', $forum)) { error('Course Module ID was incorrect'); } $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - + if (!has_capability('mod/forum:viewhiddentimedposts', $modcontext)) { $now = time(); $timelimit = " AND ((d.timestart = 0 OR d.timestart <= '$now') AND (d.timeend = 0 OR d.timeend > '$now')"; @@ -1594,7 +1594,7 @@ function forum_get_discussions($forum="0", $forumsort="d.timemodified DESC", } //TODO: there must be a nice way to do this that keeps both postgres and mysql 3.2x happy but I can't find it right now. - if ($CFG->dbtype == 'postgres7' || $CFG->dbtype == 'mssql' || + if ($CFG->dbtype == 'postgres7' || $CFG->dbtype == 'mssql' || $CFG->dbtype == 'mssql_n' || $CFG->dbtype == 'odbc_mssql' || $CFG->dbtype == 'oci8po') { return get_records_sql("SELECT $postdata, d.name, d.timemodified, d.usermodified, d.groupid, u.firstname, u.lastname, u.email, u.picture $umfields @@ -1604,7 +1604,7 @@ function forum_get_discussions($forum="0", $forumsort="d.timemodified DESC", $umtable WHERE d.forum = '$forum' AND p.parent = 0 - $timelimit $groupselect $userselect + $timelimit $groupselect $userselect ORDER BY $forumsort", $limitfrom, $limitnum); } else { return get_records_sql("SELECT $postdata, d.name, d.timemodified, d.usermodified, d.groupid, @@ -1685,7 +1685,7 @@ function forum_subscribed_users($course, $forum, $groupid=0, $cache=false) { } return $results; - + } @@ -1763,7 +1763,7 @@ function forum_get_course_forum($courseid, $type) { function forum_make_mail_post(&$post, $user, $touser, $course, $ownpost=false, $reply=false, $link=false, $rate=false, $footer="") { - + // Given the data about a posting, builds up the HTML to display it and // returns the HTML in a string. This is designed for sending via HTML email. @@ -1773,7 +1773,7 @@ function forum_make_mail_post(&$post, $user, $touser, $course, static $formattedtextid; // The ID number of the post $post->forum = get_field('forum_discussions', 'forum', 'id', $post->discussion); - + if (!$cm = get_coursemodule_from_instance('forum', $post->forum)) { mtrace('Course Module ID was incorrect'); } @@ -1851,7 +1851,7 @@ function forum_make_mail_post(&$post, $user, $touser, $course, if ($link) { $output .= ''; } @@ -1885,7 +1885,7 @@ function forum_print_post(&$post, $courseid, $ownpost=false, $reply=false, $link if (empty($SESSION->forum_search)) { // just viewing, return return; - } + } echo ''; echo ''; echo ''; - + echo '
'; @@ -1900,12 +1900,12 @@ function forum_print_post(&$post, $courseid, $ownpost=false, $reply=false, $link echo '
'; print_string('forumauthorhidden','forum'); echo '
'; echo ' '; - + /// Actual content - + echo ''."\n"; echo get_string('forumbodyhidden','forum'); echo '
'; @@ -1924,7 +1924,7 @@ function forum_print_post(&$post, $courseid, $ownpost=false, $reply=false, $link $strmarkunread = get_string('markunread', 'forum'); if (!empty($post->forum)) { - $istracked = (forum_tp_can_track_forums($post->forum) && + $istracked = (forum_tp_can_track_forums($post->forum) && forum_tp_is_tracked($post->forum)); } else { $istracked = false; @@ -2049,7 +2049,7 @@ function forum_print_post(&$post, $courseid, $ownpost=false, $reply=false, $link } $forumtype = get_field('forum', 'type', 'id', $post->forum); - + $age = time() - $post->created; /// Hack for allow to edit news posts those are not displayed yet until they are displayed if (!$post->parent @@ -2098,10 +2098,10 @@ function forum_print_post(&$post, $courseid, $ownpost=false, $reply=false, $link } if ($useratings) { $mypost = ($USER->id == $post->userid); - + $canviewallratings = has_capability('mod/forum:viewanyrating', $modcontext); - - if ($canviewallratings and !$mypost) { + + if ($canviewallratings and !$mypost) { forum_print_ratings_mean($post->id, $ratings->scale, $canviewallratings); if (!empty($ratings->allow)) { echo ' '; @@ -2152,7 +2152,7 @@ function forum_print_post(&$post, $courseid, $ownpost=false, $reply=false, $link * It needs some discussion information and some post information, these * happen to be combined for efficiency in the $post parameter by the function * that calls this one: forum_print_latest_discussions() -* +* * @param object $post The post object (passed by reference for speed). * @param object $forum The forum object. * @param int $group Current group. @@ -2168,12 +2168,12 @@ function forum_print_discussion_header(&$post, $forum, $group=-1, $datestring="" static $rowcount; static $strmarkalldread; - + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { error('Course Module ID was incorrect'); } $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - + if (!isset($rowcount)) { $rowcount = 0; @@ -2875,7 +2875,9 @@ function forum_post_subscription($post) { global $USER; - if (empty($post->subscribe) and empty($post->unsubscribe)) { + $subscribed=forum_is_subscribed($USER->id, $post->forum); + if ((isset($post->subscribe) && $post->subscribe && $subscribed) + || (!$post->subscribe && !$subscribed)) { return ""; } @@ -2985,11 +2987,11 @@ function forum_user_can_post($forum, $user=NULL) { function forum_user_can_view_post($post, $course, $cm, $forum, $discussion, $user=NULL){ global $CFG, $USER; - + if (!$user){ $user = $USER; } - + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); if (!has_capability('mod/forum:viewdiscussion', $modcontext)) { return false; @@ -3024,11 +3026,11 @@ function forum_user_can_see_discussion($forum, $discussion, $context, $user=NULL return false; } } - + if (!has_capability('mod/forum:viewdiscussion', $context)) { return false; } - + if ($forum->type == 'qanda' && !forum_user_has_posted($forum->id, $discussion->id, $user->id) && !has_capability('mod/forum:viewqandawithoutposting', $context)) { @@ -3036,7 +3038,7 @@ function forum_user_can_see_discussion($forum, $discussion, $context, $user=NULL } return true; } - + function forum_user_can_see_post($forum, $discussion, $post, $user=NULL) { global $USER; @@ -3047,9 +3049,9 @@ function forum_user_can_see_post($forum, $discussion, $post, $user=NULL) { return false; } } - + if (is_numeric($discussion)) { - if (!$discussion = get_record('forum_discussions','id',$discussion)) { + if (!$discussion = get_record('forum_discussions','id',$discussion)) { return false; } } @@ -3061,7 +3063,7 @@ function forum_user_can_see_post($forum, $discussion, $post, $user=NULL) { if (!isset($post->id) && isset($post->parent)) { $post->id = $post->parent; } - + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { error('Course Module ID was incorrect'); } @@ -3074,10 +3076,10 @@ function forum_user_can_see_post($forum, $discussion, $post, $user=NULL) { if (!has_capability('mod/forum:viewdiscussion', $context, $user->id, false)) { return false; } - + if ($forum->type == 'qanda') { $firstpost = forum_get_firstpost_from_discussion($discussion->id); - + return (forum_user_has_posted($forum->id,$discussion->id,$user->id) || $firstpost->id == $post->id || has_capability('mod/forum:viewqandawithoutposting', $context, false, $user->id)); @@ -3088,26 +3090,26 @@ function forum_user_can_see_post($forum, $discussion, $post, $user=NULL) { /** * Prints the discussion view screen for a forum. -* +* * @param object $course The current course object. * @param object $forum Forum to be printed. * @param int $maxdiscussions The maximum number of discussions per page(optional). -* @param string $displayformat The display format to use (optional). +* @param string $displayformat The display format to use (optional). * @param string $sort Sort arguments for database query (optional). * @param int $currentgroup Group to display discussions for (optional). * @param int $groupmode Group mode of the forum (optional). * @param int $page Page mode, page to display (optional). -* +* */ function forum_print_latest_discussions($course, $forum, $maxdiscussions=5, $displayformat='plain', $sort='', $currentgroup=-1, $groupmode=-1, $page=-1) { global $CFG, $USER; - + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { error('Course Module ID was incorrect'); } $context = get_context_instance(CONTEXT_MODULE, $cm->id); - + /// Sort out some defaults @@ -3137,7 +3139,7 @@ function forum_print_latest_discussions($course, $forum, $maxdiscussions=5, $dis $currentgroup = get_current_group($course->id); } - if (!$currentgroup and ($groupmode != SEPARATEGROUPS or + if (!$currentgroup and ($groupmode != SEPARATEGROUPS or has_capability('moodle/site:accessallgroups', $context)) ) { $visiblegroups = -1; } else { @@ -3147,15 +3149,15 @@ function forum_print_latest_discussions($course, $forum, $maxdiscussions=5, $dis /// If the user can post discussions, then this is a good place to put the button for it //add group mode in there, to test for visible group if (forum_user_can_post_discussion($forum, $currentgroup, $groupmode) || - has_capability('moodle/legacy:guest', $context, NULL, false)) { + has_capability('moodle/legacy:guest', $context, NULL, false)) { echo '
'; echo "
wwwroot/mod/forum/post.php\">"; echo "id\" />"; echo ''; echo '
'; @@ -3460,13 +3462,13 @@ function forum_print_posts_threaded($parent, $courseid, $depth, $ratings, $reply $istracking = forum_tp_can_track_forums($forumid) && forum_tp_is_tracked($forumid); if ($posts = forum_get_child_posts($parent, $forumid)) { - + if (!$cm = get_coursemodule_from_instance('forum', $forumid, $courseid)) { error('Course Module ID was incorrect'); } $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); $canviewfullnames = has_capability('moodle/site:viewfullnames', $modcontext); - + foreach ($posts as $post) { echo '
'; @@ -3526,7 +3528,7 @@ function forum_print_posts_nested($parent, $courseid, $ratings, $reply, &$user_r } else { $ownpost = ($USER->id == $post->userid); } - + $post->subject = format_string($post->subject); if (forum_print_post($post, $courseid, $ownpost, $reply, $link, $ratings, @@ -3583,10 +3585,10 @@ function forum_get_recent_mod_activity(&$activities, &$index, $sincetime, $cours } foreach ($posts as $post) { - + $modcontext = get_context_instance(CONTEXT_MODULE, $post->cmid); $canviewallgroups = has_capability('moodle/site:accessallgroups', $modcontext); - + if ($groupid and ($post->groupid != -1 and $groupid != $post->groupid and !$canviewallgroups)) { continue; } @@ -3686,8 +3688,8 @@ function forum_update_subscriptions_button($courseid, $forumid) { /* * This function gets run whenever a role is assigned to a user in a context * - * @param integer $userid - * @param object $context + * @param integer $userid + * @param object $context * @return bool */ function forum_role_assign($userid, $context) { @@ -3698,8 +3700,8 @@ function forum_role_assign($userid, $context) { /* * This function gets run whenever a role is assigned to a user in a context * - * @param integer $userid - * @param object $context + * @param integer $userid + * @param object $context * @return bool */ function forum_role_unassign($userid, $context) { @@ -3733,7 +3735,7 @@ function forum_add_user_default_subscriptions($userid, $context) { } } } - continue; + continue; } $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_add_user_default_subscriptions($userid, $subcontext); @@ -3745,7 +3747,7 @@ function forum_add_user_default_subscriptions($userid, $context) { if ($courses = get_records('course', 'category', $context->instanceid)) { foreach ($courses as $course) { if ($course->id == SITEID) { - continue; // temporary workaround for bug MDL-7114 + continue; // temporary workaround for bug MDL-7114 } $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_add_user_default_subscriptions($userid, $subcontext); @@ -3758,7 +3760,7 @@ function forum_add_user_default_subscriptions($userid, $context) { } } break; - + case CONTEXT_COURSE: // For a whole course if ($course = get_record('course', 'id', $context->instanceid)) { @@ -3776,10 +3778,10 @@ function forum_add_user_default_subscriptions($userid, $context) { } } break; - + case CONTEXT_MODULE: // Just one forum if ($cm = get_coursemodule_from_id('forum', $context->instanceid)) { - if ($forum = get_record('forum', 'id', $cm->instance)) { + if ($forum = get_record('forum', 'id', $cm->instance)) { if ($forum->forcesubscribe != FORUM_INITIALSUBSCRIBE) { continue; } @@ -3816,10 +3818,10 @@ function forum_remove_user_subscriptions($userid, $context) { forum_unsubscribe($userid, $forum->id); } } - } + } } } - continue; + continue; } $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_remove_user_subscriptions($userid, $subcontext); @@ -3855,10 +3857,10 @@ function forum_remove_user_subscriptions($userid, $context) { } } break; - + case CONTEXT_MODULE: // Just one forum if ($cm = get_coursemodule_from_id('forum', $context->instanceid)) { - if ($forum = get_record('forum', 'id', $cm->instance)) { + if ($forum = get_record('forum', 'id', $cm->instance)) { if (!has_capability('mod/forum:viewdiscussion', $context, $userid)) { forum_unsubscribe($userid, $forum->id); } @@ -4069,9 +4071,9 @@ function forum_tp_count_forum_read_records($userid, $forumid, $groupid=false) { if ($CFG->dbtype === 'postgres7') { // this query takes 20ms, vs several minutes for the one below - $sql = " SELECT COUNT (DISTINCT u.id ) " + $sql = " SELECT COUNT (DISTINCT u.id ) " . " FROM ( " - . " SELECT p.id " + . " SELECT p.id " . " FROM {$CFG->prefix}forum_posts p " . " JOIN {$CFG->prefix}forum_discussions d ON p.discussion = d.id " . " JOIN {$CFG->prefix}forum_read r ON p.id = r.postid" @@ -4142,7 +4144,7 @@ function forum_tp_delete_read_records($userid=-1, $postid=-1, $discussionid=-1, } /** * Get a list of forums not tracked by the user. -* +* * @param int $userid The id of the user to use. * @param int $courseid The id of the course being checked (optional). * @return mixed An array indexed by forum id, or false. @@ -4218,7 +4220,7 @@ function forum_tp_can_track_forums($forum=false, $user=false) { /** * Tells whether a specific forum is tracked by the user. A user can optionally * be specified. If not specified, the current user is assumed. -* +* * @param mixed $forum If int, the id of the forum being checked; if object, the forum object * @param int $userid The id of the user being checked (optional). * @return boolean @@ -4285,7 +4287,7 @@ function forum_tp_clean_read_records() { delete_records('forum_read', 'id', $oldreadpost->id); } } -} +} /** * Sets the last post for a given discussion @@ -4297,7 +4299,7 @@ function forum_discussion_update_last_post($discussionid) { if (!record_exists('forum_discussions', 'id', $discussionid)) { return false; } - + /// Use SQL to find the last post for this discussion $sql = 'SELECT id, userid, modified '. 'FROM '.$CFG->prefix.'forum_posts '. @@ -4336,7 +4338,7 @@ function forum_get_separate_modules($courseid) { global $CFG,$db; $forummodule = get_record("modules", "name", "forum"); - + $sql = 'SELECT f.id, f.id FROM '.$CFG->prefix.'forum f, '.$CFG->prefix.'course_modules cm WHERE f.id = cm.instance AND cm.module ='.$forummodule->id.' AND cm.visible = 1 AND cm.course = '.$courseid.' AND cm.groupmode ='.SEPARATEGROUPS; @@ -4354,15 +4356,15 @@ function forum_check_throttling($forum) { if (!is_object($forum)) { return false; // this is broken. } - + if (empty($forum->blockafter)) { return true; } - + if (empty($forum->blockperiod)) { return true; } - + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { error('Course Module ID was incorrect'); } @@ -4374,7 +4376,7 @@ function forum_check_throttling($forum) { // get the number of posts in the last period we care about $timenow = time(); $timeafter = $timenow - $forum->blockperiod; - + $numposts = count_records_sql('SELECT COUNT(p.id) FROM '.$CFG->prefix.'forum_posts p' .' JOIN '.$CFG->prefix.'forum_discussions d' .' ON p.discussion = d.id WHERE d.forum = '.$forum->id @@ -4383,7 +4385,7 @@ function forum_check_throttling($forum) { $a->blockafter = $forum->blockafter; $a->numposts = $numposts; $a->blockperiod = get_string('secondstotime'.$forum->blockperiod); - + if ($forum->blockafter <= $numposts) { error(get_string('forumblockingtoomanyposts','error',$a),$CFG->wwwroot.'/mod/forum/view.php?f='.$forum->id); } @@ -4391,7 +4393,7 @@ function forum_check_throttling($forum) { notify(get_string('forumblockingalmosttoomanyposts','forum',$a)); } - + } @@ -4471,16 +4473,16 @@ function forum_reset_course_form($course) { */ function forum_convert_to_roles($forum, $forummodid, $teacherroles=array(), $studentroles=array(), $guestroles=array(), $cmid=NULL) { - + global $CFG; - + if (!isset($forum->open) && !isset($forum->assesspublic)) { // We assume that this forum has already been converted to use the // Roles System. Columns forum.open and forum.assesspublic get dropped // once the forum module has been upgraded to use Roles. return false; } - + if ($forum->type == 'teacher') { // Teacher forums should be converted to normal forums that @@ -4568,7 +4570,7 @@ function forum_convert_to_roles($forum, $forummodid, $teacherroles=array(), } } else { // Non-teacher forum. - + if (empty($cmid)) { // We were not given the course_module id. Try to find it. if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { @@ -4650,7 +4652,7 @@ function forum_convert_to_roles($forum, $forummodid, $teacherroles=array(), } break; } - + if (empty($cm)) { $cm = get_record('course_modules', 'id', $cmid); } diff --git a/mod/forum/post.php b/mod/forum/post.php index 3d1585a98b..94aac962bc 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -4,22 +4,29 @@ require_once('../../config.php'); require_once('lib.php'); + require_once('post_form.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); - - $sitecontext = get_context_instance(CONTEXT_SYSTEM); + $prune = optional_param('prune', 0, PARAM_INT); + $name = optional_param('name', '', PARAM_CLEAN); + $confirm = optional_param('confirm', 0, PARAM_INT); + + + $page_params=array('reply'=>$reply, + 'forum'=>$forum, + 'edit'=>$edit); //these page_params will be passed as hidden variables + //later in the form. + + $sitecontext = get_context_instance(CONTEXT_SYSTEM); if (has_capability('moodle/legacy:guest', $sitecontext, NULL, false)) { $wwwroot = $CFG->wwwroot.'/login/index.php'; if (!empty($CFG->loginhttps)) { - $wwwroot = str_replace('http','https', $wwwroot); + $wwwroot = str_replace('http', 'https', $wwwroot); } if (!empty($forum)) { // User is starting a new discussion in a forum @@ -40,7 +47,7 @@ if (! $course = get_record('course', 'id', $forum->course)) { error('The course number was incorrect'); } - + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) { // For the logs error('Could not get the course module for the forum instance.'); } else { @@ -52,7 +59,7 @@ print_header($course->shortname, $course->fullname, "id\">$course->shortname -> id\">$strforums -> - id\">".format_string($forum->name,true)."", + id\">".format_string($forum->name, true)."", '', '', true, "", navmenu($course, $cm)); } else { print_header($course->shortname, $course->fullname, @@ -65,267 +72,9 @@ print_footer($course); exit; } - require_login(0, false); // Script is useless unless they're logged in - if ($post = data_submitted()) { - if (empty($post->course)) { - error('No course was defined!'); - } - - if (!$course = get_record('course', 'id', $post->course)) { - error('Could not find specified course!'); - } - - if (!empty($forum)) { // Check the forum id and change it to a full object - if (! $forum = get_record('forum', 'id', $forum)) { - error('The forum number was incorrect'); - } - } - - if (!empty($course->lang)) { // Override current language - $CFG->courselang = $course->lang; - } - - if (empty($SESSION->fromurl)) { - $errordestination = "$CFG->wwwroot/mod/forum/view.php?f=$post->forum"; - } else { - $errordestination = $SESSION->fromurl; - } - - $post->subject = clean_param(strip_tags($post->subject, ''), PARAM_CLEAN); // Strip all tags except multilang - - //$post->message will be cleaned later before display - - $post->attachment = isset($_FILES['attachment']) ? $_FILES['attachment'] : NULL; - - if (!$cm = get_coursemodule_from_instance("forum", $post->forum, $course->id)) { // For the logs - error('Could not get the course module for the forum instance.'); - } - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); - trusttext_after_edit($post->message, $modcontext); - - if (!$post->subject or !$post->message) { - $post->error = get_string("emptymessage", "forum"); - - } else if ($post->edit) { // Updating a post - $post->id = $post->edit; - $message = ''; - - //fix for bug #4314 - if (!$realpost = get_record('forum_posts','id',$post->id)) { - $realpost = new object; - $realpost->userid = -1; - } - - - // 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)) ) { - error("You can not update this post"); - } - - if ($forum->type == 'news' && !$post->parent) { - $updatediscussion = new object; - $updatediscussion->id = $post->discussion; - if (empty($post->timestartdisabled)) { - $updatediscussion->timestart = make_timestamp($post->timestartyear, $post->timestartmonth, $post->timestartday); - } else { - $updatediscussion->timestart = 0; - } - if (empty($post->timeenddisabled)) { - $updatediscussion->timeend = make_timestamp($post->timeendyear, $post->timeendmonth, $post->timeendday); - } else { - $updatediscussion->timeend = 0; - } - if (empty($post->timeenddisabled) && $updatediscussion->timeend <= $updatediscussion->timestart) { - $post->error = get_string('timestartenderror', 'forum'); - } elseif (!update_record('forum_discussions', $updatediscussion)) { - error(get_string("couldnotupdate", "forum"), $errordestination); - } - } - - if (!isset($post->error)) { - - if (forum_update_post($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($post)) { - $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 { - $discussionurl = "discuss.php?d=$post->discussion#$post->id"; - } - add_to_log($course->id, "forum", "update post", - "$discussionurl&parent=$post->id", "$post->id", $cm->id); - - redirect(forum_go_back_to("$discussionurl#$post->id"), $message.$subscribemessage, $timemessage); - - } else { - error(get_string("couldnotupdate", "forum"), $errordestination); - } - exit; - } - - } else if ($post->discussion) { // Adding a new post to an existing discussion - $message = ''; - if ($post->id = forum_add_new_post($post,$message)) { - - $timemessage = 2; - if (!empty($message)) { // if we're printing stuff about the file upload - $timemessage = 4; - } - $message .= '
'.get_string("postadded", "forum", format_time($CFG->maxeditingtime)); - - if ($subscribemessage = forum_post_subscription($post)) { - $timemessage = 4; - } - - if (!empty($post->mailnow)) { - $message .= get_string("postmailnow", "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 { - $discussionurl = "discuss.php?d=$post->discussion"; - } - add_to_log($course->id, "forum", "add post", - "$discussionurl&parent=$post->id", "$post->id", $cm->id); - - redirect(forum_go_back_to("$discussionurl#$post->id"), $message.$subscribemessage, $timemessage); - - } else { - error(get_string("couldnotadd", "forum"), $errordestination); - } - exit; - - } else { // Adding a new discussion - $post->mailnow = empty($post->mailnow) ? 0 : 1; - $discussion = $post; - $discussion->name = $post->subject; - $discussion->intro = $post->message; - $newstopic = false; - - if ($forum->type == 'news' && !$post->parent) { - $newstopic = true; - } - if ($newstopic && empty($post->timestartdisabled)) { - $discussion->timestart = make_timestamp($post->timestartyear, $post->timestartmonth, $post->timestartday); - } else { - $discussion->timestart = 0; - } - if ($newstopic && empty($post->timeenddisabled)) { - $discussion->timeend = make_timestamp($post->timeendyear, $post->timeendmonth, $post->timeendday); - } else { - $discussion->timeend = 0; - } - if ($newstopic && empty($post->timeenddisabled) && $discussion->timeend <= $discussion->timestart) { - $post->error = get_string('timestartenderror', 'forum'); - } else { - $message = ''; - if ($discussion->id = forum_add_discussion($discussion,$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; - } - $message .= '
'.get_string("postadded", "forum", format_time($CFG->maxeditingtime)); - - if ($post->mailnow) { - $message .= get_string("postmailnow", "forum"); - $timemessage = 4; - } - - if ($subscribemessage = forum_post_subscription($discussion)) { - $timemessage = 4; - } - - redirect(forum_go_back_to("view.php?f=$post->forum"), $message.$subscribemessage, $timemessage); - - } else { - error(get_string("couldnotadd", "forum"), $errordestination); - } - - exit; - } - } - } - - if ($usehtmleditor = can_use_html_editor()) { - $defaultformat = FORMAT_HTML; - } else { - $defaultformat = FORMAT_MOODLE; - } - - if (isset($post->error)) { // User is re-editing a failed posting - - // Set up all the required objects again, and reuse the same $post - - if (! $forum = get_record("forum", "id", $post->forum)) { - error("The forum number was incorrect ($post->forum)"); - } - - if (! $course = get_record("course", "id", $forum->course)) { - error("The course number was incorrect ($forum->course)"); - } - - if (!empty($post->parent)) { - if (! $parent = forum_get_post_full($post->parent)) { - error("Parent post ID was incorrect ($post->parent)"); - } - } - - if (!empty($post->discussion)) { - if (! $discussion = get_record("forum_discussions", "id", $post->discussion)) { - error("This post is not part of a discussion! ($post->discussion)"); - } - } else { - $discussion = new stdClass(); - $newstopic = false; - if ($forum->type == 'news' && !$post->parent) { - $newstopic = true; - } - if ($newstopic && empty($post->timestartdisabled)) { - $discussion->timestart = make_timestamp($post->timestartyear, $post->timestartmonth, $post->timestartday); - } else { - $discussion->timestart = 0; - } - if ($newstopic && empty($post->timeenddisabled)) { - $discussion->timeend = make_timestamp($post->timeendyear, $post->timeendmonth, $post->timeendday); - } else { - $discussion->timeend = 0; - } - } - - $post->subject = stripslashes_safe($post->subject); - $post->message = stripslashes_safe($post->message); - - } else if (!empty($forum)) { // User is starting a new discussion in a forum - - $SESSION->fromurl = $_SERVER["HTTP_REFERER"]; - + if (!empty($forum)) { // User is starting a new discussion in a forum if (! $forum = get_record("forum", "id", $forum)) { error("The forum number was incorrect ($forum)"); } @@ -333,7 +82,6 @@ error("The course number was incorrect ($forum->course)"); } $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - if (! forum_user_can_post_discussion($forum)) { if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! $SESSION->wantsurl = $FULLME; @@ -343,13 +91,16 @@ print_error('nopostforum', 'forum'); } } - + if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $coursecontext)) { error(get_string("activityiscurrentlyhidden")); } } + $SESSION->fromurl = $_SERVER["HTTP_REFERER"]; + + // Load up the $post variable. $post->course = $course->id; @@ -359,7 +110,6 @@ $post->subject = ""; $post->userid = $USER->id; $post->message = ""; - $post->format = $defaultformat; $post->groupid = get_current_group($course->id); if ($post->groupid == 0) { @@ -384,7 +134,6 @@ } $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - if (! forum_user_can_post($forum)) { if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { // User is a guest here! $SESSION->wantsurl = $FULLME; @@ -394,7 +143,7 @@ print_error('nopostforum', 'forum'); } } - + if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { if (groupmode($course, $cm)) { // Make sure user can post here $mygroupid = mygroupid($course->id); @@ -416,7 +165,6 @@ $post->subject = $parent->subject; $post->userid = $USER->id; $post->message = ""; - $post->format = $defaultformat; $strre = get_string('re', 'forum'); if (!(substr($post->subject, 0, strlen($strre)) == $strre)) { @@ -424,7 +172,6 @@ } unset($SESSION->fromdiscussion); - } else if (!empty($edit)) { // User is editing their own post if (! $post = forum_get_post_full($edit)) { @@ -435,8 +182,9 @@ error("Parent post ID was incorrect ($post->parent)"); } } + if (! $discussion = get_record("forum_discussions", "id", $post->discussion)) { - error("This post is not part of a discussion! ($reply)"); + error("This post is not part of a discussion! ($edit)"); } if (! $forum = get_record("forum", "id", $discussion->forum)) { error("The forum number was incorrect ($discussion->forum)"); @@ -469,7 +217,7 @@ unset($SESSION->fromdiscussion); - } else if (!empty($delete)) { // User is deleting a post + }else if (!empty($delete)) { // User is deleting a post if (! $post = forum_get_post_full($delete)) { error("Post ID was incorrect"); @@ -497,6 +245,7 @@ } } + $replycount = forum_count_replies($post); if (!empty($confirm)) { // User has confirmed the delete @@ -520,11 +269,10 @@ add_to_log($discussion->course, "forum", "delete discussion", "view.php?id=$cm->id", "$forum->id", $cm->id); - redirect("view.php?f=$discussion->forum", - get_string("deleteddiscussion", "forum"), 1); + redirect("view.php?f=$discussion->forum"); } else if (forum_delete_post($post, has_capability('mod/forum:deleteanypost', $modcontext))) { - + if ($forum->type == 'single') { // Single discussion forums are an exception. We show // the forum itself since it only has one discussion @@ -533,11 +281,10 @@ } else { $discussionurl = "discuss.php?d=$post->discussion"; } - + add_to_log($discussion->course, "forum", "delete post", $discussionurl, "$post->id", $cm->id); - $feedback = $replycount ? get_string('deletedposts', 'forum') : get_string('deletedpost', 'forum'); - redirect(forum_go_back_to($discussionurl), $feedback, 1); + redirect(forum_go_back_to($discussionurl)); } else { error("An error occurred while deleting record $post->id"); } @@ -640,7 +387,7 @@ add_to_log($discussion->course, "forum", "prune post", "discuss.php?d=$newid", "$post->id", $cm->id); - redirect(forum_go_back_to("discuss.php?d=$newid"), get_string("prunedpost", "forum"), 1); + redirect(forum_go_back_to("discuss.php?d=$newid")); } else { // User just asked to prune something @@ -648,8 +395,8 @@ $strforums = get_string("modulenameplural", "forum"); print_header_simple(format_string($discussion->name).": ".format_string($post->subject), "", "id\">$strforums -> - id\">".format_string($forum->name,true)." -> - id\">".format_string($post->subject,true)." -> ". + id\">".format_string($forum->name, true)." -> + id\">".format_string($post->subject, true)." -> ". get_string("prune", "forum"), '', "", true, "", navmenu($course, $cm)); print_heading(get_string('pruneheading', 'forum')); @@ -662,13 +409,203 @@ } print_footer($course); die; - - } else { error("No operation specified"); } + if (!isset($coursecontext)) { + // Has not yet been set by post.php. + $coursecontext = get_context_instance(CONTEXT_COURSE, $forum->course); + } + + $mform_post = new forum_post_form('post.php', compact('coursecontext', 'forum', 'post')); + + if ($fromform = $mform_post->data_submitted()) { + + + if (!empty($course->lang)) { // Override current language + $CFG->courselang = $course->lang; + } + + if (empty($SESSION->fromurl)) { + $errordestination = "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"; + } else { + $errordestination = $SESSION->fromurl; + } + + // TODO add attachment processing + //$fromform->attachment = isset($_FILES['attachment']) ? $_FILES['attachment'] : NULL; + + if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { // For the logs + error('Could not get the course module for the forum instance.'); + } + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + trusttext_after_edit($fromform->message, $modcontext); + + if ($fromform->edit) { // Updating a post + $fromform->id = $fromform->edit; + $message = ''; + + //fix for bug #4314 + if (!$realpost = get_record('forum_posts', 'id', $fromform->id)) { + $realpost = new object; + $realpost->userid = -1; + } + + + // 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)) ) { + error("You can not update this post"); + } + + if ($forum->type == 'news' && !$fromform->parent) { + $updatediscussion = new object; + $updatediscussion->id = $fromform->discussion; + if (empty($fromform->timestartdisabled)) { + $updatediscussion->timestart = $fromform->timestart; + } else { + $updatediscussion->timestart = 0; + } + if (empty($fromform->timeenddisabled)) { + $updatediscussion->timeend = $fromform->timeend; + } else { + $updatediscussion->timeend = 0; + } + + if (!update_record('forum_discussions', $updatediscussion)) { + error(get_string("couldnotupdate", "forum"), $errordestination); + } + } + + $updatepost=$fromform; //realpost + $updatepost->forum=$forum->id; + if (!forum_update_post($updatepost, $message)) { + error(get_string("couldnotupdate", "forum"), $errordestination); + } + + $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)) { + $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 { + $discussionurl = "discuss.php?d=$discussion->id#$fromform->id"; + } + 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; + + + } else if ($fromform->discussion) { // Adding a new post to an existing discussion + $message = ''; + $addpost=$fromform; + $addpost->forum=$forum->id; + if ($fromform->id = forum_add_new_post($addpost, $message)) { + + $timemessage = 2; + if (!empty($message)) { // if we're printing stuff about the file upload + $timemessage = 4; + } + $message .= '
'.get_string("postadded", "forum", format_time($CFG->maxeditingtime)); + + if ($subscribemessage = forum_post_subscription($fromform)) { + $timemessage = 4; + } + + if (!empty($fromform->mailnow)) { + $message .= get_string("postmailnow", "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 { + $discussionurl = "discuss.php?d=$discussion->id"; + } + add_to_log($course->id, "forum", "add post", + "$discussionurl&parent=$fromform->id", "$fromform->id", $cm->id); + + redirect(forum_go_back_to("$discussionurl#$fromform->id"), $message.$subscribemessage, $timemessage); + + } else { + error(get_string("couldnotadd", "forum"), $errordestination); + } + exit; + + } else { // Adding a new discussion + $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 ($newstopic && empty($fromform->timestartdisabled)) { + $discussion->timestart = $fromform->timestart; + } else { + $discussion->timestart = 0; + } + if ($newstopic && empty($fromform->timeenddisabled)) { + $discussion->timeend = $fromform->timeend; + } else { + $discussion->timeend = 0; + } + + $message = ''; + if ($discussion->id = forum_add_discussion($discussion, $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; + } + $message .= '
'.get_string("postadded", "forum", format_time($CFG->maxeditingtime)); + + if ($fromform->mailnow) { + $message .= get_string("postmailnow", "forum"); + $timemessage = 4; + } + + if ($subscribemessage = forum_post_subscription($discussion)) { + $timemessage = 4; + } + + redirect(forum_go_back_to("view.php?f=$fromform->forum"), $message.$subscribemessage, $timemessage); + + } else { + error(get_string("couldnotadd", "forum"), $errordestination); + } + + exit; + } + } + + // To get here they need to edit a post, and the $post // variable will be loaded with all the particulars, @@ -691,14 +628,10 @@ get_string("addanewdiscussion", "forum"); } - if (empty($post->subject)) { - $formstart = 'theform.subject'; - } else { - $formstart = ''; - } + if ($post->parent) { - $navtail = ' -> '.format_string($toppost->subject,true).' -> '. + $navtail = ' -> '.format_string($toppost->subject, true).' -> '. get_string('editing', 'forum'); } else { $navtail = ' -> '.format_string($toppost->subject); @@ -711,7 +644,7 @@ $strforums = get_string("modulenameplural", "forum"); - $navmiddle = "id\">$strforums -> id\">".format_string($forum->name,true).' '; + $navmiddle = "id\">$strforums -> id\">".format_string($forum->name, true).' '; if (empty($discussion->name)) { if (empty($discussion)) { @@ -733,12 +666,12 @@ print_header("$course->shortname: $strdiscussionname ". format_string($toppost->subject), "$course->fullname", "id\">$course->shortname -> - $navmiddle $navtail", $formstart, "", true, "", navmenu($course, $cm)); + $navmiddle $navtail", $mform_post->focus(), "", true, "", navmenu($course, $cm)); } else { print_header("$course->shortname: $strdiscussionname ". format_string($toppost->subject), "$course->fullname", - "$navmiddle $navtail", "$formstart", "", true, "", navmenu($course, $cm)); + "$navmiddle $navtail", $mform_post->focus(), "", true, "", navmenu($course, $cm)); } @@ -751,8 +684,8 @@ } if ($forum->type == 'qanda' && !has_capability('mod/forum:viewqandawithoutposting', $modcontext) && - !forum_user_has_posted($forum->id,$discussion->id,$USER->id)) { - notify(get_string('qandanotify','forum')); + !forum_user_has_posted($forum->id, $discussion->id, $USER->id)) { + notify(get_string('qandanotify', 'forum')); } forum_check_throttling($forum); @@ -769,23 +702,18 @@ forum_print_posts_threaded($parent->id, $course->id, 0, false, false, $user_read_array, $discussion->forum); } } - print_heading(get_string("yourreply", "forum").':'); + $heading=get_string("yourreply", "forum"); } else { $forum->intro = trim($forum->intro); if (!empty($forum->intro)) { print_simple_box(format_text($forum->intro), 'center'); } if ($forum->type == 'qanda') { - print_heading(get_string('yournewquestion','forum')); + $heading=get_string('yournewquestion', 'forum'); } else { - print_heading(get_string('yournewtopic', 'forum')); + $heading=get_string('yournewtopic', 'forum'); } } - echo '
'; - if (!empty($post->error)) { - notify($post->error); - } - echo '
'; if ($USER->id != $post->userid) { // Not the original author, so add a message to the end $data->date = userdate($post->modified); @@ -799,13 +727,55 @@ } } - print_simple_box_start("center"); - require("post.html"); - print_simple_box_end(); + //load data into form + $subscribe=(isset($post->forum)&&forum_is_subscribed($USER->id, $post->forum)) || + (!empty($USER->autosubscribe)); + + + $mform_post->set_defaults(array('general'=>$heading, + 'subject'=>$post->subject, + 'message'=>$post->message, + '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($post->groupid)?array( + 'groupid'=>$post->groupid): + array())+ + + (isset($discussion->timestart)? + array('timestart'=>$discussion->timestart): + array('timestart'=>0))+ + + (isset($discussion->timeend)? + array('timeend'=>$discussion->timeend): + array('timeend'=>0))+ + + (isset($discussion->timestartdisabled)? + array('timestartdisabled'=>$discussion->timestartdisabled): + array('timestartdisabled'=>1))+ + + (isset($discussion->timeenddisabled)? + array('timeenddisabled'=>$discussion->timeenddisabled): + array('timeenddisabled'=>1))+ + + (isset($discussion->id)? + array('discussion'=>$discussion->id): + array())); + + $mform_post->trusttext_prepare_edit('message', 'format', $modcontext); + + $mform_post->display(); - if ($usehtmleditor) { - use_html_editor("message"); - } print_footer($course); -- 2.39.5