From 50ef8eb9bd62a5d7cb13bc7d8a5df310584bb568 Mon Sep 17 00:00:00 2001 From: jamiesensei Date: Tue, 21 Nov 2006 09:17:46 +0000 Subject: [PATCH] adding lockoptions functionality to formslib library and added lockoptionsall() function which allows multiple dependencies for one dependent element and handles that properly. --- lib/formslib.php | 45 ++++++++++++++++++++++++++++++++++++---- lib/javascript-static.js | 31 ++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/lib/formslib.php b/lib/formslib.php index 4f6306fa3c..d5976e1ae0 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -448,6 +448,7 @@ class moodleform_mod extends moodleform { */ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { var $_types = array(); + var $_dependencies = array(); /** @@ -794,13 +795,49 @@ function validate_' . $this->_attributes['id'] . '(frm) { } function getLockOptionStartScript(){ - return ''; + $js = ''."\n"; + return $js; } function getLockOptionEndScript(){ - - return ''; + $js = ''."\n"; + return $js; + } + function addDependency($elementName, $dependentOn, $condition='checked'){ + $el=$this->getElement($elementName); + if (is_a($el, 'HTML_QuickForm_group')){ + $group=$el; + $els=$group->getElements(); + foreach (array_keys($els) as $elkey){ + $dependentNames[]=array('dependent'=>$group->getElementName($elkey), + 'condition'=>$condition); + } + }else{ + $dependentNames=array(array('dependent'=>$el->getName(), + 'condition'=>$condition)); + } + foreach ($dependentNames as $dependentName){ + $dependentOnEl=$this->getElement($dependentOn); + $name=$dependentOnEl->getName(); + $dependentOnEl->updateAttributes(array('onClick'=>"return lockoptionsall('".$this->getAttribute('id')."');\n")); + $this->_dependencies[$name][]=$dependentName; + } } - } /** diff --git a/lib/javascript-static.js b/lib/javascript-static.js index e63a382356..5914f78b8c 100644 --- a/lib/javascript-static.js +++ b/lib/javascript-static.js @@ -58,6 +58,35 @@ function lockoptions(form, master, subitems) { return(true); } +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=='checked'){ + thislock=!form.elements[master].checked; + }else{ + thislock=!(form.elements[master].value==items[master].condition); + } + + for (var i=0; i