]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-13920 assignment without grades now sets text grade type, fixed overriding of...
authorskodak <skodak>
Sat, 15 Mar 2008 14:54:43 +0000 (14:54 +0000)
committerskodak <skodak>
Sat, 15 Mar 2008 14:54:43 +0000 (14:54 +0000)
grade/edit/tree/grade.php
lib/grade/grade_item.php
lib/gradelib.php
mod/assignment/db/upgrade.php
mod/assignment/lib.php
mod/assignment/version.php

index 4e5e28696aa93efc2486f17abc013f46fe5c7ba7..e0981c3b4df0a350eed311cdb645c14787a6a1e5 100644 (file)
@@ -156,19 +156,21 @@ if ($mform->is_cancelled()) {
 } else if ($data = $mform->get_data(false)) {
     $old_grade_grade = new grade_grade(array('userid'=>$data->userid, 'itemid'=>$grade_item->id), true); //might not exist yet
 
-    if (!isset($data->overridden)) {
-        $data->overridden = 0; // checkbox
-    }
-
     // fix no grade for scales
-    if (($grade_item->is_overridable_item() and !$data->overridden) or !isset($data->finalgrade) or $data->finalgrade == $data->oldgrade) {
+    if (!isset($data->finalgrade) or $data->finalgrade == $data->oldgrade) {
         $data->finalgrade = $old_grade_grade->finalgrade;
 
-    } else if ($grade_item->gradetype == GRADE_TYPE_SCALE and $data->finalgrade < 1) {
-        $data->finalgrade = NULL;
+    } else if ($grade_item->gradetype == GRADE_TYPE_SCALE) {
+        if ($data->finalgrade < 1) {
+            $data->finalgrade = NULL;
+        }
 
     } else if ($grade_item->gradetype == GRADE_TYPE_VALUE) {
         $data->finalgrade = unformat_float($data->finalgrade);
+
+    } else {
+        //this shoul not happen
+        $data->finalgrade = $old_grade_grade->finalgrade;
     }
 
     // the overriding of feedback is tricky - we have to care about external items only
@@ -183,7 +185,14 @@ if ($mform->is_cancelled()) {
     $grade_grade->grade_item =& $grade_item; // no db fetching
 
     if (has_capability('moodle/grade:manage', $context) or has_capability('moodle/grade:edit', $context)) {
-        $grade_grade->set_overridden($data->overridden);
+        if (!grade_floats_different($data->finalgrade, $old_grade_grade->finalgrade)
+          and $data->feedback === $old_grade_grade->feedback) {
+            // change overridden flag only if grade or feedback not changed
+            if (!isset($data->overridden)) {
+                $data->overridden = 0; // checkbox
+            }
+            $grade_grade->set_overridden($data->overridden);
+        }
     }
 
     if (has_capability('moodle/grade:manage', $context) or has_capability('moodle/grade:hide', $context)) {
index c4a11fbf8d7b19a84b938f4dcd93506235666dcf..3cf42bff71aaebb0186d05f794f988b2d34eb359 100644 (file)
@@ -925,6 +925,14 @@ class grade_item extends grade_object {
         return !$this->is_outcome_item() and ($this->is_external_item() or $this->is_calculated() or $this->is_course_item() or $this->is_category_item());
     }
 
+    /**
+     * Is the grade item feedback overridable
+     * @return boolean
+     */
+    function is_overridable_item_feedback() {
+        return !$this->is_outcome_item() and $this->is_external_item();
+    }
+
     /**
      * Returns true if grade items uses raw grades
      * @return boolean
@@ -1389,7 +1397,7 @@ class grade_item extends grade_object {
 
         // do we have comment from teacher?
         if ($feedback !== false) {
-            if ($this->is_external_item()) {
+            if ($this->is_overridable_item_feedback()) {
                 // external items (modules, plugins) may have own feedback
                 $grade->overridden = time();
             }
@@ -1405,7 +1413,8 @@ class grade_item extends grade_object {
 
         } else if (grade_floats_different($grade->finalgrade, $oldgrade->finalgrade)
                 or $grade->feedback       !== $oldgrade->feedback
-                or $grade->feedbackformat != $oldgrade->feedbackformat) {
+                or $grade->feedbackformat != $oldgrade->feedbackformat
+                or $grade->overridden     != $oldgrade->overridden) {
             $grade->timemodified = time(); // overridden flag might take over, but anyway
             $result = $grade->update($source);
         } else {
index 145db5ce0d8e73a79498ac432c4ee716e5eda0be..ea96b087055273e128ba395ad83276c9eb5ae056 100644 (file)
@@ -356,7 +356,12 @@ function grade_get_grades($courseid, $itemtype, $itemmodule, $iteminstance, $use
                         $grade->dategraded     = $grade_grades[$userid]->get_dategraded();
 
                         // create text representation of grade
-                        if (in_array($grade_item->id, $needsupdate)) {
+                        if ($grade_item->gradetype == GRADE_TYPE_TEXT or $grade_item->gradetype == GRADE_TYPE_NONE) {
+                            $grade->grade          = null;
+                            $grade->str_grade      = '-';
+                            $grade->str_long_grade = $grade->str_grade;
+                             
+                        } else if (in_array($grade_item->id, $needsupdate)) {
                             $grade->grade          = false;
                             $grade->str_grade      = get_string('error');
                             $grade->str_long_grade = $grade->str_grade;
index e49afc3759622a5cb48f877f280408589d5bddb4..fe0b1450e52737226545958a11e286c56816a972 100644 (file)
@@ -23,14 +23,6 @@ function xmldb_assignment_upgrade($oldversion=0) {
 
     $result = true;
 
-    if ($result && $oldversion < 2007072200) {
-        require_once $CFG->dirroot.'/mod/assignment/lib.php';
-        // too much debug output
-        $db->debug = false;
-        assignment_update_grades();
-        $db->debug = true;
-    }
-
     if ($result && $oldversion < 2007091900) { /// MDL-11268
 
     /// Changing nullability of field data1 on table assignment_submissions to null
@@ -55,6 +47,15 @@ function xmldb_assignment_upgrade($oldversion=0) {
         $result = execute_sql($sql);
     }
 
+    if ($result && $oldversion < 2007101510) {
+        // change grade typo to text if no grades MDL-13920
+        require_once $CFG->dirroot.'/mod/assignment/lib.php';
+        // too much debug output
+        $db->debug = false;
+        assignment_update_grades();
+        $db->debug = true;
+    }
+
     return $result;
 }
 
index f32789b602c85068f192c10cfb74e53d47fed73b..fa6900c0c0a5ee0c8b34df2ebeaaae8f6888140b 100644 (file)
@@ -2232,7 +2232,7 @@ function assignment_grade_item_update($assignment, $grades=NULL) {
         $params['scaleid']   = -$assignment->grade;
 
     } else {
-        $params['gradetype'] = GRADE_TYPE_NONE;
+        $params['gradetype'] = GRADE_TYPE_TEXT; // allow text comments only
     }
 
     if ($grades  === 'reset') {
index ec8262af33b49292a8ddf9f1836b44781118a1de..64f7f3a6ca46dff78de4015fd2711dd4ea2b34fb 100644 (file)
@@ -5,7 +5,7 @@
 //  This fragment is called by /admin/index.php
 ////////////////////////////////////////////////////////////////////////////////
 
-$module->version  = 2007101509;
+$module->version  = 2007101510;
 $module->requires = 2007101509;  // Requires this Moodle version
 $module->cron     = 60;