From 9e494233b079570d12a980875b99ac06caa8c604 Mon Sep 17 00:00:00 2001 From: Luke Tucker Date: Fri, 9 Nov 2012 15:26:58 +1030 Subject: [PATCH 1/2] MDL-36167: Update all users in assignment quickgrade form to ensure feedback is saved --- mod/assign/locallib.php | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 3d4484773da..f6b8815b965 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -2613,19 +2613,16 @@ class assign { // gets a list of possible users and look for values based upon that. foreach ($participants as $userid => $unused) { $modified = optional_param('grademodified_' . $userid, -1, PARAM_INT); - if ($modified >= 0) { - // gather the userid, updated grade and last modified value - $record = new stdClass(); - $record->userid = $userid; + // gather the userid, updated grade and last modified value + $record = new stdClass(); + $record->userid = $userid; + $gradevalue = optional_param('quickgrade_' . $userid, '', PARAM_TEXT); + if($modified >= 0) { $record->grade = unformat_float(required_param('quickgrade_' . $record->userid, PARAM_TEXT)); - $record->lastmodified = $modified; - $record->gradinginfo = grade_get_grades($this->get_course()->id, 'mod', 'assign', $this->get_instance()->id, array($userid)); - $users[$userid] = $record; } - } - if (empty($users)) { - // Quick check to see whether we have any users to update and we don't - return get_string('quickgradingchangessaved', 'assign'); // Technical lie + $record->lastmodified = $modified; + $record->gradinginfo = grade_get_grades($this->get_course()->id, 'mod', 'assign', $this->get_instance()->id, array($userid)); + $users[$userid] = $record; } list($userids, $params) = $DB->get_in_or_equal(array_keys($users), SQL_PARAMS_NAMED); @@ -2659,7 +2656,8 @@ class assign { foreach ($this->feedbackplugins as $plugin) { if ($plugin->is_visible() && $plugin->is_enabled() && $plugin->supports_quickgrading()) { if ($plugin->is_quickgrading_modified($modified->userid, $grade)) { - if ((int)$current->lastmodified > (int)$modified->lastmodified) { + if ($modified->lastmodified >= 0 && + (int)$current->lastmodified > (int)$modified->lastmodified) { return get_string('errorrecordmodified', 'assign'); } else { $modifiedusers[$modified->userid] = $modified; From 7cc72770649ed813e09458a52f2773864125be56 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Wed, 21 Nov 2012 09:19:45 +0800 Subject: [PATCH 2/2] MDL-36167: Assignment quickgrading fix when there is no grade (ensure feedback still saves) This patch modifies the previous on by Luke Tucker so that the lastmodified hidden field is always added to the quickgrading form even if there is no grade for the assignment. This ensures that the lastmodified checks still work (to prevent teachers overwriting each others feedback) and feedback is saved when there is no grade. Conflicts: mod/assign/locallib.php --- mod/assign/locallib.php | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index f6b8815b965..a37754b3049 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -966,6 +966,8 @@ class assign { static $scalegrades = array(); + $o = ''; + if ($this->get_instance()->grade >= 0) { // Normal number if ($editing && $this->get_instance()->grade > 0) { @@ -974,15 +976,18 @@ class assign { } else { $displaygrade = format_float($grade); } - $o = ''; + $o .= ''; $o .= ' / ' . format_float($this->get_instance()->grade,2); $o .= ''; return $o; } else { + $o .= ''; if ($grade == -1 || $grade === null) { - return '-'; + $o .= '-'; + return $o; } else { - return format_float(($grade),2) .' / '. format_float($this->get_instance()->grade,2); + $o .= format_float(($grade),2) .' / '. format_float($this->get_instance()->grade,2); + return $o; } } @@ -992,11 +997,12 @@ class assign { if ($scale = $DB->get_record('scale', array('id'=>-($this->get_instance()->grade)))) { $this->cache['scale'] = make_menu_from_list($scale->scale); } else { - return '-'; + $o .= '-'; + return $o; } } if ($editing) { - $o = ''; $o .= ''; foreach ($this->cache['scale'] as $optionid => $option) { $selected = ''; @@ -1011,9 +1017,11 @@ class assign { } else { $scaleid = (int)$grade; if (isset($this->cache['scale'][$scaleid])) { - return $this->cache['scale'][$scaleid]; + $o .= $this->cache['scale'][$scaleid]; + return $o; } - return '-'; + $o .= '-'; + return $o; } } } @@ -2613,12 +2621,12 @@ class assign { // gets a list of possible users and look for values based upon that. foreach ($participants as $userid => $unused) { $modified = optional_param('grademodified_' . $userid, -1, PARAM_INT); - // gather the userid, updated grade and last modified value + // Gather the userid, updated grade and last modified value. $record = new stdClass(); $record->userid = $userid; $gradevalue = optional_param('quickgrade_' . $userid, '', PARAM_TEXT); if($modified >= 0) { - $record->grade = unformat_float(required_param('quickgrade_' . $record->userid, PARAM_TEXT)); + $record->grade = unformat_float(optional_param('quickgrade_' . $record->userid, -1, PARAM_TEXT)); } $record->lastmodified = $modified; $record->gradinginfo = grade_get_grades($this->get_course()->id, 'mod', 'assign', $this->get_instance()->id, array($userid)); @@ -2656,8 +2664,7 @@ class assign { foreach ($this->feedbackplugins as $plugin) { if ($plugin->is_visible() && $plugin->is_enabled() && $plugin->supports_quickgrading()) { if ($plugin->is_quickgrading_modified($modified->userid, $grade)) { - if ($modified->lastmodified >= 0 && - (int)$current->lastmodified > (int)$modified->lastmodified) { + if ((int)$current->lastmodified > (int)$modified->lastmodified) { return get_string('errorrecordmodified', 'assign'); } else { $modifiedusers[$modified->userid] = $modified;