From b198bfbfe96f54306077a4e5cb38a941f53aa7d6 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Wed, 19 Jul 2017 15:26:13 +0530 Subject: [PATCH 1/2] MDL-58196 availability: Add appropriate dependencies in mform --- mod/quiz/mod_form.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mod/quiz/mod_form.php b/mod/quiz/mod_form.php index 615c66fd44a..6a97bd18c14 100644 --- a/mod/quiz/mod_form.php +++ b/mod/quiz/mod_form.php @@ -514,6 +514,11 @@ class mod_quiz_mod_form extends moodleform_mod { $toform[$name] = $value; } } + + // Completion settings check. + if (empty($toform['completionusegrade'])) { + $toform['completionpass'] = 0; // Forced unchecked. + } } public function validation($data, $files) { @@ -618,7 +623,7 @@ class mod_quiz_mod_form extends moodleform_mod { $group = array(); $group[] = $mform->createElement('advcheckbox', 'completionpass', null, get_string('completionpass', 'quiz'), array('group' => 'cpass')); - + $mform->disabledIf('completionpass', 'completionusegrade', 'notchecked'); $group[] = $mform->createElement('advcheckbox', 'completionattemptsexhausted', null, get_string('completionattemptsexhausted', 'quiz'), array('group' => 'cattempts')); From 268acaeb93b581f4c1a49a800e4e519bf1d10013 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Thu, 20 Jul 2017 12:05:02 +0530 Subject: [PATCH 2/2] MDL-58196 availability: Fix UI for pass/fail config For pass/fail setting to work properly, activities must have 'Require grade' completion set, just make sure we don't allow activities without this setting to be set --- availability/condition/completion/classes/frontend.php | 5 +++-- .../completion/lang/en/availability_completion.php | 1 + .../moodle-availability_completion-form-debug.js | 10 ++++++++++ .../moodle-availability_completion-form-min.js | 2 +- .../moodle-availability_completion-form.js | 10 ++++++++++ .../condition/completion/yui/src/form/js/form.js | 10 ++++++++++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/availability/condition/completion/classes/frontend.php b/availability/condition/completion/classes/frontend.php index 8b425d73c24..7427328c4dc 100644 --- a/availability/condition/completion/classes/frontend.php +++ b/availability/condition/completion/classes/frontend.php @@ -65,8 +65,9 @@ class frontend extends \core_availability\frontend { // Add each course-module if it has completion turned on and is not // the one currently being edited. if ($othercm->completion && (empty($cm) || $cm->id != $id) && !$othercm->deletioninprogress) { - $cms[] = (object)array('id' => $id, 'name' => - format_string($othercm->name, true, array('context' => $context))); + $cms[] = (object)array('id' => $id, + 'name' => format_string($othercm->name, true, array('context' => $context)), + 'completiongradeitemnumber' => $othercm->completiongradeitemnumber); } } diff --git a/availability/condition/completion/lang/en/availability_completion.php b/availability/condition/completion/lang/en/availability_completion.php index aa41e647de8..938cbaba7d8 100644 --- a/availability/condition/completion/lang/en/availability_completion.php +++ b/availability/condition/completion/lang/en/availability_completion.php @@ -24,6 +24,7 @@ $string['description'] = 'Require students to complete (or not complete) another activity.'; $string['error_selectcmid'] = 'You must select an activity for the completion condition.'; +$string['error_selectcmidpassfail'] = 'You must select an activity with "Require grade" completion condition set.'; $string['label_cm'] = 'Activity or resource'; $string['label_completion'] = 'Required completion status'; $string['missing'] = '(Missing activity)'; diff --git a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js index 48855484507..5212364500a 100644 --- a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js +++ b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js @@ -78,6 +78,16 @@ M.availability_completion.form.fillErrors = function(errors, node) { if (cmid === 0) { errors.push('availability_completion:error_selectcmid'); } + var e = parseInt(node.one('select[name=e]').get('value'), 10); + if (((e === 2) || (e === 3))) { + this.cms.forEach(function(cm) { + if (cm.id === cmid) { + if (cm.completiongradeitemnumber === null) { + errors.push('availability_completion:error_selectcmidpassfail'); + } + } + }); + } }; diff --git a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js index 36efbb5161a..10be26c2d35 100644 --- a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js +++ b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js @@ -1 +1 @@ -YUI.add("moodle-availability_completion-form",function(e,t){M.availability_completion=M.availability_completion||{},M.availability_completion.form=e.Object(M.core_availability.plugin),M.availability_completion.form.initInner=function(e){this.cms=e},M.availability_completion.form.getNode=function(t){var n=' '+M.util.get_string("title","availability_completion")+""+' ";var s=e.Node.create(''+n+"");t.cm!==undefined&&s.one("select[name=cm] > option[value="+t.cm+"]")&&s.one("select[name=cm]").set("value",""+t.cm),t.e!==undefined&&s.one("select[name=e]").set("value",""+t.e);if(!M.availability_completion.form.addedEvents){M.availability_completion.form.addedEvents=!0;var o=e.one(".availability-field");o.delegate("change",function(){M.core_availability.form.update()},".availability_completion select")}return s},M.availability_completion.form.fillValue=function(e,t){e.cm=parseInt(t.one("select[name=cm]").get("value"),10),e.e=parseInt(t.one("select[name=e]").get("value"),10)},M.availability_completion.form.fillErrors=function(e,t){var n=parseInt(t.one("select[name=cm]").get("value"),10);n===0&&e.push("availability_completion:error_selectcmid")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]}); +YUI.add("moodle-availability_completion-form",function(e,t){M.availability_completion=M.availability_completion||{},M.availability_completion.form=e.Object(M.core_availability.plugin),M.availability_completion.form.initInner=function(e){this.cms=e},M.availability_completion.form.getNode=function(t){var n=' '+M.util.get_string("title","availability_completion")+""+' ";var s=e.Node.create(''+n+"");t.cm!==undefined&&s.one("select[name=cm] > option[value="+t.cm+"]")&&s.one("select[name=cm]").set("value",""+t.cm),t.e!==undefined&&s.one("select[name=e]").set("value",""+t.e);if(!M.availability_completion.form.addedEvents){M.availability_completion.form.addedEvents=!0;var o=e.one(".availability-field");o.delegate("change",function(){M.core_availability.form.update()},".availability_completion select")}return s},M.availability_completion.form.fillValue=function(e,t){e.cm=parseInt(t.one("select[name=cm]").get("value"),10),e.e=parseInt(t.one("select[name=e]").get("value"),10)},M.availability_completion.form.fillErrors=function(e,t){var n=parseInt(t.one("select[name=cm]").get("value"),10);n===0&&e.push("availability_completion:error_selectcmid");var r=parseInt(t.one("select[name=e]").get("value"),10);(r===2||r===3)&&this.cms.forEach(function(t){t.id===n&&t.completiongradeitemnumber===null&&e.push("availability_completion:error_selectcmidpassfail")})}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]}); diff --git a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js index 48855484507..5212364500a 100644 --- a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js +++ b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js @@ -78,6 +78,16 @@ M.availability_completion.form.fillErrors = function(errors, node) { if (cmid === 0) { errors.push('availability_completion:error_selectcmid'); } + var e = parseInt(node.one('select[name=e]').get('value'), 10); + if (((e === 2) || (e === 3))) { + this.cms.forEach(function(cm) { + if (cm.id === cmid) { + if (cm.completiongradeitemnumber === null) { + errors.push('availability_completion:error_selectcmidpassfail'); + } + } + }); + } }; diff --git a/availability/condition/completion/yui/src/form/js/form.js b/availability/condition/completion/yui/src/form/js/form.js index e7b418ebfa4..77c9cf1e71f 100644 --- a/availability/condition/completion/yui/src/form/js/form.js +++ b/availability/condition/completion/yui/src/form/js/form.js @@ -76,4 +76,14 @@ M.availability_completion.form.fillErrors = function(errors, node) { if (cmid === 0) { errors.push('availability_completion:error_selectcmid'); } + var e = parseInt(node.one('select[name=e]').get('value'), 10); + if (((e === 2) || (e === 3))) { + this.cms.forEach(function(cm) { + if (cm.id === cmid) { + if (cm.completiongradeitemnumber === null) { + errors.push('availability_completion:error_selectcmidpassfail'); + } + } + }); + } };