MDL-57697 survery: migrate validation script from yui2
authorDan Poltawski <dan@moodle.com>
Wed, 18 Jan 2017 16:17:30 +0000 (16:17 +0000)
committerDan Poltawski <dan@moodle.com>
Wed, 8 Feb 2017 11:22:11 +0000 (11:22 +0000)
Just a modernisation of the existing yui2 code to AMD/jQuery and away from alert();

mod/survey/amd/build/validation.min.js [new file with mode: 0644]
mod/survey/amd/src/validation.js [new file with mode: 0644]
mod/survey/survey.js [deleted file]
mod/survey/view.php

diff --git a/mod/survey/amd/build/validation.min.js b/mod/survey/amd/build/validation.min.js
new file mode 100644 (file)
index 0000000..004399b
Binary files /dev/null and b/mod/survey/amd/build/validation.min.js differ
diff --git a/mod/survey/amd/src/validation.js b/mod/survey/amd/src/validation.js
new file mode 100644 (file)
index 0000000..f04de06
--- /dev/null
@@ -0,0 +1,71 @@
+// 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;
+            });
+        }
+    };
+});
diff --git a/mod/survey/survey.js b/mod/survey/survey.js
deleted file mode 100644 (file)
index 3017570..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-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;
-            }
-        });
-    }
-};
index 7336415..1394106 100644 (file)
@@ -175,20 +175,11 @@ if (!is_enrolled($context)) {
     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").'" />';