--- /dev/null
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Javascript to handle survey validation.
+ *
+ * @module mod_survey/validation
+ * @package mod_survey
+ * @copyright 2017 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since 3.3
+ */
+define(['jquery', 'core/str', 'core/modal_factory', 'core/notification'], function($, Str, ModalFactory, Notification) {
+ return {
+ /**
+ * Prevents form submission until all radio buttons are chosen, displays
+ * modal error if any choices are missing.
+ *
+ * @param {String} formid HTML id of form
+ * @param {Array} questions
+ */
+ ensureRadiosChosen: function(formid, questions) {
+ // Prepare modal for display in case of problems.
+ var modalPromise = Str.get_strings([
+ {key: 'error', component: 'moodle'},
+ {key: 'questionsnotanswered', component: 'survey'},
+ ]).then(function(strings) {
+ return ModalFactory.create({
+ type: ModalFactory.types.CANCEL,
+ title: strings[0],
+ body: strings[1],
+ });
+ }).catch(Notification.exception);
+
+ var form = $('#' + formid);
+ form.submit(function(e) {
+ var error = false;
+ questions.forEach(function(question) {
+ var checkedResponse = form.find('input:radio[name="' + question.name + '"]:checked');
+ if (checkedResponse.val() == question.default) {
+ error = true;
+ }
+ });
+
+ if (error) {
+ e.preventDefault();
+ // Display the modal error.
+ modalPromise.then(function(modal) {
+ modal.show();
+ return;
+ });
+ return false;
+ }
+
+ return true;
+ });
+ }
+ };
+});
+++ /dev/null
-
-M.mod_survey = {};
-
-M.mod_survey.init = function(Y) {
- if (document.getElementById('surveyform')) {
- var surveyform = document.getElementById('surveyform');
- Y.YUI2.util.Event.addListener('surveyform', "submit", function(e) {
- var error = false;
- if (document.getElementById('surveyform')) {
- var surveyform = document.getElementById('surveyform');
- for (var i=0; i < surveycheck.questions.length; i++) {
- var tempquestion = surveycheck.questions[i];
- if (surveyform[tempquestion['question']][tempquestion['default']].checked) {
- error = true;
- }
- }
- }
- if (error) {
- alert(M.util.get_string('questionsnotanswered', 'survey'));
- Y.YUI2.util.Event.preventDefault(e);
- return false;
- } else {
- return true;
- }
- });
- }
-};
exit;
}
-$checkarray = Array('questions' => Array());
-if (!empty($checklist)) {
- foreach ($checklist as $question => $default) {
- $checkarray['questions'][] = Array('question' => $question, 'default' => $default);
- }
+$questions = array();
+foreach ($checklist as $question => $default) {
+ $questions[] = array('name' => $question, 'default' => $default);
}
-$PAGE->requires->data_for_js('surveycheck', $checkarray);
-$module = array(
- 'name' => 'mod_survey',
- 'fullpath' => '/mod/survey/survey.js',
- 'requires' => array('yui2-event'),
-);
-$PAGE->requires->string_for_js('questionsnotanswered', 'survey');
-$PAGE->requires->js_init_call('M.mod_survey.init', $checkarray, true, $module);
+$PAGE->requires->js_call_amd('mod_survey/validation', 'ensureRadiosChosen', array('surveyform', $questions));
echo '<br />';
echo '<input type="submit" class="btn btn-primary" value="'.get_string("clicktocontinue", "survey").'" />';