]> git.mjollnir.org Git - moodle.git/commitdiff
MLD-9506 Corrected update_final_grades() in grade_item, which was updating the grade_...
authornicolasconnault <nicolasconnault>
Mon, 30 Apr 2007 05:25:19 +0000 (05:25 +0000)
committernicolasconnault <nicolasconnault>
Mon, 30 Apr 2007 05:25:19 +0000 (05:25 +0000)
instead of grade_final. Made a few other adjustments.

lib/grade/grade_grades_final.php
lib/grade/grade_grades_raw.php
lib/grade/grade_item.php
lib/gradelib.php
lib/simpletest/testgradelib.php

index c39abec47babcbb75d8dc385c4051098f96f87ba..6ffd62b0e9687161c879ae1b247c0a3396aa14cb 100644 (file)
@@ -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
index d98b096a27d93fb50792478918f081c7b24d404f..02b81c4e09bedb8820b5e9683934336a9a318a45 100644 (file)
@@ -156,8 +156,7 @@ class grade_grades_raw extends grade_object {
             return true;
         } else {
             return false;
-        }
-
+        } 
     }
 }
 
index 53f75bdc3a99466b6333d260a312a5a62efa829f..b46c11cc2c5fce1e9f648241e152b515387af95a 100644 (file)
@@ -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;
index b47462b4548d79ff50c4334338390e851b463c17..e713d59e8b304e7476194b510e887bbe307dc2ca 100644 (file)
@@ -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. 
index 3821d04f96b1665804bad3c2664fc28174a1f343..e554f8cef6c9db614226007cfb171d4a845a27e6 100644 (file)
@@ -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); 
     }