]> git.mjollnir.org Git - moodle.git/commitdiff
fixed problem with quickgrading overriding nonexistent grades with no grade
authorskodak <skodak>
Wed, 18 Jul 2007 19:53:24 +0000 (19:53 +0000)
committerskodak <skodak>
Wed, 18 Jul 2007 19:53:24 +0000 (19:53 +0000)
grade/report/grader/lib.php
lib/grade/grade_grades.php

index 63eebe7482e49b21eb4415740581b5c011c0456c..203d176af2f7999ef138a3d8f5043dd0aa795668 100644 (file)
@@ -171,31 +171,31 @@ class grade_report_grader extends grade_report {
                 }
             }
 
-            // Get the grade object to compare old value with new value
-            if ($grade = grade_grades::fetch(array('userid'=>$userid, 'itemid'=>$grade_item->id))) {
-                if ($data_type == 'feedback') {
-                    if ($text = $grade->load_text()) {
-                        if ($text->feedback !== $postedvalue) {
-                            $feedback       = $postedvalue;
-                            $feedbackformat = $text->feedbackformat; // keep original format or else we would have to do proper conversion (but it is not always possible)
-                            $needsupdate    = true;
-                        }
-                    } else {
+            // Get the grade object to compare old value with new value, the grade might not exist yet
+            $grade = new grade_grades(array('userid'=>$userid, 'itemid'=>$grade_item->id));
+
+            if ($data_type == 'feedback') {
+                if ($text = $grade->load_text()) {
+                    if ($text->feedback !== $postedvalue) {
                         $feedback       = $postedvalue;
-                        $feedbackformat = FORMAT_MOODLE; // this is the default format option everywhere else
+                        $feedbackformat = $text->feedbackformat; // keep original format or else we would have to do proper conversion (but it is not always possible)
                         $needsupdate    = true;
                     }
+                } else if (is_null($postedvalue)) {
+                    //nothing to do - grade does not have text or does not exist yet
+                } else {
+                    $feedback       = $postedvalue;
+                    $feedbackformat = FORMAT_MOODLE; // this is the default format option everywhere else
+                    $needsupdate    = true;
+                }
 
-                } else if ($data_type == 'grade') {
-                    if (!is_null($grade->finalgrade)) {
-                        $grade->finalgrade = (float)$grade->finalgrade;
-                    }
-                    if ($grade->finalgrade !== $finalgrade) {
-                        $needsupdate = true;
-                    }
+            } else if ($data_type == 'grade') {
+                if (!is_null($grade->finalgrade)) {
+                    $grade->finalgrade = (float)$grade->finalgrade;
+                }
+                if ($grade->finalgrade !== $finalgrade) {
+                    $needsupdate = true;
                 }
-            } else { // The grade_grades record doesn't yet exist
-                $needsupdate = true;
             }
 
             // we must not update all grades, only changed ones - we do not want to mark everything as overriden
index d110d540481581c94717380e0073c6fac9efd38e..e370d5632ae181f745b47a413965e6343105f8d5 100644 (file)
@@ -137,6 +137,10 @@ class grade_grades extends grade_object {
      * @return object
      */
     function load_text() {
+        if (empty($this->id)) {
+            return false; // text can not be attached to non existing grade
+        }
+
         if (empty($this->grade_grades_text->id)) {
             $this->grade_grades_text = grade_grades_text::fetch(array('gradeid'=>$this->id));
         }