} 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
$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)) {
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
// 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();
}
} 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 {
$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;
$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
$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;
}
$params['scaleid'] = -$assignment->grade;
} else {
- $params['gradetype'] = GRADE_TYPE_NONE;
+ $params['gradetype'] = GRADE_TYPE_TEXT; // allow text comments only
}
if ($grades === 'reset') {
// This fragment is called by /admin/index.php
////////////////////////////////////////////////////////////////////////////////
-$module->version = 2007101509;
+$module->version = 2007101510;
$module->requires = 2007101509; // Requires this Moodle version
$module->cron = 60;