From 5048575d7e16eb31652e7b30119c3eb7cbcf6574 Mon Sep 17 00:00:00 2001 From: skodak Date: Sat, 15 Mar 2008 14:54:43 +0000 Subject: [PATCH] MDL-13920 assignment without grades now sets text grade type, fixed overriding of feedback and overriding logic in general on grade edit page; merged from MOODLE_19_STABLE --- grade/edit/tree/grade.php | 25 +++++++++++++++++-------- lib/grade/grade_item.php | 13 +++++++++++-- lib/gradelib.php | 7 ++++++- mod/assignment/db/upgrade.php | 17 +++++++++-------- mod/assignment/lib.php | 2 +- mod/assignment/version.php | 2 +- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/grade/edit/tree/grade.php b/grade/edit/tree/grade.php index 4e5e28696a..e0981c3b4d 100644 --- a/grade/edit/tree/grade.php +++ b/grade/edit/tree/grade.php @@ -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)) { diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index c4a11fbf8d..3cf42bff71 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -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 { diff --git a/lib/gradelib.php b/lib/gradelib.php index 145db5ce0d..ea96b08705 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -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; diff --git a/mod/assignment/db/upgrade.php b/mod/assignment/db/upgrade.php index e49afc3759..fe0b1450e5 100644 --- a/mod/assignment/db/upgrade.php +++ b/mod/assignment/db/upgrade.php @@ -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; } diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index f32789b602..fa6900c0c0 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -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') { diff --git a/mod/assignment/version.php b/mod/assignment/version.php index ec8262af33..64f7f3a6ca 100644 --- a/mod/assignment/version.php +++ b/mod/assignment/version.php @@ -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; -- 2.39.5