fwrite ($bf,full_tag("ID",6,false,$for_dis->id));
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("ASSESSED",6,false,$for_dis->assessed));
fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$for_dis->timemodified));
//Now print posts to xml
if ($oldversion < 2004010100) {
table_column("forum", "", "assesspublic", "integer", "4", "unsigned", "0", "", "assessed");
}
+
+ if ($oldversion < 2004011404) {
+ table_column("forum_discussions", "", "userid", "integer", "10", "unsigned", "0", "", "firstpost");
+
+ if ($discussions = get_records_sql("SELECT d.id, p.userid
+ FROM {$CFG->prefix}forum_discussions as d,
+ {$CFG->prefix}forum_posts as p
+ WHERE d.firstpost = p.id")) {
+ foreach ($discussions as $discussion) {
+ update_record("forum_discussions", $discussion);
+ }
+ }
+ }
return true;
forum int(10) unsigned NOT NULL default '0',
name varchar(255) NOT NULL default '',
firstpost int(10) unsigned NOT NULL default '0',
+ userid 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)
table_column("forum", "", "assesspublic", "integer", "4", "unsigned", "0", "", "assessed");
}
+ if ($oldversion < 2004011404) {
+ table_column("forum_discussions", "", "userid", "integer", "10", "unsigned", "0", "", "firstpost");
+
+ if ($discussions = get_records_sql("SELECT d.id, p.userid
+ FROM {$CFG->prefix}forum_discussions as d,
+ {$CFG->prefix}forum_posts as p
+ WHERE d.firstpost = p.id")) {
+ foreach ($discussions as $discussion) {
+ update_record("forum_discussions", $discussion);
+ }
+ }
+ }
+
return true;
}
-
?>
forum integer NOT NULL default '0',
name varchar(255) NOT NULL default '',
firstpost integer NOT NULL default '0',
+ userid integer NOT NULL default '0',
assessed integer NOT NULL default '1',
timemodified integer NOT NULL default '0'
);
$strftimerecent = get_string("strftimerecent");
+ $isteacheredit = isteacheredit($course->id);
+ $mygroupid = mygroupid($course->id);
+
+ $groupmode = array(); /// To cache group modes
+
foreach ($logs as $log) {
//Get post info, I'll need it later
$post = forum_get_post_from_log($log);
}
}
/// Check whether this is belongs to a discussion in a group that
- /// should not be accessible to the current user
- /// TEMPORARY: This algorithm is ridiculously cumbersome ...
- /// There MUST be a better way of doing this...
- if ($cm = get_coursemodule_from_instance("forum", $post->forum, $course->id)) {
- $groupmode = groupmode($course, $cm);
- if ($groupmode == SEPARATEGROUPS or $groupmode == VISIBLEGROUPS) {
- if (!isteacheredit($course->id)) {
- if ($discussion = get_record("forum_discussions", "id", $post->discussion)) {
- if ($firstpost = get_record("forum_posts", "id", $discussion->firstpost)) {
- if ($group = user_group($course->id, $firstpost->userid)) {
- if (mygroupid($course->id) != $group->id) {
- continue;
- }
- }
- }
- }
+ /// should NOT be accessible to the current user
+
+ if (!$isteacheredit) { /// Because editing teachers can see everything
+ if (!isset($cm[$post->forum])) {
+ $cm[$forum->id] = get_coursemodule_from_instance("forum", $forum->id, $course->id);
+ $groupmode[$forum->id] = groupmode($course, $cm[$forum->id]);
+ }
+ if ($groupmode($forum->id)) {
+ if ($mygroupid != forum_get_groupid_from_discussion($post->discussion, $course->id)) {
+ continue;
}
}
}
return NULL;
}
+function forum_get_firstpost_from_discussion($discussionid) {
+/// Given a discussion id, return the first post from the discussion
+ global $CFG;
+
+ return get_record_sql("SELECT p.*
+ FROM {$CFG->prefix}forum_discussions d,
+ {$CFG->prefix}forum_posts p
+ WHERE d.id = '$discussionid'
+ AND d.firstpost = p.id ");
+}
+
+function forum_get_groupid_from_discussion($discussionid, $courseid) {
+/// Given a discussion id, return the groupid of the first poster
+ global $CFG;
+
+ if ($info = get_record_sql("SELECT gm.groupid as id
+ FROM {$CFG->prefix}forum_discussions d,
+ {$CFG->prefix}forum_posts p,
+ {$CFG->prefix}groups g,
+ {$CFG->prefix}groups_members gm
+ WHERE d.id = '$discussionid'
+ AND g.courseid = '$courseid'
+ AND gm.groupid = g.id
+ AND gm.userid = d.userid")) {
+ return $info->groupid;
+ }
+ return 0;
+}
function forum_get_user_grades($forumid) {
/// Get all user grades for a forum
$discussion->course = $restore->course_id;
$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->assessed = backup_todb($dis_info['#']['ASSESSED']['0']['#']);
$discussion->timemodified = backup_todb($dis_info['#']['TIMEMODIFIED']['0']['#']);
if ($rec) {
//Put its new firstpost
$discussion->firstpost = $rec->new_id;
+ if ($post = get_record("forum_posts", "id", $discussion->firstpost)) {
+ $discussion->userid = $post->userid;
+ }
} else {
$discussion->firstpost = 0;
+ $discussion->userid = 0;
}
//Create temp discussion record
$temp_discussion->id = $newid;
$temp_discussion->firstpost = $discussion->firstpost;
- //Update discussion (only firstpost will be changed)
+ $temp_discussion->userid = $discussion->userid;
+ //Update discussion (only firstpost and userid will be changed)
$status = update_record("forum_discussions",$temp_discussion);
//echo "Updated firstpost ".$old_firstpost." to ".$temp_discussion->firstpost."<br>"; //Debug
} else {
// This fragment is called by /admin/index.php
////////////////////////////////////////////////////////////////////////////////
-$module->version = 2004010500;
+$module->version = 2004011404;
$module->cron = 60;
?>