From 706c5b3acde0b32fa7210531e005ee44c1c01758 Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Thu, 9 May 2019 12:22:30 +0800 Subject: [PATCH] MDL-65506 forms: get the correct value for advcheckbox fields in js --- .../field/checkbox/classes/data_controller.php | 4 ++-- lib/pear/HTML/QuickForm/RuleRegistry.php | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/customfield/field/checkbox/classes/data_controller.php b/customfield/field/checkbox/classes/data_controller.php index 881e515ad4c..4d080d7c449 100644 --- a/customfield/field/checkbox/classes/data_controller.php +++ b/customfield/field/checkbox/classes/data_controller.php @@ -55,8 +55,8 @@ class data_controller extends \core_customfield\data_controller { $field = $this->get_field(); $config = $field->get('configdata'); $elementname = $this->get_form_element_name(); - // TODO MDL-65506 element 'advcheckbox' does not support 'required' rule. If checkbox is required (i.e. "agree to terms") - // then use 'checkbox' form element. + // If checkbox is required (i.e. "agree to terms") then use 'checkbox' form element. + // The advcheckbox element cannot be used for required fields because advcheckbox elements always provide a value. $isrequired = $field->get_configdata_property('required'); $mform->addElement($isrequired ? 'checkbox' : 'advcheckbox', $elementname, $this->get_field()->get_formatted_name()); $mform->setDefault($elementname, $config['checkbydefault']); diff --git a/lib/pear/HTML/QuickForm/RuleRegistry.php b/lib/pear/HTML/QuickForm/RuleRegistry.php index f25e37f81de..08ba246891a 100644 --- a/lib/pear/HTML/QuickForm/RuleRegistry.php +++ b/lib/pear/HTML/QuickForm/RuleRegistry.php @@ -302,15 +302,13 @@ class HTML_QuickForm_RuleRegistry " }\n"; } + } elseif ($element->getType() == 'advcheckbox') { + $value = " value{$jsIndex} = frm.elements['$elementName'][1].checked ?" . + " frm.elements['$elementName'][1].value : frm.elements['$elementName'][0].value;\n"; + $tmp_reset .= $reset ? " field[1].checked = field[1].defaultChecked;\n" : ''; } elseif ($element->getType() == 'checkbox') { - if (is_a($element, 'html_quickform_advcheckbox')) { - $value = " value{$jsIndex} = frm.elements['$elementName'][1].checked? frm.elements['$elementName'][1].value: frm.elements['$elementName'][0].value;\n"; - $tmp_reset .= $reset ? " field[1].checked = field[1].defaultChecked;\n" : ''; - } else { - $value = " value{$jsIndex} = frm.elements['$elementName'].checked? '1': '';\n"; - $tmp_reset .= $reset ? " field.checked = field.defaultChecked;\n" : ''; - } - + $value = " value{$jsIndex} = frm.elements['$elementName'].checked? '1': '';\n"; + $tmp_reset .= $reset ? " field.checked = field.defaultChecked;\n" : ''; } elseif ($element->getType() == 'radio') { $value = " value{$jsIndex} = '';\n" . // Fix for bug #5644