]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11718 fixed altered aggregation of overridden and locked grades + some speedup...
authorskodak <skodak>
Sun, 21 Oct 2007 13:22:07 +0000 (13:22 +0000)
committerskodak <skodak>
Sun, 21 Oct 2007 13:22:07 +0000 (13:22 +0000)
grade/report/user/lib.php
lib/grade/grade_grade.php

index e850af906443f69526dbc62dabc64d17a764e5a1..2c521bd59a438739e87d4644f5bfd5230c440908 100644 (file)
@@ -137,11 +137,15 @@ class grade_report_user extends grade_report {
 
         $canviewhidden = has_capability('moodle/grade:viewhidden', get_context_instance(CONTEXT_COURSE, $this->courseid));
 
+        // fetch or create all grades
         foreach ($items as $key=>$unused) {
-            $grade_item =& $items[$key];
-            $grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$this->user->id));
+            if (!$grade_grade = grade_grade::fetch(array('itemid'=>$items[$key]->id, 'userid'=>$this->user->id))) {
+                $grade_grade = new grade_grade();
+                $grade_grade->userid = $this->user->id;
+                $grade_grade->itemid = $items[$key]->id;
+            }
             $grades[$key] = $grade_grade;
-            $grades[$key]->grade_item =& $grade_item;
+            $grades[$key]->grade_item =& $items[$key];
         }
 
         if ($canviewhidden) {
index c061cf12f9782959e35c887296a28aa725eed175..14c683fc905b3af82af10e34333cf3db44932463 100644 (file)
@@ -494,13 +494,9 @@ class grade_grade extends grade_object {
         $unknown = array();  // can not find altered
         $altered = array();  // altered grades
 
-        foreach($grade_items as $key=>$unused) {
-            $grade_item =& $grade_items[$key]; // reference for improved caching inside grade_item
-            $dependson[$grade_items[$key]->id] = $grade_items[$key]->depends_on();
-        }
-
         $hiddenfound = false;
-        foreach($grade_grades as $grade_grade) {
+        foreach($grade_grades as $itemid=>$unused) {
+            $grade_grade =& $grade_grades[$itemid];
             if ($grade_grade->is_excluded()) {
                 //nothing to do, aggregation is ok
             } else if ($grade_grade->is_hidden()) {
@@ -509,8 +505,13 @@ class grade_grade extends grade_object {
                 if (!is_null($grade_grade->finalgrade)) {
                     $altered[$grade_grade->itemid] = null;
                 }
-            } else if (!empty($dependson[$grade_grade->itemid])) {
-                $todo[] = $grade_grade->itemid;
+            } else if ($grade_grade->is_locked() or $grade_grade->is_overridden()) {
+                // no need to recalculate locked or overridden grades
+            } else {
+                $dependson[$grade_grade->itemid] = $grade_items[$grade_grade->itemid]->depends_on();
+                if (!empty($dependson[$grade_grade->itemid])) {
+                    $todo[] = $grade_grade->itemid;
+                }
             }
         }
         if (!$hiddenfound) {