]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/dmca/files/default/html/HTML/QuickForm/Renderer/Array.php
Configure the dmca form site on ridley
[chef.git] / cookbooks / dmca / files / default / html / HTML / QuickForm / Renderer / Array.php
diff --git a/cookbooks/dmca/files/default/html/HTML/QuickForm/Renderer/Array.php b/cookbooks/dmca/files/default/html/HTML/QuickForm/Renderer/Array.php
new file mode 100644 (file)
index 0000000..81c62e1
--- /dev/null
@@ -0,0 +1,340 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * A concrete renderer for HTML_QuickForm, makes an array of form contents
+ * 
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.01 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_01.txt If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category    HTML
+ * @package     HTML_QuickForm
+ * @author      Alexey Borzov <avb@php.net>
+ * @author      Adam Daniel <adaniel1@eesus.jnj.com>
+ * @author      Bertrand Mansion <bmansion@mamasam.com>
+ * @author      Thomas Schulz <ths@4bconsult.de>
+ * @copyright   2001-2011 The PHP Group
+ * @license     http://www.php.net/license/3_01.txt PHP License 3.01
+ * @version     CVS: $Id$
+ * @link        http://pear.php.net/package/HTML_QuickForm
+ */
+
+/**
+ * An abstract base class for QuickForm renderers
+ */
+require_once 'HTML/QuickForm/Renderer.php';
+
+/**
+ * A concrete renderer for HTML_QuickForm, makes an array of form contents
+ *
+ * Based on old HTML_QuickForm::toArray() code.
+ *
+ * The form array structure is the following:
+ * <pre>
+ * array(
+ *   'frozen'           => 'whether the form is frozen',
+ *   'javascript'       => 'javascript for client-side validation',
+ *   'attributes'       => 'attributes for <form> tag',
+ *   'requirednote      => 'note about the required elements',
+ *   // if we set the option to collect hidden elements
+ *   'hidden'           => 'collected html of all hidden elements',
+ *   // if there were some validation errors:
+ *   'errors' => array(
+ *     '1st element name' => 'Error for the 1st element',
+ *     ...
+ *     'nth element name' => 'Error for the nth element'
+ *   ),
+ *   // if there are no headers in the form:
+ *   'elements' => array(
+ *     element_1,
+ *     ...
+ *     element_N
+ *   )
+ *   // if there are headers in the form:
+ *   'sections' => array(
+ *     array(
+ *       'header'   => 'Header text for the first header',
+ *       'name'     => 'Header name for the first header',
+ *       'elements' => array(
+ *          element_1,
+ *          ...
+ *          element_K1
+ *       )
+ *     ),
+ *     ...
+ *     array(
+ *       'header'   => 'Header text for the Mth header',
+ *       'name'     => 'Header name for the Mth header',
+ *       'elements' => array(
+ *          element_1,
+ *          ...
+ *          element_KM
+ *       )
+ *     )
+ *   )
+ * );
+ * </pre>
+ *
+ * where element_i is an array of the form:
+ * <pre>
+ * array(
+ *   'name'      => 'element name',
+ *   'value'     => 'element value',
+ *   'type'      => 'type of the element',
+ *   'frozen'    => 'whether element is frozen',
+ *   'label'     => 'label for the element',
+ *   'required'  => 'whether element is required',
+ *   'error'     => 'error associated with the element',
+ *   'style'     => 'some information about element style (e.g. for Smarty)',
+ *   // if element is not a group
+ *   'html'      => 'HTML for the element'
+ *   // if element is a group
+ *   'separator' => 'separator for group elements',
+ *   'elements'  => array(
+ *     element_1,
+ *     ...
+ *     element_N
+ *   )
+ * );
+ * </pre>
+ *
+ * @category    HTML
+ * @package     HTML_QuickForm
+ * @author      Alexey Borzov <avb@php.net>
+ * @author      Adam Daniel <adaniel1@eesus.jnj.com>
+ * @author      Bertrand Mansion <bmansion@mamasam.com>
+ * @author      Thomas Schulz <ths@4bconsult.de>
+ * @version     Release: 3.2.16
+ * @since       3.0
+ */
+class HTML_QuickForm_Renderer_Array extends HTML_QuickForm_Renderer
+{
+   /**#@+
+    * @access private
+    */
+   /**
+    * An array being generated
+    * @var array
+    */
+    var $_ary;
+
+   /**
+    * Number of sections in the form (i.e. number of headers in it)
+    * @var integer
+    */
+    var $_sectionCount;
+
+   /**
+    * Current section number
+    * @var integer
+    */
+    var $_currentSection;
+
+   /**
+    * Array representing current group
+    * @var array
+    */
+    var $_currentGroup = null;
+
+   /**
+    * Additional style information for different elements
+    * @var array
+    */
+    var $_elementStyles = array();
+
+   /**
+    * true: collect all hidden elements into string; false: process them as usual form elements
+    * @var bool
+    */
+    var $_collectHidden = false;
+
+   /**
+    * true:  render an array of labels to many labels, $key 0 named 'label', the rest "label_$key"
+    * false: leave labels as defined
+    * @var bool
+    */
+    var $_staticLabels = false;
+   /**#@-*/
+
+   /**
+    * Constructor
+    *
+    * @param  bool    true: collect all hidden elements into string; false: process them as usual form elements
+    * @param  bool    true: render an array of labels to many labels, $key 0 to 'label' and the oterh to "label_$key"
+    * @access public
+    */
+    function HTML_QuickForm_Renderer_Array($collectHidden = false, $staticLabels = false)
+    {
+        $this->HTML_QuickForm_Renderer();
+        $this->_collectHidden = $collectHidden;
+        $this->_staticLabels  = $staticLabels;
+    } // end constructor
+
+
+   /**
+    * Returns the resultant array
+    *
+    * @access public
+    * @return array
+    */
+    function toArray()
+    {
+        return $this->_ary;
+    }
+
+
+    function startForm(&$form)
+    {
+        $this->_ary = array(
+            'frozen'            => $form->isFrozen(),
+            'javascript'        => $form->getValidationScript(),
+            'attributes'        => $form->getAttributes(true),
+            'requirednote'      => $form->getRequiredNote(),
+            'errors'            => array()
+        );
+        if ($this->_collectHidden) {
+            $this->_ary['hidden'] = '';
+        }
+        $this->_elementIdx     = 1;
+        $this->_currentSection = null;
+        $this->_sectionCount   = 0;
+    } // end func startForm
+
+
+    function renderHeader(&$header)
+    {
+        $this->_ary['sections'][$this->_sectionCount] = array(
+            'header' => $header->toHtml(),
+            'name'   => $header->getName()
+        );
+        $this->_currentSection = $this->_sectionCount++;
+    } // end func renderHeader
+
+
+    function renderElement(&$element, $required, $error)
+    {
+        $elAry = $this->_elementToArray($element, $required, $error);
+        if (!empty($error)) {
+            $this->_ary['errors'][$elAry['name']] = $error;
+        }
+        $this->_storeArray($elAry);
+    } // end func renderElement
+
+
+    function renderHidden(&$element)
+    {
+        if ($this->_collectHidden) {
+            $this->_ary['hidden'] .= $element->toHtml() . "\n";
+        } else {
+            $this->renderElement($element, false, null);
+        }
+    } // end func renderHidden
+
+
+    function startGroup(&$group, $required, $error)
+    {
+        $this->_currentGroup = $this->_elementToArray($group, $required, $error);
+        if (!empty($error)) {
+            $this->_ary['errors'][$this->_currentGroup['name']] = $error;
+        }
+    } // end func startGroup
+
+
+    function finishGroup(&$group)
+    {
+        $this->_storeArray($this->_currentGroup);
+        $this->_currentGroup = null;
+    } // end func finishGroup
+
+
+   /**
+    * Creates an array representing an element
+    *
+    * @access private
+    * @param  HTML_QuickForm_element    element being processed
+    * @param  bool                      Whether an element is required
+    * @param  string                    Error associated with the element
+    * @return array
+    */
+    function _elementToArray(&$element, $required, $error)
+    {
+        $ret = array(
+            'name'      => $element->getName(),
+            'value'     => $element->getValue(),
+            'type'      => $element->getType(),
+            'frozen'    => $element->isFrozen(),
+            'required'  => $required,
+            'error'     => $error
+        );
+        // render label(s)
+        $labels = $element->getLabel();
+        if (is_array($labels) && $this->_staticLabels) {
+            foreach($labels as $key => $label) {
+                $key = is_int($key)? $key + 1: $key;
+                if (1 === $key) {
+                    $ret['label'] = $label;
+                } else {
+                    $ret['label_' . $key] = $label;
+                }
+            }
+        } else {
+            $ret['label'] = $labels;
+        }
+
+        // set the style for the element
+        if (isset($this->_elementStyles[$ret['name']])) {
+            $ret['style'] = $this->_elementStyles[$ret['name']];
+        }
+        if ('group' == $ret['type']) {
+            $ret['separator'] = $element->_separator;
+            $ret['elements']  = array();
+        } else {
+            $ret['html']      = $element->toHtml();
+        }
+        return $ret;
+    }
+
+
+   /**
+    * Stores an array representation of an element in the form array
+    *
+    * @access private
+    * @param array  Array representation of an element
+    * @return void
+    */
+    function _storeArray($elAry)
+    {
+        // where should we put this element...
+        if (is_array($this->_currentGroup) && ('group' != $elAry['type'])) {
+            $this->_currentGroup['elements'][] = $elAry;
+        } elseif (isset($this->_currentSection)) {
+            $this->_ary['sections'][$this->_currentSection]['elements'][] = $elAry;
+        } else {
+            $this->_ary['elements'][] = $elAry;
+        }
+    }
+
+
+   /**
+    * Sets a style to use for element rendering
+    *
+    * @param mixed      element name or array ('element name' => 'style name')
+    * @param string     style name if $elementName is not an array
+    * @access public
+    * @return void
+    */
+    function setElementStyle($elementName, $styleName = null)
+    {
+        if (is_array($elementName)) {
+            $this->_elementStyles = array_merge($this->_elementStyles, $elementName);
+        } else {
+            $this->_elementStyles[$elementName] = $styleName;
+        }
+    }
+}
+?>
\ No newline at end of file