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');
+ }
+ }
+ });
+ }
};
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'));