MDL-50852 formslib: Fixed client-side form validation problem.
authorJun Pataleta <jun@moodle.com>
Thu, 20 Aug 2015 02:36:59 +0000 (10:36 +0800)
committerJun Pataleta <jun@moodle.com>
Wed, 9 Sep 2015 07:35:01 +0000 (15:35 +0800)
This patch fixes the problem of client validation being broken when
shortforms is not enabled. This issue is caused by moodle-core-event
module not being loaded and the broadcast parameter in the
Y.Global.publish set to 2 instead of true.

lib/formslib.php
lib/yui/build/moodle-core-event/moodle-core-event-debug.js
lib/yui/build/moodle-core-event/moodle-core-event-min.js
lib/yui/build/moodle-core-event/moodle-core-event.js
lib/yui/src/event/js/event.js

index f4930bd..8fc5a7e 100644 (file)
@@ -2233,9 +2233,11 @@ function validate_' . $this->_formName . '_' . $escapedElementName . '(element,
   ret = validate_' . $this->_formName . '_' . $escapedElementName.'(frm.elements[\''.$elementName.'\'], \''.$escapedElementName.'\') && ret;
   if (!ret && !first_focus) {
     first_focus = true;
-    Y.Global.fire(M.core.globalEvents.FORM_ERROR, {formid: \''. $this->_attributes['id'] .'\',
-                                                   elementid: \'id_error_'.$escapedElementName.'\'});
-    document.getElementById(\'id_error_'.$escapedElementName.'\').focus();
+    Y.use(\'moodle-core-event\', function() {
+        Y.Global.fire(M.core.globalEvents.FORM_ERROR, {formid: \'' . $this->_attributes['id'] . '\',
+                                                       elementid: \'id_error_' . $escapedElementName . '\'});
+        document.getElementById(\'id_error_' . $escapedElementName . '\').focus();
+    });
   }
 ';
 
index cbf3e39..ca46f73 100644 (file)
Binary files a/lib/yui/build/moodle-core-event/moodle-core-event-debug.js and b/lib/yui/build/moodle-core-event/moodle-core-event-debug.js differ
index 426af2f..ced026e 100644 (file)
Binary files a/lib/yui/build/moodle-core-event/moodle-core-event-min.js and b/lib/yui/build/moodle-core-event/moodle-core-event-min.js differ
index 2a9e776..6a18fe6 100644 (file)
Binary files a/lib/yui/build/moodle-core-event/moodle-core-event.js and b/lib/yui/build/moodle-core-event/moodle-core-event.js differ
index 6f6a28a..5a51c2a 100644 (file)
@@ -28,7 +28,7 @@ var LOGNAME = 'moodle-core-event';
  */
 M.core = M.core || {};
 
-M.core.event = {
+M.core.event = M.core.event || {
     /**
      * This event is triggered when a page has added dynamic nodes to a page
      * that should be processed by the filter system. An example is loading
@@ -42,7 +42,7 @@ M.core.event = {
     FILTER_CONTENT_UPDATED: "filter-content-updated"
 };
 
-M.core.globalEvents = {
+M.core.globalEvents = M.core.globalEvents || {
     /**
      * This event is triggered when form has an error
      *
@@ -72,14 +72,16 @@ var eventDefaultConfig = {
 // Publish all the events with a standard config.
 var key;
 for (key in M.core.event) {
-    if (M.core.event.hasOwnProperty(key)) {
+    if (M.core.event.hasOwnProperty(key) && Y.getEvent(M.core.event[key]) === null) {
         Y.publish(M.core.event[key], eventDefaultConfig);
     }
 }
 
-//Publish all the global events.
+// Publish global events.
 for (key in M.core.globalEvents) {
-    if (M.core.globalEvents.hasOwnProperty(key)) {
-        Y.Global.publish(M.core.globalEvents[key], Y.merge(eventDefaultConfig, {broadcast: 2}));
+    // Make sure the key exists and that the event has not yet been published. Otherwise, skip publishing.
+    if (M.core.globalEvents.hasOwnProperty(key) && Y.Global.getEvent(M.core.globalEvents[key]) === null) {
+        Y.Global.publish(M.core.globalEvents[key], Y.merge(eventDefaultConfig, {broadcast: true}));
+        Y.log('Global event published: ' + key, 'debug', LOGNAME);
     }
 }