diff --git a/lib/formslib.php b/lib/formslib.php
index 4f6306fa3c7..d5976e1ae09 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 e63a3823564..5914f78b8c7 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