Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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);
 }
Exemplo n.º 4
0
 /**
  * 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);
 }