From 02509fe66792fb56817919502d8a5bd105d24b75 Mon Sep 17 00:00:00 2001 From: moodler Date: Fri, 23 Jan 2004 12:09:25 +0000 Subject: [PATCH] Improvements to forum groups. New forum_discussions->groupid now stores the group ID for the discussion. --- mod/forum/backuplib.php | 1 + mod/forum/db/mysql.php | 4 ++++ mod/forum/db/mysql.sql | 1 + mod/forum/db/postgres7.php | 3 +++ mod/forum/db/postgres7.sql | 1 + mod/forum/discuss.php | 13 ++----------- mod/forum/lib.php | 21 ++++++++++----------- mod/forum/post.html | 1 + mod/forum/post.php | 10 ++++++++++ mod/forum/restorelib.php | 1 + mod/forum/version.php | 2 +- 11 files changed, 35 insertions(+), 23 deletions(-) diff --git a/mod/forum/backuplib.php b/mod/forum/backuplib.php index 9b3228f37b..93fb789ea4 100644 --- a/mod/forum/backuplib.php +++ b/mod/forum/backuplib.php @@ -129,6 +129,7 @@ fwrite ($bf,full_tag("NAME",6,false,$for_dis->name)); fwrite ($bf,full_tag("FIRSTPOST",6,false,$for_dis->firstpost)); fwrite ($bf,full_tag("USERID",6,false,$for_dis->userid)); + fwrite ($bf,full_tag("GROUPID",6,false,$for_dis->groupid)); fwrite ($bf,full_tag("ASSESSED",6,false,$for_dis->assessed)); fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$for_dis->timemodified)); //Now print posts to xml diff --git a/mod/forum/db/mysql.php b/mod/forum/db/mysql.php index 876fb24373..2b3f14a8b1 100644 --- a/mod/forum/db/mysql.php +++ b/mod/forum/db/mysql.php @@ -96,6 +96,10 @@ function forum_upgrade($oldversion) { } } } + + if ($oldversion < 2004012200) { + table_column("forum_discussions", "", "groupid", "integer", "10", "unsigned", "0", "", "userid"); + } return true; diff --git a/mod/forum/db/mysql.sql b/mod/forum/db/mysql.sql index 66d0522268..4af670d89c 100644 --- a/mod/forum/db/mysql.sql +++ b/mod/forum/db/mysql.sql @@ -33,6 +33,7 @@ CREATE TABLE prefix_forum_discussions ( name varchar(255) NOT NULL default '', firstpost int(10) unsigned NOT NULL default '0', userid int(10) unsigned NOT NULL default '0', + groupid int(10) unsigned NOT NULL default '0', assessed tinyint(1) NOT NULL default '1', timemodified int(10) unsigned NOT NULL default '0', PRIMARY KEY (id) diff --git a/mod/forum/db/postgres7.php b/mod/forum/db/postgres7.php index f1e272e0a4..e01ac76a5b 100644 --- a/mod/forum/db/postgres7.php +++ b/mod/forum/db/postgres7.php @@ -39,6 +39,9 @@ function forum_upgrade($oldversion) { } } } + if ($oldversion < 2004012200) { + table_column("forum_discussions", "", "groupid", "integer", "10", "unsigned", "0", "", "userid"); + } return true; diff --git a/mod/forum/db/postgres7.sql b/mod/forum/db/postgres7.sql index 2e7095c640..12abc5cded 100644 --- a/mod/forum/db/postgres7.sql +++ b/mod/forum/db/postgres7.sql @@ -31,6 +31,7 @@ CREATE TABLE prefix_forum_discussions ( name varchar(255) NOT NULL default '', firstpost integer NOT NULL default '0', userid integer NOT NULL default '0', + groupid integer NOT NULL default '0', assessed integer NOT NULL default '1', timemodified integer NOT NULL default '0' ); diff --git a/mod/forum/discuss.php b/mod/forum/discuss.php index 7271bb8b94..ffdc43fcd9 100644 --- a/mod/forum/discuss.php +++ b/mod/forum/discuss.php @@ -102,17 +102,10 @@ $groupmode = groupmode($course, $cm); if ($groupmode and !isteacheredit($course->id)) { // Groups must be kept separate - if (!$toppost = get_record("forum_posts", "id", $discussion->firstpost)) { - error("Could not find the top post of the discussion"); - } - if (!$group = user_group($course->id, $toppost->userid)) { // Find the topic's group - error("Could not find the appropriate group of this discussion"); - } - if ($groupmode == SEPARATEGROUPS) { require_login(); - if (mygroupid($course->id) == $group->id) { + if (mygroupid($course->id) == $discussion->groupid) { $canreply = true; } else { print_heading("Sorry, you can't see this discussion because you are not in this group"); @@ -121,9 +114,7 @@ } } else if ($groupmode == VISIBLEGROUPS) { - if (mygroupid($course->id) == $group->id) { - $canreply = true; - } + $canreply = (mygroupid($course->id) == $discussion->groupid); } } diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 77da89770c..bd8c2efe64 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -897,6 +897,11 @@ function forum_get_discussions($forum="0", $forumsort="d.timemodified DESC", } else { $userselect = ""; } + if ($currentgroup) { + $groupselect = " AND d.groupid = '$currentgroup' "; + } else { + $groupselect = ""; + } if (empty($forumsort)) { $forumsort = "d.timemodified DESC"; } @@ -905,18 +910,11 @@ function forum_get_discussions($forum="0", $forumsort="d.timemodified DESC", } else { $postdata = "p.*"; } - if ($currentgroup) { - $grouptable = ", {$CFG->prefix}groups_members gm "; - $groupselect = " AND gm.groupid = '$currentgroup' AND u.id = gm.userid "; - } else { - $grouptable = ""; - $groupselect = ""; - } return get_records_sql("SELECT $postdata, d.timemodified, u.firstname, u.lastname, u.email, u.picture FROM {$CFG->prefix}forum_discussions d, {$CFG->prefix}forum_posts p, - {$CFG->prefix}user u $grouptable + {$CFG->prefix}user u WHERE d.forum = '$forum' AND p.discussion = d.id AND p.parent = 0 @@ -1144,12 +1142,12 @@ function forum_make_mail_post(&$post, $user, $touser, $course, if ($ownpost) { $output .= "wwwroot/mod/forum/post.php?delete=$post->id\">".get_string("delete", "forum").""; if ($reply) { - $output .= " | wwwroot/mod/forum/post.php?reply=$post->id\">".get_string("reply", "forum").""; + $output .= " | wwwroot/mod/forum/post.php?reply=$post->id\">".get_string("replyforum", "forum").""; } $output .= "  "; } else { if ($reply) { - $output .= "wwwroot/mod/forum/post.php?reply=$post->id\">".get_string("reply", "forum")."  "; + $output .= "wwwroot/mod/forum/post.php?reply=$post->id\">".get_string("replyforum", "forum")."  "; } } @@ -1840,7 +1838,8 @@ function forum_add_discussion($discussion) { set_field("forum_posts", "attachment", $post->attachment, "id", $post->id); //ignore errors } - // Now do the real module entry + // Now do the main entry for the discussion, + // linking to this first post $discussion->firstpost = $post->id; $discussion->timemodified = $timenow; diff --git a/mod/forum/post.html b/mod/forum/post.html index dabf7893e6..a496b727f7 100644 --- a/mod/forum/post.html +++ b/mod/forum/post.html @@ -105,6 +105,7 @@ + "> diff --git a/mod/forum/post.php b/mod/forum/post.php index 54cae5361d..c0b97b8365 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -138,6 +138,7 @@ $post->parent = 0; $post->subject = ""; $post->userid = $USER->id; + $post->groupid = get_current_group($course->id); $post->message = ""; $post->format = $defaultformat; @@ -161,6 +162,15 @@ if (! forum_user_can_post($forum)) { error("Sorry, but you can not post in this forum."); } + + if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { + if (groupmode($course, $cm) and !isteacheredit($course->id)) { // Make sure user can post here + if (mygroupid($course->id) != $discussion->groupid) { + error("Sorry, but you can not post in this discussion."); + } + } + } + // Load up the $post variable. $post->course = $course->id; diff --git a/mod/forum/restorelib.php b/mod/forum/restorelib.php index aee54b682e..1a43726b7c 100644 --- a/mod/forum/restorelib.php +++ b/mod/forum/restorelib.php @@ -200,6 +200,7 @@ $discussion->name = backup_todb($dis_info['#']['NAME']['0']['#']); $discussion->firstpost = backup_todb($dis_info['#']['FIRSTPOST']['0']['#']); $discussion->userid = backup_todb($dis_info['#']['USERID']['0']['#']); + $discussion->groupid = backup_todb($dis_info['#']['GROUPID']['0']['#']); $discussion->assessed = backup_todb($dis_info['#']['ASSESSED']['0']['#']); $discussion->timemodified = backup_todb($dis_info['#']['TIMEMODIFIED']['0']['#']); diff --git a/mod/forum/version.php b/mod/forum/version.php index 7f1122084d..bd4dc68e56 100644 --- a/mod/forum/version.php +++ b/mod/forum/version.php @@ -5,7 +5,7 @@ // This fragment is called by /admin/index.php //////////////////////////////////////////////////////////////////////////////// -$module->version = 2004011404; +$module->version = 2004012200; $module->cron = 60; ?> -- 2.39.5