]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-13899 improved submission and grading date hack; merged from MOODLE_19_STABLE
authorskodak <skodak>
Wed, 19 Mar 2008 22:39:19 +0000 (22:39 +0000)
committerskodak <skodak>
Wed, 19 Mar 2008 22:39:19 +0000 (22:39 +0000)
lib/grade/grade_item.php

index 9863ed8893f44153a2c5788649fd0c4a0c49ed4d..cada10519701d49d48c9a96ad2f08ffd780041ef 100644 (file)
@@ -1143,7 +1143,7 @@ class grade_item extends grade_object {
     function set_sortorder($sortorder) {
         if ($this->sortorder == $sortorder) {
             return;
-        } 
+        }
         $this->sortorder = $sortorder;
         $this->update();
     }
@@ -1263,7 +1263,7 @@ class grade_item extends grade_object {
                 // return all children excluding category items
                 $sql = "SELECT gi.id
                           FROM {$CFG->prefix}grade_items gi
-                         WHERE $gtypes 
+                         WHERE $gtypes
                                $outcomes_sql
                                AND gi.categoryid IN (
                                   SELECT gc.id
@@ -1407,15 +1407,15 @@ class grade_item extends grade_object {
         }
 
         if (empty($grade->id)) {
-            $grade->timecreated  = null;   // no submission yet
-            $grade->timemodified = time(); // overridden flag might take over, but anyway
+            $grade->timecreated  = null;   // hack alert - date submitted - no submission yet
+            $grade->timemodified = time(); // hack alert - date graded
             $result = (boolean)$grade->insert($source);
 
         } else if (grade_floats_different($grade->finalgrade, $oldgrade->finalgrade)
                 or $grade->feedback       !== $oldgrade->feedback
                 or $grade->feedbackformat != $oldgrade->feedbackformat
                 or $grade->overridden     != $oldgrade->overridden) {
-            $grade->timemodified = time(); // overridden flag might take over, but anyway
+            $grade->timemodified = time(); // hack alert - date graded
             $result = $grade->update($source);
         } else {
             // no grade change
@@ -1485,16 +1485,6 @@ class grade_item extends grade_object {
             $grade->usermodified = $usermodified;
         }
 
-        // TODO: hack alert - create new fields for these
-
-        $grade->timecreated  = $datesubmitted;
-
-        if (empty($dategraded)) {
-            $grade->timemodified = time();
-        } else {
-            $grade->timemodified = $dategraded;
-        }
-
         if ($grade->is_locked()) {
             // do not update locked grades at all
             return false;
@@ -1527,6 +1517,11 @@ class grade_item extends grade_object {
             $grade->rawgrade = $rawgrade;
         }
 
+        // empty feedback means no feedback at all
+        if ($feedback === '') {
+            $feedback = null;
+        }
+
         // do we have comment from teacher?
         if ($feedback !== false and !$grade->is_overridden()) {
             $grade->feedback       = $feedback;
@@ -1538,9 +1533,32 @@ class grade_item extends grade_object {
             $grade->finalgrade = $this->adjust_raw_grade($grade->rawgrade, $grade->rawgrademin, $grade->rawgrademax);
         }
 
-        if (is_null($grade->rawgrade) and is_null($grade->feedback)) {
-            $grade->timemodified = null; //TODO: dategraded hack - feedback counts as grading too ;-)
+        // TODO: hack alert - create new fields for these in 2.0
+        $oldgrade->timecreated  = $grade->timecreated;
+        $oldgrade->timemodified = $grade->timemodified;
+
+        $grade->timecreated = $datesubmitted;
+
+        if ($grade->is_overridden()) {
+            // keep original graded date - update_final_grade() sets this for overridden grades
+
+        } else if (is_null($grade->rawgrade) and is_null($grade->feedback)) {
+            // no grade and feedback means no grading yet
+            $grade->timemodified = null;
+
+        } else if (!empty($dategraded)) {
+            // fine - module sends info when graded (yay!)
+            $grade->timemodified = $dategraded;
+
+        } else if (grade_floats_different($grade->finalgrade, $oldgrade->finalgrade)
+                   or $grade->feedback !== $oldgrade->feedback) {
+            // guess - if either grade or feedback changed set new graded date
+            $grade->timemodified = time();
+
+        } else {
+            //keep original graded date
         }
+        // end of hack alert
 
         if (empty($grade->id)) {
             $result = (boolean)$grade->insert($source);
@@ -1551,7 +1569,10 @@ class grade_item extends grade_object {
                 or grade_floats_different($grade->rawgrademax, $oldgrade->rawgrademax)
                 or $grade->rawscaleid     != $oldgrade->rawscaleid
                 or $grade->feedback       !== $oldgrade->feedback
-                or $grade->feedbackformat != $oldgrade->feedbackformat) {
+                or $grade->feedbackformat != $oldgrade->feedbackformat
+                or $grade->timecreated    != $oldgrade->timecreated  // part of hack above
+                or $grade->timemodified   != $oldgrade->timemodified // part of hack above
+                ) {
             $result = $grade->update($source);
         } else {
             return $result;