From 869807d8e4619ff0a393d6c906419de53ddf697c Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Mon, 30 Apr 2007 05:25:19 +0000 Subject: [PATCH] MLD-9506 Corrected update_final_grades() in grade_item, which was updating the grade_raw table instead of grade_final. Made a few other adjustments. --- lib/grade/grade_grades_final.php | 12 +++++++++++ lib/grade/grade_grades_raw.php | 3 +-- lib/grade/grade_item.php | 35 ++++++++++++++++++++++++-------- lib/gradelib.php | 1 + lib/simpletest/testgradelib.php | 3 ++- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/lib/grade/grade_grades_final.php b/lib/grade/grade_grades_final.php index c39abec47b..6ffd62b0e9 100644 --- a/lib/grade/grade_grades_final.php +++ b/lib/grade/grade_grades_final.php @@ -50,6 +50,18 @@ class grade_grades_final extends grade_object { */ var $userid; + /** + * The value of the grade. + * @var float $gradevalue + */ + var $gradevalue; + + /** + * The scale of this grade. + * @var int $gradescale + */ + var $gradescale; + /** * Date until which to hide this grade_item. If null, 0 or false, grade_item is not hidden. Hiding prevents viewing. * @var int $hidden diff --git a/lib/grade/grade_grades_raw.php b/lib/grade/grade_grades_raw.php index d98b096a27..02b81c4e09 100644 --- a/lib/grade/grade_grades_raw.php +++ b/lib/grade/grade_grades_raw.php @@ -156,8 +156,7 @@ class grade_grades_raw extends grade_object { return true; } else { return false; - } - + } } } diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 53f75bdc3a..b46c11cc2c 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -241,13 +241,30 @@ class grade_item extends grade_object { * @return mixed An array of all final_grades (stdClass objects) for this grade_item, or a single final_grade. */ function get_final($userid=NULL) { - $grade_final = null; + if (empty($this->grade_grades_final)) { + $this->load_final(); + } + + $grade_final_array = null; if (!empty($userid)) { - $grade_final = get_record('grade_grades_final', 'itemid', $this->id, 'userid', $userid); + $f = get_record('grade_grades_final', 'itemid', $this->id, 'userid', $userid); + $grade_final_array[$f->userid] = new grade_grades_final($f); } else { - $grade_final = get_records('grade_grades_final', 'itemid', $this->id); + $grade_final_array = $this->grade_grades_final; } - return $grade_final; + return $grade_final_array; + } + + /** + * Loads all the grade_grades_final objects for this grade_item from the DB into grade_item::$grade_grades_final array. + * @return array grade_grades_final objects + */ + function load_final() { + $grade_final_array = get_records('grade_grades_final', 'itemid', $this->id); + foreach ($grade_final_array as $f) { + $this->grade_grades_final[$f->userid] = new grade_grades_final($f); + } + return $this->grade_grades_final; } /** @@ -342,7 +359,7 @@ class grade_item extends grade_object { } /** - * Performs the necessary calculations on the grades_raw referenced by this grade_item, + * Performs the necessary calculations on the grades_final referenced by this grade_item, * and stores the results in grade_grades_final. Performs this for only one userid if * requested. Also resets the needs_update flag once successfully performed. * @@ -352,14 +369,14 @@ class grade_item extends grade_object { * @return boolean Success or failure */ function update_final_grade($userid=NULL, $howmodified='manual', $note=NULL) { - if (empty($this->grade_grades_raw)) { - $this->load_raw(); + if (empty($this->grade_grades_final)) { + $this->load_final(); } // TODO implement parsing of formula and calculation MDL-9643 - foreach ($this->grade_grades_raw as $r) { + foreach ($this->grade_grades_final as $f) { $newgradevalue = 0; // TODO replace '0' with calculated value - $r->update($newgradevalue, $howmodified, $note); + $f->update($newgradevalue, $howmodified, $note); } return true; diff --git a/lib/gradelib.php b/lib/gradelib.php index b47462b454..e713d59e8b 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -41,6 +41,7 @@ require_once($CFG->libdir . '/grade/grade_category.php'); require_once($CFG->libdir . '/grade/grade_item.php'); require_once($CFG->libdir . '/grade/grade_calculation.php'); require_once($CFG->libdir . '/grade/grade_grades_raw.php'); +require_once($CFG->libdir . '/grade/grade_grades_final.php'); /** * Extracts from the gradebook all the grade items attached to the calling object. diff --git a/lib/simpletest/testgradelib.php b/lib/simpletest/testgradelib.php index 3821d04f96..e554f8cef6 100644 --- a/lib/simpletest/testgradelib.php +++ b/lib/simpletest/testgradelib.php @@ -660,7 +660,8 @@ class gradelib_test extends UnitTestCase { $grade_item = new grade_item($this->grade_items[0]); $this->assertTrue(method_exists($grade_item, 'get_final')); - $final_grade = $grade_item->get_final($this->userid); + $final_grades = $grade_item->get_final($this->userid); + $final_grade = current($final_grades); $this->assertEqual(1, count($final_grade)); $this->assertEqual($this->grade_grades_final[0]->gradevalue, $final_grade->gradevalue); } -- 2.39.5