HTML_QuickForm
[ class tree: HTML_QuickForm ] [ index: HTML_QuickForm ] [ all elements ]

Source for file ObjectFlexy.php

Documentation is available at ObjectFlexy.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * QuickForm renderer for Flexy template engine, static version.
  6.  * 
  7.  * PHP versions 4 and 5
  8.  *
  9.  * LICENSE: This source file is subject to version 3.01 of the PHP license
  10.  * that is available through the world-wide-web at the following URI:
  11.  * http://www.php.net/license/3_01.txt If you did not receive a copy of
  12.  * the PHP License and are unable to obtain it through the web, please
  13.  * send a note to license@php.net so we can mail you a copy immediately.
  14.  *
  15.  * @category    HTML
  16.  * @package     HTML_QuickForm
  17.  * @author      Ron McClain <ron@humaniq.com>
  18.  * @copyright   2001-2011 The PHP Group
  19.  * @license     http://www.php.net/license/3_01.txt PHP License 3.01
  20.  * @version     CVS: $Id: ObjectFlexy.php 317587 2011-10-01 07:55:53Z avb $
  21.  * @link        http://pear.php.net/package/HTML_QuickForm
  22.  */
  23.  
  24. /**
  25.  * A concrete renderer for HTML_QuickForm, makes an object from form contents
  26.  */ 
  27. require_once 'HTML/QuickForm/Renderer/Object.php';
  28.  
  29. /**
  30.  * QuickForm renderer for Flexy template engine, static version.
  31.  * 
  32.  * A static renderer for HTML_Quickform.  Makes a QuickFormFlexyObject
  33.  * from the form content suitable for use with a Flexy template
  34.  *
  35.  * Usage:
  36.  * <code>
  37.  * $form =& new HTML_QuickForm('form', 'POST');
  38.  * $template =& new HTML_Template_Flexy();
  39.  * $renderer =& new HTML_QuickForm_Renderer_ObjectFlexy(&$template);
  40.  * $renderer->setHtmlTemplate("html.html");
  41.  * $renderer->setLabelTemplate("label.html");
  42.  * $form->accept($renderer);
  43.  * $view = new StdClass;
  44.  * $view->form = $renderer->toObject();
  45.  * $template->compile("mytemplate.html");
  46.  * </code>
  47.  *
  48.  * Based on the code for HTML_QuickForm_Renderer_ArraySmarty
  49.  *
  50.  * @category    HTML
  51.  * @package     HTML_QuickForm
  52.  * @author      Ron McClain <ron@humaniq.com>
  53.  * @version     Release: 3.2.13
  54.  * @since       3.1.1
  55.  */
  56. {
  57.    /**#@+
  58.     * @access private
  59.     */
  60.     /**
  61.      * HTML_Template_Flexy instance
  62.      * @var object $_flexy 
  63.      */
  64.     var $_flexy;
  65.  
  66.     /**
  67.      * Current element index
  68.      * @var integer $_elementIdx 
  69.      */
  70.     var $_elementIdx;
  71.  
  72.     /**
  73.      * The current element index inside a group
  74.      * @var integer $_groupElementIdx 
  75.      */
  76.     var $_groupElementIdx = 0;
  77.  
  78.     /**
  79.      * Name of template file for form html
  80.      * @var string $_html 
  81.      * @see     setRequiredTemplate()
  82.      */
  83.     var $_html '';
  84.  
  85.     /**
  86.      * Name of template file for form labels
  87.      * @var string $label 
  88.      * @see        setErrorTemplate()
  89.      */
  90.     var $label '';
  91.  
  92.     /**
  93.      * Class of the element objects, so you can add your own
  94.      * element methods
  95.      * @var string $_elementType 
  96.      */
  97.     var $_elementType 'QuickformFlexyElement';
  98.    /**#@-*/
  99.  
  100.     /**
  101.      * Constructor
  102.      *
  103.      * @param HTML_Template_Flexy   template object to use
  104.      * @public
  105.      */
  106.     function HTML_QuickForm_Renderer_ObjectFlexy(&$flexy)
  107.     {
  108.         $this->HTML_QuickForm_Renderer_Object(true);
  109.         $this->_obj = new QuickformFlexyForm();
  110.         $this->_flexy =$flexy;
  111.     // end constructor
  112.  
  113.     function renderHeader(&$header)
  114.     {
  115.         if($name $header->getName()) {
  116.             $this->_obj->header->$name $header->toHtml();
  117.         else {
  118.             $this->_obj->header[$this->_sectionCount$header->toHtml();
  119.         }
  120.         $this->_currentSection $this->_sectionCount++;
  121.     // end func renderHeader
  122.  
  123.     function startGroup(&$group$required$error)
  124.     {
  125.         parent::startGroup($group$required$error);
  126.         $this->_groupElementIdx = 1;
  127.     //end func startGroup
  128.  
  129.     /**
  130.      * Creates an object representing an element containing
  131.      * the key for storing this
  132.      *
  133.      * @access private
  134.      * @param HTML_QuickForm_element    form element being rendered
  135.      * @param bool        Whether an element is required
  136.      * @param string    Error associated with the element
  137.      * @return object 
  138.      */
  139.     function _elementToObject(&$element$required$error)
  140.     {
  141.         $ret = parent::_elementToObject($element$required$error);
  142.         if($ret->type == 'group'{
  143.             $ret->html = $element->toHtml();
  144.             unset($ret->elements);
  145.         }
  146.         if(!empty($this->_label)) {
  147.             $this->_renderLabel($ret);
  148.         }
  149.  
  150.         if(!empty($this->_html)) {
  151.             $this->_renderHtml($ret);
  152.             $ret->error = $error;
  153.         }
  154.  
  155.         // Create an element key from the name
  156.         if (false !== ($pos strpos($ret->name'[')) || is_object($this->_currentGroup)) {
  157.             if (!$pos{
  158.                 $keys '->{\'' str_replace(array('\\''\'')array('\\\\''\\\'')$ret->name'\'}';
  159.             else {
  160.                 $keys '->{\'' str_replace(
  161.                             array('\\''\'''['']')array('\\\\''\\\'''\'}->{\'''')
  162.                             $ret->name
  163.                         '\'}';
  164.             }
  165.             // special handling for elements in native groups
  166.             if (is_object($this->_currentGroup)) {
  167.                 // skip unnamed group items unless radios: no name -> no static access
  168.                 // identification: have the same key string as the parent group
  169.                 if ($this->_currentGroup->keys == $keys && 'radio' != $ret->type{
  170.                     return false;
  171.                 }
  172.                 // reduce string of keys by remove leading group keys
  173.                 if (0 === strpos($keys$this->_currentGroup->keys)) {
  174.                     $keys substr_replace($keys''0strlen($this->_currentGroup->keys));
  175.                 }
  176.             }
  177.         elseif (0 == strlen($ret->name)) {
  178.             $keys '->{\'element_' $this->_elementIdx '\'}';
  179.         else {
  180.             $keys '->{\'' str_replace(array('\\''\'')array('\\\\''\\\'')$ret->name'\'}';
  181.         }
  182.         // for radios: add extra key from value
  183.         if ('radio' == $ret->type && '[]' != substr($keys-2)) {
  184.             $keys .= '->{\'' str_replace(array('\\''\'')array('\\\\''\\\'')$ret->value'\'}';
  185.         }
  186.         $ret->keys = $keys;
  187.         $this->_elementIdx++;
  188.         return $ret;
  189.     }
  190.  
  191.     /**
  192.      * Stores an object representation of an element in the
  193.      * QuickformFormObject instance
  194.      *
  195.      * @access private
  196.      * @param QuickformElement  Object representation of an element
  197.      * @return void 
  198.      */
  199.     function _storeObject($elObj
  200.     {
  201.         if ($elObj{
  202.             $keys $elObj->keys;
  203.             unset($elObj->keys);
  204.             if(is_object($this->_currentGroup&& ('group' != $elObj->type)) {
  205.                 $code '$this->_currentGroup' $keys ' = $elObj;';
  206.             else {
  207.                 $code '$this->_obj' $keys ' = $elObj;';
  208.             }
  209.             eval($code);
  210.         }
  211.     }
  212.  
  213.     /**
  214.      * Set the filename of the template to render html elements.
  215.      * In your template, {html} is replaced by the unmodified html.
  216.      * If the element is required, {required} will be true.
  217.      * Eg.
  218.      * <pre>
  219.      * {if:error}
  220.      *   <font color="red" size="1">{error:h}</font><br />
  221.      * {end:}
  222.      * {html:h}
  223.      * </pre>
  224.      *
  225.      * @access public
  226.      * @param string   Filename of template
  227.      * @return void 
  228.      */
  229.     function setHtmlTemplate($template)
  230.     {
  231.         $this->_html $template;
  232.     
  233.  
  234.     /**
  235.      * Set the filename of the template to render form labels
  236.      * In your template, {label} is replaced by the unmodified label.
  237.      * {error} will be set to the error, if any.  {required} will
  238.      * be true if this is a required field
  239.      * Eg.
  240.      * <pre>
  241.      * {if:required}
  242.      * <font color="orange" size="1">*</font>
  243.      * {end:}
  244.      * {label:h}
  245.      * </pre>
  246.      *
  247.      * @access public
  248.      * @param string   Filename of template
  249.      * @return void 
  250.      */
  251.     function setLabelTemplate($template
  252.     {
  253.         $this->_label $template;
  254.     }
  255.  
  256.     function _renderLabel(&$ret)
  257.     {
  258.         $this->_flexy->compile($this->_label);
  259.         $ret->label = $this->_flexy->bufferedOutputObject($ret);
  260.     }
  261.  
  262.     function _renderHtml(&$ret)
  263.     {
  264.         $this->_flexy->compile($this->_html);
  265.         $ret->html = $this->_flexy->bufferedOutputObject($ret);
  266.     }
  267. // end class HTML_QuickForm_Renderer_ObjectFlexy
  268.  
  269. /**
  270.  * Adds nothing to QuickformForm, left for backwards compatibility
  271.  *
  272.  * @category    HTML
  273.  * @package     HTML_QuickForm
  274.  * @ignore
  275.  */
  276. class QuickformFlexyForm extends QuickformForm
  277. {
  278. }
  279.  
  280. /**
  281.  * Adds nothing to QuickformElement, left for backwards compatibility
  282.  *
  283.  * @category    HTML
  284.  * @package     HTML_QuickForm
  285.  * @ignore
  286.  */
  287. class QuickformFlexyElement extends QuickformElement
  288. {
  289. }
  290. ?>

Documentation generated on Sat, 01 Oct 2011 09:00:15 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.