/** * Accepts a renderer * * @param HTML_QuickForm_Renderer $renderer An HTML_QuickForm_Renderer object */ 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. //Also mark all elements in a advanced header as advanced. $stopFields = $renderer->getStopFieldSetElements(); $lastHeader = null; $lastHeaderAdvanced = false; $anyAdvanced = false; $anyError = false; foreach (array_keys($this->_elements) as $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 ($anyAdvanced && !is_null($lastHeader)) { $lastHeader->_generateId(); $this->setAdvanced($lastHeader->getName()); $this->addAdvancedStatusElement($lastHeader->getAttribute('id'), $anyError); } $lastHeaderAdvanced = false; unset($lastHeader); $lastHeader = null; } elseif ($lastHeaderAdvanced) { $this->setAdvanced($element->getName()); } if ($element->getType() == 'header') { $lastHeader =& $element; $anyAdvanced = false; $anyError = false; $lastHeaderAdvanced = isset($this->_advancedElements[$element->getName()]); } elseif (isset($this->_advancedElements[$element->getName()])) { $anyAdvanced = true; if (isset($this->_errors[$element->getName()])) { $anyError = true; } } } // the last header may not be closed yet... if ($anyAdvanced && !is_null($lastHeader)) { $this->setAdvanced($lastHeader->getName()); $lastHeader->_generateId(); $this->addAdvancedStatusElement($lastHeader->getAttribute('id'), $anyError); } $renderer->setAdvancedElements($this->_advancedElements); } if (method_exists($renderer, 'setCollapsibleElements') && !$this->_disableShortforms) { // Count the number of sections. $headerscount = 0; foreach (array_keys($this->_elements) as $elementIndex) { $element =& $this->_elements[$elementIndex]; if ($element->getType() == 'header') { $headerscount++; } } $anyrequiredorerror = false; $headercounter = 0; $headername = null; foreach (array_keys($this->_elements) as $elementIndex) { $element =& $this->_elements[$elementIndex]; if ($element->getType() == 'header') { $headercounter++; $element->_generateId(); $headername = $element->getName(); $anyrequiredorerror = false; } else { if (in_array($element->getName(), $this->_required) || isset($this->_errors[$element->getName()])) { $anyrequiredorerror = true; } else { // Do not reset $anyrequiredorerror to false because we do not want any other element // in this header (fieldset) to possibly revert the state given. } } if ($element->getType() == 'header') { if ($headercounter === 1 && !isset($this->_collapsibleElements[$headername])) { // By default the first section is always expanded, except if a state has already been set. $this->setExpanded($headername, true); } else { if ($headercounter === 2 && $headerscount === 2 && !isset($this->_collapsibleElements[$headername])) { // The second section is always expanded if the form only contains 2 sections), // except if a state has already been set. $this->setExpanded($headername, true); } } } else { if ($anyrequiredorerror) { // If any error or required field are present within the header, we need to expand it. $this->setExpanded($headername, true, true); } else { if (!isset($this->_collapsibleElements[$headername])) { // Define element as collapsed by default. $this->setExpanded($headername, false); } } } } // Pass the array to renderer object. $renderer->setCollapsibleElements($this->_collapsibleElements); } parent::accept($renderer); }
/** * Accepts a renderer * * @param HTML_QuickForm_Renderer $renderer An HTML_QuickForm_Renderer object */ 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. //Also mark all elements in a advanced header as advanced. $stopFields = $renderer->getStopFieldSetElements(); $lastHeader = null; $lastHeaderAdvanced = false; $anyAdvanced = false; $anyError = false; foreach (array_keys($this->_elements) as $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 ($anyAdvanced && !is_null($lastHeader)) { $this->setAdvanced($lastHeader->getName()); $this->addAdvancedStatusElement($lastHeader->getName(), $anyError); } $lastHeaderAdvanced = false; unset($lastHeader); $lastHeader = null; } elseif ($lastHeaderAdvanced) { $this->setAdvanced($element->getName()); } if ($element->getType() == 'header') { $lastHeader =& $element; $anyAdvanced = false; $anyError = false; $lastHeaderAdvanced = isset($this->_advancedElements[$element->getName()]); } elseif (isset($this->_advancedElements[$element->getName()])) { $anyAdvanced = true; if (isset($this->_errors[$element->getName()])) { $anyError = true; } } } // the last header may not be closed yet... if ($anyAdvanced && !is_null($lastHeader)) { $this->setAdvanced($lastHeader->getName()); $this->addAdvancedStatusElement($lastHeader->getName(), $anyError); } $renderer->setAdvancedElements($this->_advancedElements); } if (method_exists($renderer, 'setCollapsibleElements') && !$this->_disableShortforms) { // Check how many headers we have in total, if less than $_non_collapsible_headers, // the form should not be collapsible at all (unless overidden in the form definition). $headercounter = 0; foreach (array_keys($this->_elements) as $elementIndex) { $element =& $this->_elements[$elementIndex]; if ($element->getType() == 'header') { $headercounter++; } } if ($headercounter > $this->_non_collapsible_headers) { // So, we have more than $_non_collapsible_headers headers // add all headers to collapsible elements array (if they have not been added yet). unset($lastHeader); $lastHeader = null; $anyRequiredOrError = false; $headercounter = 0; foreach (array_keys($this->_elements) as $elementIndex) { $element =& $this->_elements[$elementIndex]; if ($element->getType() == 'header') { if (!is_null($lastHeader)) { // Check if we had any required elements or // we are at the top header that should be expanded by default. if ($anyRequiredOrError || $headercounter === 1) { $this->setExpanded($lastHeader->getName()); } elseif (!isset($this->_collapsibleElements[$lastHeader->getName()])) { // Define element as collapsed by default. $this->setExpanded($lastHeader->getName(), false); } } $headercounter++; $lastHeader =& $element; $anyRequiredOrError = false; } elseif (in_array($element->getName(), $this->_required) || isset($this->_errors[$element->getName()])) { $anyRequiredOrError = true; } } // Process very last header. if (!is_null($lastHeader)) { // Check if we had any required elements or // we are at the top header that should be expanded by default. if ($anyRequiredOrError || $headercounter === 1) { $this->setExpanded($lastHeader->getName()); } elseif (!isset($this->_collapsibleElements[$lastHeader->getName()])) { // Define element as collapsed by default. $this->setExpanded($lastHeader->getName(), false); } } } // Pass the array to renderer object. $renderer->setCollapsibleElements($this->_collapsibleElements, $this->getAttribute('id')); } parent::accept($renderer); }
/** * Accepts a renderer * * @param object $renderer HTML_QuickForm_Renderer An HTML_QuickForm_Renderer object * @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 closing header and any contained element was advanced then mark it as advanced if ($element->getType() == 'header' || in_array($element->getName(), $stopFields)) { if ($anyAdvanced && !is_null($lastHeader)) { $this->setAdvanced($lastHeader->getName()); } $lastHeaderAdvanced = false; unset($lastHeader); $lastHeader = null; } 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; } } // the last header may not be closed yet... if ($anyAdvanced && !is_null($lastHeader)) { $this->setAdvanced($lastHeader->getName()); } $renderer->setAdvancedElements($this->_advancedElements); } parent::accept($renderer); }
/** * 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); } parent::accept($renderer); }