From 19194f825ac32fef16b0ccafbb4acc326ee84cae Mon Sep 17 00:00:00 2001 From: jamiesensei Date: Thu, 14 Dec 2006 12:44:10 +0000 Subject: [PATCH] added setAdvanced MoodleQuickForm method. And added closeHeaderAfter method --- lang/en_utf8/form.php | 6 +- lib/form/req.png | Bin 30246 -> 31887 bytes lib/form/select.php | 2 +- lib/form/text.php | 2 +- lib/formslib.php | 284 ++++++++++++++++++++++++++++++++++---- lib/javascript-static.js | 71 +++++++++- lib/javascript.php | 1 - mod/chat/mod_form.php | 3 +- mod/choice/mod_form.php | 5 +- mod/data/mod_form.php | 3 +- mod/exercise/mod_form.php | 3 +- mod/forum/mod_form.php | 3 +- mod/forum/post_form.php | 3 +- mod/glossary/mod_form.php | 3 +- mod/journal/mod_form.php | 3 +- mod/label/mod_form.php | 3 +- mod/lesson/mod_form.php | 3 +- 17 files changed, 342 insertions(+), 56 deletions(-) diff --git a/lang/en_utf8/form.php b/lang/en_utf8/form.php index 90ce2018bc..c1ee2eea58 100644 --- a/lang/en_utf8/form.php +++ b/lang/en_utf8/form.php @@ -1,6 +1,4 @@ \ No newline at end of file diff --git a/lib/form/req.png b/lib/form/req.png index e843ed30a870f4bb60f548c393bc4afa386899f5..52f81359009cb74742bcfa9693f298164645911d 100644 GIT binary patch delta 25066 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 z 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 M&&o2@Qbxi559o8>zyJUM delta 23491 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 diff --git a/lib/form/select.php b/lib/form/select.php index e349211b82..63df3f919b 100644 --- a/lib/form/select.php +++ b/lib/form/select.php @@ -19,8 +19,8 @@ class MoodleQuickForm_select extends HTML_QuickForm_select{ $this->_hiddenLabel = $hiddenLabel; } function toHtml(){ - $this->_generateId(); if ($this->_hiddenLabel){ + $this->_generateId(); return ''.parent::toHtml(); } else { diff --git a/lib/form/text.php b/lib/form/text.php index cae359cfa8..c517d1a111 100644 --- a/lib/form/text.php +++ b/lib/form/text.php @@ -19,8 +19,8 @@ class MoodleQuickForm_text extends HTML_QuickForm_text{ $this->_hiddenLabel = $hiddenLabel; } function toHtml(){ - $this->_generateId(); if ($this->_hiddenLabel){ + $this->_generateId(); return ''.parent::toHtml(); } else { diff --git a/lib/formslib.php b/lib/formslib.php index a772712414..d91d6fee19 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -1,4 +1,4 @@ -libdir.'/uploadlib.php'; +define('FORM_ADVANCEDIMAGEURL', $CFG->wwwroot.'/lib/form/adv.gif'); +define('FORM_REQIMAGEURL', $CFG->wwwroot.'/lib/form/req.gif'); + if ($CFG->debug >= DEBUG_ALL){ PEAR::setErrorHandling(PEAR_ERROR_PRINT); } @@ -386,6 +389,7 @@ class moodleform { + /** * Method to add a repeating group of elements to a form. * @@ -459,11 +463,11 @@ class moodleform { } } $mform->addElement('submit', $addfieldsname, get_string('addfields', 'form', $addfieldsno), - array('onclick'=>'this.form.submit();'));//need this to bypass client validation + array('onclick'=>'skipClientValidation = true; return true;'));//need this to bypass client validation $renderer =& $mform->defaultRenderer(); $renderer->addStopFieldsetElements($addfieldsname); - + return $repeats; } } @@ -490,6 +494,20 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { */ var $_cancelButtons=array(); + /** + * Array whose keys are element names. If the key exists this is a advanced element + * + * @var array + */ + var $_advancedElements = array(); + + /** + * Whether to display advanced elements (on page load) + * + * @var boolean + */ + var $_showAdvanced = null; + /** * Class constructor - same parameters as HTML_QuickForm_DHTMLRulesTableless * @param string $formName Form's name. @@ -516,12 +534,120 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { }else { $this->updateAttributes(array('class'=>'mform')); } - $this->_helpImageURL="$CFG->wwwroot/lib/form/req.gif"; - $this->_reqHTML = ''.get_string('requiredelement', 'form').''; + $this->_reqHTML = ''.get_string('requiredelement', 'form').''; + $this->_advancedHTML = ''.get_string('advancedelement', 'form').''; $this->setRequiredNote(get_string('denotesreq', 'form', helpbutton('requiredelement', get_string('requiredelement', 'form'),'moodle', true, false, '', true, ''.get_string('requiredelement', 'form').''))); + FORM_REQIMAGEURL.'" />'))); + } + + function setShowAdvanced($showadvancedNow){ + $this->_showAdvanced=$showadvancedNow; + } + function getShowAdvanced(){ + return $this->_showAdvanced; + } + + /** + * Adds an element into the form + * + * If $element is a string representing element type, then this + * method accepts variable number of parameters, their meaning + * and count depending on $element + * + * @param mixed $element element object or type of element to add (text, textarea, file...) + * @since 1.0 + * @return object reference to element + * @access public + * @throws HTML_QuickForm_Error + */ + function addElement($element) + { + //call parent with a variable ammount of arguments + $args = func_get_args(); + $parent_name = get_parent_class($this); + //static method call + + return call_user_func_array(array($parent_name, 'addElement'), $args); + } + + /** + * Accepts a renderer + * + * @param HTML_QuickForm_Renderer An HTML_QuickForm_Renderer object + * @since 3.0 + * @access public + * @return void + */ + function accept(&$renderer) + { + if (method_exists($renderer, 'setAdvancedElements')){ + //check for visible fieldsets where all elements are advanced + //and mark these headers as advanced as well. + //And mark all elements in a advanced header as advanced + $stopFields = $renderer->getStopFieldSetElements(); + $lastHeader = null; + $lastHeaderAdvanced = false; + $anyAdvanced = false; + foreach (array_keys($this->_elements) as $elementIndex){ + $element =& $this->_elements[$elementIndex]; + if ($element->getType()=='header' || in_array($element->getName(), $stopFields)){ + if ($anyAdvanced && ($lastHeader!==null)){ + $this->setAdvanced($lastHeader->getName()); + } + $lastHeaderAdvanced = false; + } elseif ($lastHeaderAdvanced) { + $this->setAdvanced($element->getName()); + } + if ($element->getType()=='header'){ + $lastHeader =& $element; + $anyAdvanced = false; + $lastHeaderAdvanced = isset($this->_advancedElements[$element->getName()]); + } elseif (isset($this->_advancedElements[$element->getName()])){ + $anyAdvanced = true; + } + } + $renderer->setAdvancedElements($this->_advancedElements); + if (count($this->_advancedElements)){ + + } + } + parent::accept($renderer); + } + + function setAdvanced($elementName, $advanced=true){ + if ($advanced){ + $this->_advancedElements[$elementName]=''; + } elseif (isset($this->_advancedElements[$elementName])) { + unset($this->_advancedElements[$elementName]); + } + if ($advanced && $this->getShowAdvanced()===null){ + //hidden element + $showadvanced_last = optional_param('mform_showadvanced_last', 0, PARAM_INT); + //button + $showadvanced = optional_param('mform_showadvanced', 0, PARAM_RAW); + //toggle if button pressed or else stay the same + if ($showadvanced && $showadvanced_last){ + $showadvanced_now = 0; + } elseif ($showadvanced && !$showadvanced_last) { + $showadvanced_now = 1; + } else { + $showadvanced_now = $showadvanced_last; + } + + $this->setConstants(array('mform_showadvanced_last'=>$showadvanced_now)); + //below tells form whether to display elements or not + $this->setShowAdvanced($showadvanced_now); + $this->_registerNoSubmitButton('mform_showadvanced'); + + $this->addElement('hidden', 'mform_showadvanced_last'); + } + } + + function closeHeaderBefore($elementName){ + $renderer =& $this->defaultRenderer(); + $renderer->addStopFieldsetElements($elementName); } /** @@ -593,6 +719,10 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { return $this->_reqHTML; } + function getAdvancedHTML(){ + return $this->_advancedHTML; + } + /** * Initializes a default form value. Used to specify the default for a new entry where * no data is loaded in using moodleform::set_defaults() @@ -936,10 +1066,6 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ * @access private */ var $_elementTemplates; - -// uncomment templates below and edit formslib.php for -// ol li containers for form items. - /** * Template used when opening a hidden fieldset * (i.e. a fieldset that is opened when there is no header element) @@ -947,16 +1073,13 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ * @access private */ var $_openHiddenFieldsetTemplate = "\n\t
"; -// var $_openHiddenFieldsetTemplate = "\n\t
\n\t\t
    "; -// /** -// * Header Template string -// * @var string -// * @access private -// */ -// var $_headerTemplate = -// "\n\t\t{header}\n\t\t
      "; -// var $_headerTemplate = -// "\n\t\t{header}\n\t\t
        "; + /** + * Header Template string + * @var string + * @access private + */ + var $_headerTemplate = + "\n\t\t{header}{advancedimg}{button}\n\t\t"; /** * Template used when closing a fieldset @@ -964,7 +1087,6 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ * @access private */ var $_closeFieldsetTemplate = "\n\t\t
"; -// var $_closeFieldsetTemplate = "\n\t\t\n\t
"; /** * Required Note template string @@ -974,18 +1096,38 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ var $_requiredNoteTemplate = "\n\t\t
{requiredNote}
"; + var $_advancedElements = array(); + + /** + * Whether to display advanced elements (on page load) + * + * @var integer 1 means show 0 means hide + */ + var $_showAdvanced; + function MoodleQuickForm_Renderer(){ // switch next two lines for ol li containers for form items. // $this->_elementTemplates=array('default'=>"\n\t\t
  • error {type}\">{error}
    {element}
  • "); - $this->_elementTemplates = array('default'=>"\n\t\t
    {help}
    error\">{error}
    {element}
    ", - 'fieldset'=>"\n\t\t
    {help}
    error\">{error}
    {element}
    "); + $this->_elementTemplates = array('default'=>"\n\t\t
    {help}
    error\">{error}
    {element}
    ", + 'fieldset'=>"\n\t\t
    {help}
    error\">{error}
    {element}
    "); parent::HTML_QuickForm_Renderer_Tableless(); } + function setAdvancedElements($elements){ + $this->_advancedElements = $elements; + } + + /** + * What to do when starting the form + * + * @param MoodleQuickForm $form + */ function startForm(&$form){ $this->_reqHTML = $form->getReqHTML(); $this->_elementTemplates = str_replace('{req}', $this->_reqHTML, $this->_elementTemplates); + $this->_advancedHTML = $form->getAdvancedHTML(); + $this->_showAdvanced = $form->getShowAdvanced(); parent::startForm($form); } @@ -996,11 +1138,22 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ $html = $this->_elementTemplates['default']; } + if ($this->_showAdvanced){ + $advclass = ' advanced'; + } else { + $advclass = ' advanced hide'; + } + if (isset($this->_advancedElements[$group->getName()])){ + $html =str_replace(' {advanced}', $advclass, $html); + $html =str_replace('{advancedimg}', $this->_advancedHTML, $html); + } else { + $html =str_replace(' {advanced}', '', $html); + $html =str_replace('{advancedimg}', '', $html); + } if (method_exists($group, 'getHelpButton')){ $html =str_replace('{help}', $group->getHelpButton(), $html); }else{ $html =str_replace('{help}', '', $html); - } $html =str_replace('{name}', $group->getName(), $html); $html =str_replace('{type}', 'fgroup', $html); @@ -1023,7 +1176,21 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ $html = $this->_elementTemplates[$element->getElementTemplateType()]; }else{ $html = $this->_elementTemplates['default']; - + } + if ($this->_showAdvanced){ + $advclass = ' advanced'; + } else { + $advclass = ' advanced hide'; + } + if (isset($this->_advancedElements[$element->getName()])){ + $html =str_replace(' {advanced}', $advclass, $html); + } else { + $html =str_replace(' {advanced}', '', $html); + } + if (isset($this->_advancedElements[$element->getName()])||$element->getName() == 'mform_showadvanced'){ + $html =str_replace('{advancedimg}', $this->_advancedHTML, $html); + } else { + $html =str_replace('{advancedimg}', '', $html); } $html =str_replace('{type}', 'f'.$element->getType(), $html); $html =str_replace('{name}', $element->getName(), $html); @@ -1045,6 +1212,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ } parent::renderElement($element, $required, $error); } + function finishForm(&$form){ parent::finishForm($form); // add a lockoptions script @@ -1052,6 +1220,71 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ $this->_html = $this->_html . "\n" . $script; } } + /** + * Called when visiting a header element + * + * @param object An HTML_QuickForm_header element being visited + * @access public + * @return void + */ + function renderHeader(&$header) { + $name = $header->getName(); + + $id = empty($name) ? '' : ' id="' . $name . '"'; + if (is_null($header->_text)) { + $header_html = ''; + } elseif (!empty($name) && isset($this->_templates[$name])) { + $header_html = str_replace('{header}', $header->toHtml(), $this->_templates[$name]); + } else { + $header_html = str_replace('{header}', $header->toHtml(), $this->_headerTemplate); + } + + if (isset($this->_advancedElements[$name])){ + $header_html =str_replace('{advancedimg}', $this->_advancedHTML, $header_html); + } else { + $header_html =str_replace('{advancedimg}', '', $header_html); + } + $elementName='mform_showadvanced'; + if ($this->_showAdvanced==0){ + $buttonlabel = get_string('showadvanced', 'form'); + } else { + $buttonlabel = get_string('hideadvanced', 'form'); + } + + if (isset($this->_advancedElements[$name])){ + $showtext="'".get_string('showadvanced', 'form')."'"; + $hidetext="'".get_string('hideadvanced', 'form')."'"; + //onclick returns false so if js is on then page is not submitted. + $onclick = 'return showAdvancedOnClick(this, '.$hidetext.', '.$showtext.');'; + $button = ''; + $header_html =str_replace('{button}', $button, $header_html); + } else { + $header_html =str_replace('{button}', '', $header_html); + } + + if ($this->_fieldsetsOpen > 0) { + $this->_html .= $this->_closeFieldsetTemplate; + $this->_fieldsetsOpen--; + } + + $openFieldsetTemplate = str_replace('{id}', $id, $this->_openFieldsetTemplate); + if ($this->_showAdvanced){ + $advclass = ' class="advanced"'; + } else { + $advclass = ' class="advanced hide"'; + } + if (isset($this->_advancedElements[$name])){ + $openFieldsetTemplate = str_replace('{advancedclass}', $advclass, $openFieldsetTemplate); + } else { + $openFieldsetTemplate = str_replace('{advancedclass}', '', $openFieldsetTemplate); + } + $this->_html .= $openFieldsetTemplate . $header_html; + $this->_fieldsetsOpen++; + } // end func renderHeader + + function getStopFieldsetElements(){ + return $this->_stopFieldsetElements; + } } @@ -1078,5 +1311,6 @@ MoodleQuickForm::registerElementType('modgrade', "$CFG->libdir/form/modgrade.php MoodleQuickForm::registerElementType('cancel', "$CFG->libdir/form/cancel.php", 'MoodleQuickForm_cancel'); MoodleQuickForm::registerElementType('button', "$CFG->libdir/form/button.php", 'MoodleQuickForm_button'); MoodleQuickForm::registerElementType('choosecoursefile', "$CFG->libdir/form/choosecoursefile.php", 'MoodleQuickForm_choosecoursefile'); +MoodleQuickForm::registerElementType('header', "$CFG->libdir/form/header.php", 'MoodleQuickForm_header'); ?> \ No newline at end of file diff --git a/lib/javascript-static.js b/lib/javascript-static.js index 553571ac91..2a26f354b2 100644 --- a/lib/javascript-static.js +++ b/lib/javascript-static.js @@ -194,6 +194,66 @@ function findParentNode(el, elName, elClass, elId) { } return el; } +/* + findChildNode (start, elementName, elementClass, elementID) + + Travels down the DOM hierarchy to find all child elements with the + specified tag name, class, and id. All conditions must be met, + but any can be ommitted. +*/ +function findChildNodes(start, tagName, elementClass, elementID, elementName) { + var children = new Array(); + for (var childIndex in start.childNodes) { + var child = start.childNodes[childIndex]; + if( + (child.nodeType == 1) &&//element node type + (!tagName || child.nodeName == tagName) && + (!elementClass || child.className.indexOf(elementClass) != -1) && + (!elementID || child.id == elementID) && + (!elementName || child.name == elementName)) + { + children = children.concat(child); + } + children = children.concat(findChildNodes(child, tagName, elementClass, elementID, elementName)); + } + return children; +} +/* + elementSetHide (elements, hide) + + Adds or removes the "hide" class for the specified elements depending on boolean hide. +*/ +function elementShowAdvanced(elements, show) { + for (var elementIndex in elements){ + element = elements[elementIndex]; + element.className = element.className.replace(new RegExp(' ?hide'), '') + if(!show) { + element.className += ' hide'; + } + } +} + +function showAdvancedOnClick(button, hidetext, showtext){ + var toSet=findChildNodes(button.form, null, 'advanced'); + var buttontext = ''; + if (button.form.elements['mform_showadvanced_last'].value == '0') { + elementShowAdvanced(toSet, true); + buttontext = hidetext; + button.form.elements['mform_showadvanced_last'].value = '1'; + } else { + elementShowAdvanced(toSet, false); + buttontext = showtext; + button.form.elements['mform_showadvanced_last'].value = '0'; + } + var formelements = button.form.elements; + for (var i in formelements){ + if (formelements[i].name=='mform_showadvanced'){ + formelements[i].value = buttontext; + } + } + //never submit the form if js is enabled. + return false; +} /* elementToggleHide (element, elementFinder) @@ -204,7 +264,7 @@ function findParentNode(el, elName, elClass, elId) { If persistent == true, also sets a cookie for this. */ -function elementToggleHide(el, persistent, elementFinder, pixPath) { +function elementToggleHide(el, persistent, elementFinder) { if(!elementFinder) { var obj = el; } @@ -213,14 +273,13 @@ function elementToggleHide(el, persistent, elementFinder, pixPath) { } if(obj.className.indexOf('hidden') == -1) { obj.className += ' hidden'; - document.getElementById('togglehide_'+obj.id).setAttribute('src', pixPath+'/t/switch_plus.gif'); - var shown = 0; + var shown = 0; } else { - obj.className = obj.className.replace(new RegExp(' ?hidden'), ''); - document.getElementById('togglehide_'+obj.id).setAttribute('src', pixPath+'/t/switch_minus.gif'); - var shown = 1; + obj.className = obj.className.replace(new RegExp(' ?hidden'), '') + var shown = 1; } + if(persistent == true) { new cookie('hide:' + obj.id, 1, (shown ? -1 : 356), '/').set(); } diff --git a/lib/javascript.php b/lib/javascript.php index 3692b28b9a..79c7a8b626 100644 --- a/lib/javascript.php +++ b/lib/javascript.php @@ -71,7 +71,6 @@ function inserttext(text) { echo " $insertfield.focus();\n"; ?> } - _form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -54,7 +53,7 @@ class chat_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } diff --git a/mod/choice/mod_form.php b/mod/choice/mod_form.php index 1a7e201b34..38256ee899 100644 --- a/mod/choice/mod_form.php +++ b/mod/choice/mod_form.php @@ -7,7 +7,6 @@ class choice_mod_form extends moodleform_mod { global $CHOICE_SHOWRESULTS, $CHOICE_PUBLISH, $CHOICE_DISPLAY; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -22,6 +21,7 @@ class choice_mod_form extends moodleform_mod { $mform->addElement('format', 'format', get_string('format')); +//------------------------------------------------------------------------------- $repeatarray=array(); $repeatarray[] = &MoodleQuickForm::createElement('header', '', get_string('choice','choice')); $repeatarray[] = &MoodleQuickForm::createElement('text', 'option', get_string('choice','choice')); @@ -79,6 +79,7 @@ class choice_mod_form extends moodleform_mod { $mform->addElement('selectyesno', 'showunanswered', get_string("showunanswered", "choice")); + //------------------------------------------------------------------------------- $this->standard_coursemodule_elements(); //------------------------------------------------------------------------------- @@ -88,7 +89,7 @@ class choice_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } function defaults_preprocessing(&$default_values){ diff --git a/mod/data/mod_form.php b/mod/data/mod_form.php index 7f7116a143..38b6910eb1 100644 --- a/mod/data/mod_form.php +++ b/mod/data/mod_form.php @@ -7,7 +7,6 @@ class data_mod_form extends moodleform_mod { global $CFG; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -63,7 +62,7 @@ class data_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } diff --git a/mod/exercise/mod_form.php b/mod/exercise/mod_form.php index 9e93d4517c..58121214a3 100644 --- a/mod/exercise/mod_form.php +++ b/mod/exercise/mod_form.php @@ -7,7 +7,6 @@ class exercise_mod_form extends moodleform_mod { global $CFG, $COURSE, $EXERCISE_TYPE, $EXERCISE_ASSESSMENT_COMPS; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -107,7 +106,7 @@ class exercise_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } diff --git a/mod/forum/mod_form.php b/mod/forum/mod_form.php index c254ca912a..cc4fe0c1c6 100644 --- a/mod/forum/mod_form.php +++ b/mod/forum/mod_form.php @@ -7,7 +7,6 @@ class forum_mod_form extends moodleform_mod { global $CFG, $FORUM_TYPES, $COURSE; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -131,7 +130,7 @@ class forum_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } function definition_after_data(){ diff --git a/mod/forum/post_form.php b/mod/forum/post_form.php index 02da5496af..3a6ba948e4 100644 --- a/mod/forum/post_form.php +++ b/mod/forum/post_form.php @@ -8,7 +8,6 @@ class forum_post_form extends moodleform { global $CFG; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); $course = $this->_customdata['course']; $coursecontext = $this->_customdata['coursecontext']; @@ -86,7 +85,7 @@ class forum_post_form extends moodleform { $submit_string = get_string('posttoforum', 'forum'); } $mform->addElement('submit', 'submitbutton', $submit_string); - $renderer->addStopFieldsetElements('submitbutton'); + $mform->closeHeaderBefore('submitbutton'); $mform->addElement('hidden', 'course'); $mform->setType('course', PARAM_INT); diff --git a/mod/glossary/mod_form.php b/mod/glossary/mod_form.php index c24971fe2b..ccd523f996 100644 --- a/mod/glossary/mod_form.php +++ b/mod/glossary/mod_form.php @@ -7,7 +7,6 @@ class glossary_mod_form extends moodleform_mod { global $CFG, $COURSE; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -151,7 +150,7 @@ class glossary_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } function definition_after_data(){ diff --git a/mod/journal/mod_form.php b/mod/journal/mod_form.php index f9ef48fae1..137f2d1208 100644 --- a/mod/journal/mod_form.php +++ b/mod/journal/mod_form.php @@ -7,7 +7,6 @@ class journal_mod_form extends moodleform_mod { global $COURSE; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -51,7 +50,7 @@ class journal_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } diff --git a/mod/label/mod_form.php b/mod/label/mod_form.php index a70bceb3bb..48069acd81 100644 --- a/mod/label/mod_form.php +++ b/mod/label/mod_form.php @@ -6,7 +6,6 @@ class label_mod_form extends moodleform_mod { function definition() { $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); $mform->addElement('htmleditor', 'content', get_string('labeltext', 'label')); $mform->setType('content', PARAM_RAW); @@ -21,7 +20,7 @@ class label_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } } diff --git a/mod/lesson/mod_form.php b/mod/lesson/mod_form.php index 0abe84e31d..3f340e159b 100644 --- a/mod/lesson/mod_form.php +++ b/mod/lesson/mod_form.php @@ -16,7 +16,6 @@ class lesson_mod_form extends moodleform_mod { global $LESSON_NEXTPAGE_ACTION, $COURSE; $mform =& $this->_form; - $renderer =& $mform->defaultRenderer(); //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); @@ -280,7 +279,7 @@ class lesson_mod_form extends moodleform_mod { $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); $buttonarray[] = &$mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - $renderer->addStopFieldsetElements('buttonar'); + $mform->closeHeaderBefore('buttonar'); } -- 2.39.5