MDL-8157 improved hadling of conditions in disabledIf formslib method
This commit is contained in:
+36
-20
@@ -1170,34 +1170,39 @@ function validate_' . $this->_formName . '(frm) {
|
||||
}
|
||||
|
||||
function getLockOptionEndScript(){
|
||||
|
||||
$iname = $this->getAttribute('id').'items';
|
||||
$js = '<script type="text/javascript">'."\n";
|
||||
$js .= '//<![CDATA['."\n";
|
||||
$js .= "var ".$this->getAttribute('id')."items= {";
|
||||
foreach ($this->_dependencies as $dependentOn => $elements){
|
||||
$js .= "'$dependentOn'".' : {dependents :[';
|
||||
foreach ($elements as $element){
|
||||
$elementNames = $this->_getElNamesRecursive($element['dependent']);
|
||||
foreach ($elementNames as $dependent){
|
||||
if ($dependent != $dependentOn) {
|
||||
$js.="'".$dependent."', ";
|
||||
$js .= "var $iname = Array();\n";
|
||||
|
||||
foreach ($this->_dependencies as $dependentOn => $conditions){
|
||||
$js .= "{$iname}['$dependentOn'] = Array();\n";
|
||||
foreach ($conditions as $condition=>$values) {
|
||||
$js .= "{$iname}['$dependentOn']['$condition'] = Array();\n";
|
||||
foreach ($values as $value=>$dependents) {
|
||||
$js .= "{$iname}['$dependentOn']['$condition']['$value'] = Array();\n";
|
||||
$i = 0;
|
||||
foreach ($dependents as $dependent) {
|
||||
$elements = $this->_getElNamesRecursive($dependent);
|
||||
foreach($elements as $element) {
|
||||
if ($element == $dependentOn) {
|
||||
continue;
|
||||
}
|
||||
$js .= "{$iname}['$dependentOn']['$condition']['$value'][$i]='$element';\n";
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$js=rtrim($js, ', ');
|
||||
$js .= "],\n";
|
||||
$js .= "condition : '{$element['condition']}',\n";
|
||||
$js .= "value : '{$element['value']}'},\n";
|
||||
|
||||
};
|
||||
$js=rtrim($js, ",\n");
|
||||
$js .= '};'."\n";
|
||||
}
|
||||
$js .="lockoptionsallsetup('".$this->getAttribute('id')."');\n";
|
||||
$js .='//]]>'."\n";
|
||||
$js .='</script>'."\n";
|
||||
return $js;
|
||||
}
|
||||
|
||||
function _getElNamesRecursive(&$element, $group=null){
|
||||
function _getElNamesRecursive($element, $group=null){
|
||||
if ($group==null){
|
||||
$el = $this->getElement($element);
|
||||
} else {
|
||||
@@ -1237,16 +1242,27 @@ function validate_' . $this->_formName . '(frm) {
|
||||
* @param string $condition the condition to check
|
||||
* @param mixed $value used in conjunction with condition.
|
||||
*/
|
||||
function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value=null){
|
||||
$this->_dependencies[$dependentOn][] = array('dependent'=>$elementName,
|
||||
'condition'=>$condition, 'value'=>$value);
|
||||
function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value='1'){
|
||||
if (!array_key_exists($dependentOn, $this->_dependencies)) {
|
||||
$this->_dependencies[$dependentOn] = array();
|
||||
}
|
||||
if (!array_key_exists($condition, $this->_dependencies[$dependentOn])) {
|
||||
$this->_dependencies[$dependentOn][$condition] = array();
|
||||
}
|
||||
if (!array_key_exists($value, $this->_dependencies[$dependentOn][$condition])) {
|
||||
$this->_dependencies[$dependentOn][$condition][$value] = array();
|
||||
}
|
||||
$this->_dependencies[$dependentOn][$condition][$value][] = $elementName;
|
||||
}
|
||||
|
||||
function registerNoSubmitButton($buttonname){
|
||||
$this->_noSubmitButtons[]=$buttonname;
|
||||
}
|
||||
|
||||
function isNoSubmitButton($buttonname){
|
||||
return (array_search($buttonname, $this->_noSubmitButtons)!==FALSE);
|
||||
}
|
||||
|
||||
function _registerCancelButton($addfieldsname){
|
||||
$this->_cancelButtons[]=$addfieldsname;
|
||||
}
|
||||
|
||||
+45
-54
@@ -81,65 +81,56 @@ function unlockoption(form,item) {
|
||||
eval("form.h"+item+".value=0");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function lockoptionsall(formid) {
|
||||
var lock = new Object();
|
||||
var items = eval(formid+'items');
|
||||
var form = document.forms[formid];
|
||||
for (var master in items){
|
||||
var subitems=items[master].dependents;
|
||||
var thislock;
|
||||
if (items[master].condition=='notchecked'){
|
||||
thislock=!form.elements[master].checked;
|
||||
} else if (items[master].condition=='checked'){
|
||||
thislock=form.elements[master].checked;
|
||||
} else if (items[master].condition=='noitemselected'){
|
||||
thislock=(form.elements[master].selectedIndex==-1);
|
||||
} else if (items[master].condition=='eq'){
|
||||
thislock=(form.elements[master].value==items[master].value);
|
||||
} else {
|
||||
thislock=(form.elements[master].value!=items[master].value);
|
||||
|
||||
}
|
||||
|
||||
for (var i=0; i<subitems.length; i++) {
|
||||
if (lock[subitems[i]]!=null){
|
||||
lock[subitems[i]] = thislock || lock[subitems[i]];
|
||||
}else{
|
||||
lock[subitems[i]] = thislock;
|
||||
var form = document.forms[formid];
|
||||
var dependons = eval(formid+'items');
|
||||
for (var dependon in dependons) {
|
||||
var master = form[dependon];
|
||||
for (var condition in dependons[dependon]) {
|
||||
for (var value in dependons[dependon][condition]) {
|
||||
var lock;
|
||||
switch (condition) {
|
||||
case 'notchecked':
|
||||
lock = !master.checked; break;
|
||||
case 'checked':
|
||||
lock = master.checked; break;
|
||||
case 'noitemselected':
|
||||
lock = master.selectedIndex==-1; break;
|
||||
case 'eq':
|
||||
lock = master.value==value; break;
|
||||
default:
|
||||
lock = master.value!=value; break;
|
||||
}
|
||||
for (var ei in dependons[dependon][condition][value]) {
|
||||
var formelement = form[dependons[dependon][condition][value][ei]];
|
||||
formelement.disabled = lock;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var item in lock) {
|
||||
form.elements[item].disabled=lock[item];
|
||||
}
|
||||
}
|
||||
return(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function lockoptionsallsetup(formid) {
|
||||
var varname = formid.replace(/\-/g, '_');
|
||||
var items=eval(varname+'items');
|
||||
var form=document.forms[formid];
|
||||
for (var i = 0; i < form.elements.length; i++){
|
||||
var found=false;
|
||||
var formelement = form.elements[i];
|
||||
if (formelement.type=='reset'){
|
||||
formelement.onclick = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
|
||||
formelement.onblur = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
|
||||
formelement.onchange = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
|
||||
} else {
|
||||
for (var master in items){
|
||||
if (master==formelement.name){
|
||||
formelement.onclick = function(){return lockoptionsall(this.form.getAttribute('id'));};
|
||||
formelement.onblur = function(){return lockoptionsall(this.form.getAttribute('id'));};
|
||||
formelement.onchange = function(){return lockoptionsall(this.form.getAttribute('id'));};
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lockoptionsall(formid);
|
||||
var form = document.forms[formid];
|
||||
var dependons = eval(formid+'items');
|
||||
for (var dependon in dependons) {
|
||||
var master = form[dependon];
|
||||
master.onclick = function() {return lockoptionsall(this.form.getAttribute('id'));};
|
||||
master.onblur = function() {return lockoptionsall(this.form.getAttribute('id'));};
|
||||
master.onchange = function() {return lockoptionsall(this.form.getAttribute('id'));};
|
||||
}
|
||||
for (var i = 0; i < form.elements.length; i++){
|
||||
var formelement = form.elements[i];
|
||||
if (formelement.type=='reset') {
|
||||
formelement.onclick = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
|
||||
formelement.onblur = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
|
||||
formelement.onchange = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
|
||||
}
|
||||
}
|
||||
return lockoptionsall(formid);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user