From 761670208a97c0ed7e1ff7c2e6a7ec5494eb93d3 Mon Sep 17 00:00:00 2001 From: Ruslan Kabalin Date: Tue, 19 Mar 2013 15:09:50 +0000 Subject: [PATCH] MDL-38555 forms: Prevent same data submission multiple times. This disables Submit button when the form has been submitted to prevent consequent submissions before the page has been loaded. --- lib/form/submit.js | 9 +++++++++ lib/form/submit.php | 22 ++++++++++++++++++++++ lib/formslib.php | 2 ++ 3 files changed, 33 insertions(+) create mode 100644 lib/form/submit.js diff --git a/lib/form/submit.js b/lib/form/submit.js new file mode 100644 index 00000000000..6287f16d896 --- /dev/null +++ b/lib/form/submit.js @@ -0,0 +1,9 @@ +M.form_submit = {}; + +M.form_submit.init = function(Y, options) { + Y.on('submit', function(e) { + if (!containsErrors) { + e.target.one('#'+options.submitid).setAttribute('disabled', 'true'); + } + }, '#'+options.formid); +}; \ No newline at end of file diff --git a/lib/form/submit.php b/lib/form/submit.php index af94e4f6872..445cfbc6fa5 100644 --- a/lib/form/submit.php +++ b/lib/form/submit.php @@ -38,6 +38,9 @@ require_once("HTML/QuickForm/submit.php"); * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class MoodleQuickForm_submit extends HTML_QuickForm_submit { + /** @var string Need to store id of form for submission control in JS*/ + var $_formid = ''; + /** * constructor * @@ -60,6 +63,7 @@ class MoodleQuickForm_submit extends HTML_QuickForm_submit { { switch ($event) { case 'createElement': + $this->_formid = $caller->getAttribute('id'); parent::onQuickFormEvent($event, $arg, $caller); if ($caller->isNoSubmitButton($arg[0])){ //need this to bypass client validation @@ -98,4 +102,22 @@ class MoodleQuickForm_submit extends HTML_QuickForm_submit { $this->_flagFrozen = true; } + /** + * Returns HTML for this form element. + * + * @return string + */ + function toHtml(){ + global $PAGE; + $options = array( + 'submitid' => $this->getAttribute('id'), + 'formid' => $this->_formid, + ); + $str = parent::toHtml(); + if ($this->getAttribute('onclick') === null) { + $module = array('name'=>'form_submit', 'fullpath'=>'/lib/form/submit.js'); + $PAGE->requires->js_init_call('M.form_submit.init', array($options), true, $module); + } + return $str; + } } diff --git a/lib/formslib.php b/lib/formslib.php index 22362f8826c..8f12d6aeea0 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -2096,6 +2096,7 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { //_formName . '(frm) { var frm = document.getElementById(\''. $this->_attributes['id'] .'\') var first_focus = false; ' . $validateJS . '; + containsErrors = !ret; return ret; } //]]>