From: skodak Date: Wed, 18 Jul 2007 19:53:24 +0000 (+0000) Subject: fixed problem with quickgrading overriding nonexistent grades with no grade X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=e1d2692a73ce7147bfb77722de161dcd25027c8d;p=moodle.git fixed problem with quickgrading overriding nonexistent grades with no grade --- diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index 63eebe7482..203d176af2 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -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 diff --git a/lib/grade/grade_grades.php b/lib/grade/grade_grades.php index d110d54048..e370d5632a 100644 --- a/lib/grade/grade_grades.php +++ b/lib/grade/grade_grades.php @@ -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)); }