MDL-66958 gradingform_rubric: Only save on form change
authorMathew May <mathewm@hotmail.co.nz>
Tue, 5 Nov 2019 02:45:07 +0000 (10:45 +0800)
committerMathew May <mathewm@hotmail.co.nz>
Mon, 11 Nov 2019 03:25:17 +0000 (11:25 +0800)
grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js
grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map
grade/grading/form/rubric/amd/src/grades/grader/gradingpanel.js
grade/grading/form/rubric/classes/grades/grader/gradingpanel/external/fetch.php
grade/grading/form/rubric/lang/en/gradingform_rubric.php
grade/grading/form/rubric/templates/grades/grader/gradingpanel.mustache

index b3a2eea..b4c76ec 100644 (file)
Binary files a/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js and b/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js differ
index 8611812..427dec3 100644 (file)
Binary files a/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map and b/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map differ
index 52307f5..2b34c1e 100644 (file)
@@ -24,6 +24,7 @@
 
 import {call as fetchMany} from 'core/ajax';
 import {normaliseResult} from 'core_grades/grades/grader/gradingpanel/normalise';
 
 import {call as fetchMany} from 'core/ajax';
 import {normaliseResult} from 'core_grades/grades/grader/gradingpanel/normalise';
+import {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';
 
 
 // Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()
 
 
 // Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()
@@ -65,14 +66,18 @@ export const fetchCurrentGrade = (component, contextid, itemname, gradeduserid)
 export const storeCurrentGrade = async(component, contextid, itemname, gradeduserid, rootNode) => {
     const form = rootNode.querySelector('form');
 
 export const storeCurrentGrade = async(component, contextid, itemname, gradeduserid, rootNode) => {
     const form = rootNode.querySelector('form');
 
-    return normaliseResult(await fetchMany([{
-        methodname: `gradingform_rubric_grader_gradingpanel_store`,
-        args: {
-            component,
-            contextid,
-            itemname,
-            gradeduserid,
-            formdata: jQuery(form).serialize(),
-        },
-    }])[0]);
+    if (compareData(form) === true) {
+        return normaliseResult(await fetchMany([{
+            methodname: `gradingform_rubric_grader_gradingpanel_store`,
+            args: {
+                component,
+                contextid,
+                itemname,
+                gradeduserid,
+                formdata: jQuery(form).serialize(),
+            },
+        }])[0]);
+    } else {
+        return '';
+    }
 };
 };
index c60f421..6cf05b7 100644 (file)
@@ -159,7 +159,7 @@ class fetch extends external_api {
         $criterion = [];
         if ($definition->rubric_criteria) {
             // Iterate over the defined criterion in the rubric and map out what we need to render each item.
         $criterion = [];
         if ($definition->rubric_criteria) {
             // Iterate over the defined criterion in the rubric and map out what we need to render each item.
-            $criterion = array_map(function($criterion) use ($definitionid, $fillings, $context) {
+            $criterion = array_map(function($criterion) use ($definitionid, $fillings, $context, $hasgrade) {
                 // The general structure we'll be returning, we still need to get the remark (if any) and the levels associated.
                 $result = [
                     'id' => $criterion['id'],
                 // The general structure we'll be returning, we still need to get the remark (if any) and the levels associated.
                 $result = [
                     'id' => $criterion['id'],
@@ -213,8 +213,8 @@ class fetch extends external_api {
                     'id' => null,
                     'criterionid' => $criterion['id'],
                     'score' => '-',
                     'id' => null,
                     'criterionid' => $criterion['id'],
                     'score' => '-',
-                    'definition' => 'Not set',
-                    'checked' => null,
+                    'definition' => get_string('notset', 'gradingform_rubric'),
+                    'checked' => !$hasgrade,
                 ];
                 // Consult the grade filling to see if a level has been selected and if it is the current level.
                 if (array_key_exists('levelid', $filling) && $filling['levelid'] == 0) {
                 ];
                 // Consult the grade filling to see if a level has been selected and if it is the current level.
                 if (array_key_exists('levelid', $filling) && $filling['levelid'] == 0) {
index 6e2d299..85f3c6b 100644 (file)
@@ -57,6 +57,7 @@ $string['lockzeropoints'] = 'Calculate grade based on the rubric having a minimu
 $string['lockzeropoints_help'] = 'This setting only applies if the sum of the minimum number of points for each criterion is greater than 0. If ticked, the minimum achievable grade for the rubric will be greater than 0. If unticked, the minimum possible score for the rubric will be mapped to the minimum grade available for the activity (which is 0 unless a scale is used).';
 $string['name'] = 'Name';
 $string['needregrademessage'] = 'The rubric definition was changed after this student had been graded. The student can not see this rubric until you check the rubric and update the grade.';
 $string['lockzeropoints_help'] = 'This setting only applies if the sum of the minimum number of points for each criterion is greater than 0. If ticked, the minimum achievable grade for the rubric will be greater than 0. If unticked, the minimum possible score for the rubric will be mapped to the minimum grade available for the activity (which is 0 unless a scale is used).';
 $string['name'] = 'Name';
 $string['needregrademessage'] = 'The rubric definition was changed after this student had been graded. The student can not see this rubric until you check the rubric and update the grade.';
+$string['notset'] = 'Not set';
 $string['pluginname'] = 'Rubric';
 $string['pointsvalue'] = '{$a} points';
 $string['previewrubric'] = 'Preview rubric';
 $string['pluginname'] = 'Rubric';
 $string['pointsvalue'] = '{$a} points';
 $string['previewrubric'] = 'Preview rubric';
index a3d31cb..5164b59 100644 (file)
 require(['core/auto_rows'], function(AutoRows) {
     AutoRows.init(document.getElementById('gradingform_rubric-{{uniqid}}'));
 });
 require(['core/auto_rows'], function(AutoRows) {
     AutoRows.init(document.getElementById('gradingform_rubric-{{uniqid}}'));
 });
-{{/js}}
\ No newline at end of file
+{{/js}}