Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

MDL-27045 formslib: fix disabledif for advcheckbox

This is based on earlier work by Henning Bostelmann and Tom Potts.
  • Loading branch information...
commit 0f8e22ee96dc6d5e648415f2d31f58102d6df51a 1 parent 02c43cd
@timhunt timhunt authored
Showing with 25 additions and 1 deletion.
  1. +20 −0 lib/form/form.js
  2. +5 −1 lib/formslib.php
View
20 lib/form/form.js
@@ -237,6 +237,10 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
_dependency_notchecked : function(elements, value) {
var lock = false;
elements.each(function(){
+ if (this.getAttribute('type').toLowerCase()=='hidden' && Y.Node.getDOMNode(this).ancestor('div.felement.fcheckbox')) {
+ // This is the hidden input that is part of an advcheckbox.
+ return;
+ }
if (this.getAttribute('type').toLowerCase()=='radio' && this.get('value') != value) {
return;
}
@@ -250,6 +254,10 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
_dependency_checked : function(elements, value) {
var lock = false;
elements.each(function(){
+ if (this.getAttribute('type').toLowerCase()=='hidden' && Y.Node.getDOMNode(this).ancestor('div.felement.fcheckbox')) {
+ // This is the hidden input that is part of an advcheckbox.
+ return;
+ }
if (this.getAttribute('type').toLowerCase()=='radio' && this.get('value') != value) {
return;
}
@@ -272,10 +280,16 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
},
_dependency_eq : function(elements, value) {
var lock = false;
+ var hidden_val = false;
elements.each(function(){
if (this.getAttribute('type').toLowerCase()=='radio' && !Y.Node.getDOMNode(this).checked) {
return;
+ } else if (this.getAttribute('type').toLowerCase() == 'hidden' && Y.Node.getDOMNode(this).ancestor('div.felement.fcheckbox')) {
+ // This is the hidden input that is part of an advcheckbox.
+ hidden_val = (this.get('value') == value);
+ return;
} else if (this.getAttribute('type').toLowerCase() == 'checkbox' && !Y.Node.getDOMNode(this).checked) {
+ lock = lock || hidden_val;
return;
}
//check for filepicker status
@@ -303,10 +317,16 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
},
_dependency_default : function(elements, value, ev) {
var lock = false;
+ var hidden_val = false;
elements.each(function(){
if (this.getAttribute('type').toLowerCase()=='radio' && !Y.Node.getDOMNode(this).checked) {
return;
+ } else if (this.getAttribute('type').toLowerCase() == 'hidden' && Y.Node.getDOMNode(this).ancestor('div.felement.fcheckbox')) {
+ // This is the hidden input that is part of an advcheckbox.
+ hidden_val = (this.get('value') != value);
+ return;
} else if (this.getAttribute('type').toLowerCase() == 'checkbox' && !Y.Node.getDOMNode(this).checked) {
+ lock = lock || hidden_val;
return;
}
//check for filepicker status
View
6 lib/formslib.php
@@ -1963,7 +1963,11 @@ function _getElNamesRecursive($element) {
} else if (is_a($element, 'HTML_QuickForm_hidden')) {
return array();
- } else if (method_exists($element, 'getPrivateName')) {
+ } else if (method_exists($element, 'getPrivateName') &&
+ !($element instanceof HTML_QuickForm_advcheckbox)) {
+ // The advcheckbox element implements a method called getPrivateName,
+ // but in a way that is not compatible with the generic API, so we
+ // have to explicitly exclude it.
return array($element->getPrivateName());
} else {
Please sign in to comment.
Something went wrong with that request. Please try again.