diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 8b1d3122f08..12afe84e393 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -742,7 +742,8 @@ class grade_item extends grade_object { // Standardise score to the new grade range // NOTE: this is not compatible with current assignment grading - if ($this->itemmodule != 'assignment' and ($rawmin != $this->grademin or $rawmax != $this->grademax)) { + $isassignmentmodule = ($this->itemmodule == 'assignment') || ($this->itemmodule == 'assign'); + if (!$isassignmentmodule && ($rawmin != $this->grademin or $rawmax != $this->grademax)) { $rawgrade = grade_grade::standardise_score($rawgrade, $rawmin, $rawmax, $this->grademin, $this->grademax); } diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 5b2438b1e26..96c1c22de69 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -64,6 +64,7 @@ $string['batchoperationconfirmreverttodraft'] = 'Revert selected submissions to $string['batchoperationlock'] = 'lock submissions'; $string['batchoperationunlock'] = 'unlock submissions'; $string['batchoperationreverttodraft'] = 'revert submissions to draft'; +$string['changegradewarning'] = 'This assignment has graded submissions and changing the grade will not automatically re-calculate existing submission grades. You must re-grade all existing submissions, if you wish to change the grade.'; $string['comment'] = 'Comment'; $string['conversionexception'] = 'Could not convert assignment. Exception was: {$a}.'; $string['configshowrecentsubmissions'] = 'Everyone can see notifications of submissions in recent activity reports.'; diff --git a/mod/assign/mod_form.php b/mod/assign/mod_form.php index 8ad624c238b..4b9929f6048 100644 --- a/mod/assign/mod_form.php +++ b/mod/assign/mod_form.php @@ -45,7 +45,7 @@ class mod_assign_mod_form extends moodleform_mod { * @return void */ function definition() { - global $CFG, $DB; + global $CFG, $DB, $PAGE; $mform = $this->_form; $mform->addElement('header', 'general', get_string('general', 'form')); @@ -109,6 +109,21 @@ class mod_assign_mod_form extends moodleform_mod { $this->standard_coursemodule_elements(); $this->add_action_buttons(); + + // Add warning popup/noscript tag, if grades are changed by user. + if ($mform->elementExists('grade') && !empty($this->_instance) && $DB->record_exists_select('assign_grades', 'assignment = ? AND grade <> -1', array($this->_instance))) { + $module = array( + 'name' => 'mod_assign', + 'fullpath' => '/mod/assign/module.js', + 'requires' => array('node', 'event'), + 'strings' => array(array('changegradewarning', 'mod_assign')) + ); + $PAGE->requires->js_init_call('M.mod_assign.init_grade_change', null, false, $module); + + // Add noscript tag in case + $noscriptwarning = $mform->createElement('static', 'warning', null, html_writer::tag('noscript', get_string('changegradewarning', 'mod_assign'))); + $mform->insertElementBefore($noscriptwarning, 'grade'); + } } /** diff --git a/mod/assign/module.js b/mod/assign/module.js index d01c9b30318..a1cbe079237 100644 --- a/mod/assign/module.js +++ b/mod/assign/module.js @@ -127,4 +127,16 @@ M.mod_assign.init_grading_options = function(Y) { }); } }); +}; + +M.mod_assign.init_grade_change = function(Y) { + var gradenode = Y.one('#id_grade'); + if (gradenode) { + var originalvalue = gradenode.get('value'); + gradenode.on('change', function() { + if (gradenode.get('value') != originalvalue) { + alert(M.str.mod_assign.changegradewarning); + } + }); + } }; \ No newline at end of file