From d6bdd9d5e9ad95e13510f1b71a6cf953c16b95ff Mon Sep 17 00:00:00 2001 From: moodler Date: Mon, 25 Aug 2003 12:47:36 +0000 Subject: [PATCH] Forum grades can now be numerical as well (like the other modules). If so, grades in the gradebook are printed as proper numbers and contribute to the total of the course. --- lib/weblib.php | 6 ++++-- mod/forum/db/mysql.php | 5 +++++ mod/forum/db/mysql.sql | 2 +- mod/forum/db/postgres7.php | 4 ++++ mod/forum/lib.php | 42 ++++++++++++++++++++++++++++---------- mod/forum/mod.html | 4 ++-- mod/forum/version.php | 2 +- 7 files changed, 48 insertions(+), 17 deletions(-) diff --git a/lib/weblib.php b/lib/weblib.php index 235ec988883..0cecd60315a 100644 --- a/lib/weblib.php +++ b/lib/weblib.php @@ -1383,7 +1383,7 @@ function print_time_selector($hour, $minute, $currenttime=0) { choose_from_menu($minutes, $minute, $currentdate['minutes'], ""); } -function print_grade_menu($courseid, $name, $current) { +function print_grade_menu($courseid, $name, $current, $includenograde=true) { /// Prints a grade menu (as part of an existing form) with help /// Showing all possible numerical grades and scales @@ -1396,7 +1396,9 @@ function print_grade_menu($courseid, $name, $current) { foreach ($scales as $i => $scalename) { $grades[-$i] = "$strscale: $scalename"; } - $grades[0] = get_string("nograde"); + if ($includenograde) { + $grades[0] = get_string("nograde"); + } for ($i=100; $i>=1; $i--) { $grades[$i] = $i; } diff --git a/mod/forum/db/mysql.php b/mod/forum/db/mysql.php index 18725af12fb..e0f2d5c1016 100644 --- a/mod/forum/db/mysql.php +++ b/mod/forum/db/mysql.php @@ -70,6 +70,11 @@ function forum_upgrade($oldversion) { table_column("forum", "", "assesstimestart", "integer", "10", "unsigned", "0", "", "assessed"); table_column("forum", "", "assesstimefinish", "integer", "10", "unsigned", "0", "", "assesstimestart"); } + + if ($oldversion < 2003082502) { + table_column("forum", "scale", "scale", "integer", "10", "", "0"); + execute_sql("UPDATE {$CFG->prefix}forum SET scale = (- scale)"); + } return true; diff --git a/mod/forum/db/mysql.sql b/mod/forum/db/mysql.sql index e1a61200866..ece465b13a4 100644 --- a/mod/forum/db/mysql.sql +++ b/mod/forum/db/mysql.sql @@ -12,7 +12,7 @@ CREATE TABLE prefix_forum ( assessed int(10) unsigned NOT NULL default '0', assesstimestart int(10) unsigned NOT NULL default '0', assesstimefinish int(10) unsigned NOT NULL default '0', - scale int(10) unsigned NOT NULL default '0', + scale int(10) NOT NULL default '0', forcesubscribe tinyint(1) unsigned NOT NULL default '0', 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 81603528219..bc985d952f4 100644 --- a/mod/forum/db/postgres7.php +++ b/mod/forum/db/postgres7.php @@ -15,6 +15,10 @@ function forum_upgrade($oldversion) { table_column("forum", "", "assesstimefinish", "integer", "10", "unsigned", "0", "", "assesstimestart"); } + if ($oldversion < 2003082502) { + execute_sql("UPDATE {$CFG->prefix}forum SET scale = (- scale)"); + } + return true; } diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 5ea63ac11ad..c81417d21e2 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -442,10 +442,7 @@ function forum_grades($forumid) { if (!$forum->assessed) { return false; } - if (!$scale = get_record("scale", "id", $forum->scale)) { - return false; - } - $scalemenu = make_menu_from_list($scale->scale); + $scalemenu = make_grades_menu($forum->scale); $currentuser = 0; $ratingsuser = array(); @@ -454,8 +451,18 @@ function forum_grades($forumid) { foreach ($ratings as $rating) { // Ordered by user if ($currentuser and $rating->userid != $currentuser) { if (!empty($ratingsuser)) { - $return->grades[$currentuser] = forum_get_ratings_mean(0, $scalemenu, $ratingsuser); - $return->grades[$currentuser] .= "
".forum_get_ratings_summary(0, $scalemenu, $ratingsuser); + if ($forum->scale < 0) { + $return->grades[$currentuser] = forum_get_ratings_mean(0, $scalemenu, $ratingsuser); + $return->grades[$currentuser] .= "
".forum_get_ratings_summary(0, $scalemenu, $ratingsuser); + } else { + $total = 0; + $count = 0; + foreach ($ratingsuser as $ra) { + $total += $ra; + $count ++; + } + $return->grades[$currentuser] = format_float($total/$count, 2); + } } else { $return->grades[$currentuser] = ""; } @@ -465,8 +472,18 @@ function forum_grades($forumid) { $currentuser = $rating->userid; } if (!empty($ratingsuser)) { - $return->grades[$currentuser] = forum_get_ratings_mean(0, $scalemenu, $ratingsuser); - $return->grades[$currentuser] .= "
".forum_get_ratings_summary(0, $scalemenu, $ratingsuser); + if ($forum->scale < 0) { + $return->grades[$currentuser] = forum_get_ratings_mean(0, $scalemenu, $ratingsuser); + $return->grades[$currentuser] .= "
".forum_get_ratings_summary(0, $scalemenu, $ratingsuser); + } else { + $total = 0; + $count = 0; + foreach ($ratingsuser as $ra) { + $total += $ra; + $count ++; + } + $return->grades[$currentuser] = format_float((float)$total/(float)$count, 2); + } } else { $return->grades[$currentuser] = ""; } @@ -474,7 +491,11 @@ function forum_grades($forumid) { $return->grades = array(); } - $return->maxgrade = ""; + if ($forum->scale < 0) { + $return->maxgrade = ""; + } else { + $return->maxgrade = $forum->scale; + } return $return; } @@ -1947,8 +1968,7 @@ function forum_print_discussion($course, $forum, $discussion, $post, $mode) { $ratings = NULL; if ($forum->assessed and !empty($USER->id)) { - if ($scale = get_record("scale", "id", $forum->scale)) { - $ratings->scale = make_menu_from_list($scale->scale); + if ($ratings->scale = make_grades_menu($forum->scale)) { $ratings->assesstimestart = $forum->assesstimestart; $ratings->assesstimefinish = $forum->assesstimefinish; if ($forum->assessed == 2 and !isteacher($course->id)) { diff --git a/mod/forum/mod.html b/mod/forum/mod.html index 096754c3733..30ec6db457b 100644 --- a/mod/forum/mod.html +++ b/mod/forum/mod.html @@ -109,8 +109,8 @@ helpbutton("ratings", get_string("allowratings", "forum"), "forum"); echo "
"; - echo get_string("scale").":"; - print_scale_menu($course->id, "scale", $form->scale); + echo get_string("grade").":"; + print_grade_menu($course->id, "scale", $form->scale, false); echo "
"; echo "version = 2003082500; +$module->version = 2003082502; $module->cron = 60; ?>