mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 08:26:37 +02:00
MDL-12130 and MDL-12129 - fixed advanced status of elements when header not closed; disableIf now works inside grouped elements too; code cleanup in focus() and _getElNamesRecursive()
This commit is contained in:
parent
0dbb2191fb
commit
46f3921edd
1 changed files with 56 additions and 35 deletions
|
@ -138,22 +138,32 @@ class moodleform {
|
||||||
* first element if no errors. Use this as a parameter
|
* first element if no errors. Use this as a parameter
|
||||||
* when calling print_header
|
* when calling print_header
|
||||||
*/
|
*/
|
||||||
function focus($name=NULL){
|
function focus($name=NULL) {
|
||||||
$form =& $this->_form;
|
$form =& $this->_form;
|
||||||
$elkeys=array_keys($form->_elementIndex);
|
$elkeys = array_keys($form->_elementIndex);
|
||||||
|
$error = false;
|
||||||
if (isset($form->_errors) && 0 != count($form->_errors)){
|
if (isset($form->_errors) && 0 != count($form->_errors)){
|
||||||
$errorkeys = array_keys($form->_errors);
|
$errorkeys = array_keys($form->_errors);
|
||||||
$elkeys = array_intersect($elkeys, $errorkeys);
|
$elkeys = array_intersect($elkeys, $errorkeys);
|
||||||
|
$error = true;
|
||||||
}
|
}
|
||||||
$names=null;
|
|
||||||
while (!$names){
|
if ($error or empty($name)) {
|
||||||
$el = array_shift($elkeys);
|
$names = array();
|
||||||
$names = $form->_getElNamesRecursive($el);
|
while (empty($names) and !empty($elkeys)) {
|
||||||
|
$el = array_shift($elkeys);
|
||||||
|
$names = $form->_getElNamesRecursive($el);
|
||||||
|
}
|
||||||
|
if (!empty($names)) {
|
||||||
|
$name = array_shift($names);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (empty($name)) {
|
|
||||||
$name=array_shift($names);
|
$focus = '';
|
||||||
|
if (!empty($name)) {
|
||||||
|
$focus = 'forms[\''.$form->getAttribute('id').'\'].elements[\''.$name.'\']';
|
||||||
}
|
}
|
||||||
$focus='forms[\''.$this->_form->getAttribute('id').'\'].elements[\''.$name.'\']';
|
|
||||||
return $focus;
|
return $focus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -803,8 +813,7 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function accept(&$renderer)
|
function accept(&$renderer) {
|
||||||
{
|
|
||||||
if (method_exists($renderer, 'setAdvancedElements')){
|
if (method_exists($renderer, 'setAdvancedElements')){
|
||||||
//check for visible fieldsets where all elements are advanced
|
//check for visible fieldsets where all elements are advanced
|
||||||
//and mark these headers as advanced as well.
|
//and mark these headers as advanced as well.
|
||||||
|
@ -815,14 +824,19 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
|
||||||
$anyAdvanced = false;
|
$anyAdvanced = false;
|
||||||
foreach (array_keys($this->_elements) as $elementIndex){
|
foreach (array_keys($this->_elements) as $elementIndex){
|
||||||
$element =& $this->_elements[$elementIndex];
|
$element =& $this->_elements[$elementIndex];
|
||||||
|
|
||||||
|
// if closing header and any contained element was advanced then mark it as advanced
|
||||||
if ($element->getType()=='header' || in_array($element->getName(), $stopFields)){
|
if ($element->getType()=='header' || in_array($element->getName(), $stopFields)){
|
||||||
if ($anyAdvanced && ($lastHeader!==null)){
|
if ($anyAdvanced && !is_null($lastHeader)){
|
||||||
$this->setAdvanced($lastHeader->getName());
|
$this->setAdvanced($lastHeader->getName());
|
||||||
}
|
}
|
||||||
$lastHeaderAdvanced = false;
|
$lastHeaderAdvanced = false;
|
||||||
|
unset($lastHeader);
|
||||||
|
$lastHeader = null;
|
||||||
} elseif ($lastHeaderAdvanced) {
|
} elseif ($lastHeaderAdvanced) {
|
||||||
$this->setAdvanced($element->getName());
|
$this->setAdvanced($element->getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($element->getType()=='header'){
|
if ($element->getType()=='header'){
|
||||||
$lastHeader =& $element;
|
$lastHeader =& $element;
|
||||||
$anyAdvanced = false;
|
$anyAdvanced = false;
|
||||||
|
@ -831,6 +845,10 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
|
||||||
$anyAdvanced = true;
|
$anyAdvanced = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// the last header may not be closed yet...
|
||||||
|
if ($anyAdvanced && !is_null($lastHeader)){
|
||||||
|
$this->setAdvanced($lastHeader->getName());
|
||||||
|
}
|
||||||
$renderer->setAdvancedElements($this->_advancedElements);
|
$renderer->setAdvancedElements($this->_advancedElements);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1286,6 +1304,10 @@ function validate_' . $this->_formName . '(frm) {
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($dependents as $dependent) {
|
foreach ($dependents as $dependent) {
|
||||||
$elements = $this->_getElNamesRecursive($dependent);
|
$elements = $this->_getElNamesRecursive($dependent);
|
||||||
|
if (empty($elements)) {
|
||||||
|
// probably element inside of some group
|
||||||
|
$elements = array($dependent);
|
||||||
|
}
|
||||||
foreach($elements as $element) {
|
foreach($elements as $element) {
|
||||||
if ($element == $dependentOn) {
|
if ($element == $dependentOn) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -1303,38 +1325,37 @@ function validate_' . $this->_formName . '(frm) {
|
||||||
return $js;
|
return $js;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _getElNamesRecursive($element, $group=null){
|
function _getElNamesRecursive($element) {
|
||||||
if ($group==null){
|
if (is_string($element)) {
|
||||||
if (!$this->elementExists($element)) {
|
if (!$this->elementExists($element)) {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
$el = $this->getElement($element);
|
$element = $this->getElement($element);
|
||||||
} else {
|
|
||||||
$el = &$element;
|
|
||||||
}
|
}
|
||||||
if (is_a($el, 'HTML_QuickForm_group')){
|
|
||||||
$group = $el;
|
if (is_a($element, 'HTML_QuickForm_group')) {
|
||||||
$elsInGroup = $group->getElements();
|
$elsInGroup = $element->getElements();
|
||||||
$elNames = array();
|
$elNames = array();
|
||||||
foreach ($elsInGroup as $elInGroup){
|
foreach ($elsInGroup as $elInGroup){
|
||||||
$elNames = array_merge($elNames, $this->_getElNamesRecursive($elInGroup, $group));
|
$elNames = array_merge($elNames, $this->_getElNamesRecursive($elInGroup));
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
if ($group != null){
|
|
||||||
$elNames = array($group->getElementName($el->getName()));
|
|
||||||
} elseif (is_a($el, 'HTML_QuickForm_header')) {
|
|
||||||
return null;
|
|
||||||
} elseif (is_a($el, 'HTML_QuickForm_hidden')) {
|
|
||||||
return null;
|
|
||||||
} elseif (method_exists($el, 'getPrivateName')) {
|
|
||||||
return array($el->getPrivateName());
|
|
||||||
} else {
|
|
||||||
$elNames = array($el->getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $elNames;
|
|
||||||
|
|
||||||
|
} else if (is_a($element, 'HTML_QuickForm_header')) {
|
||||||
|
return array();
|
||||||
|
|
||||||
|
} else if (is_a($element, 'HTML_QuickForm_hidden')) {
|
||||||
|
return array();
|
||||||
|
|
||||||
|
} else if (method_exists($element, 'getPrivateName')) {
|
||||||
|
return array($element->getPrivateName());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$elNames = array($element->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $elNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a dependency for $elementName which will be disabled if $condition is met.
|
* Adds a dependency for $elementName which will be disabled if $condition is met.
|
||||||
* If $condition = 'notchecked' (default) then the condition is that the $dependentOn element
|
* If $condition = 'notchecked' (default) then the condition is that the $dependentOn element
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue