[ Index ]
 

Code source de phpMyVisites 2.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/libs/Html/QuickForm/Renderer/ -> ITDynamic.php (source)

   1  <?php
   2  /* vim: set expandtab tabstop=4 shiftwidth=4: */
   3  // +----------------------------------------------------------------------+
   4  // | PHP version 4.0                                                      |
   5  // +----------------------------------------------------------------------+
   6  // | Copyright (c) 1997-2003 The PHP Group                                |
   7  // +----------------------------------------------------------------------+
   8  // | This source file is subject to version 2.0 of the PHP license,       |
   9  // | that is bundled with this package in the file LICENSE, and is        |
  10  // | available at through the world-wide-web at                           |
  11  // | http://www.php.net/license/2_02.txt.                                 |
  12  // | If you did not receive a copy of the PHP license and are unable to   |
  13  // | obtain it through the world-wide-web, please send a note to          |
  14  // | license@php.net so we can mail you a copy immediately.               |
  15  // +----------------------------------------------------------------------+
  16  // | Author: Alexey Borzov <borz_off@cs.msu.su>                           |
  17  // +----------------------------------------------------------------------+
  18  //
  19  // $Id: ITDynamic.php,v 1.1 2005/12/06 01:50:39 matthieu_ Exp $
  20  
  21  require_once 'HTML/QuickForm/Renderer.php';
  22  
  23  /**
  24   * A concrete renderer for HTML_QuickForm, using Integrated Templates.
  25   * 
  26   * This is a "dynamic" renderer, which means that concrete form look 
  27   * is defined at runtime. This also means that you can define 
  28   * <b>one</b> template file for <b>all</b> your forms. That template
  29   * should contain a block for every element 'look' appearing in your 
  30   * forms and also some special blocks (consult the examples). If a
  31   * special block is not set for an element, the renderer falls back to
  32   * a default one.
  33   * 
  34   * @author Alexey Borzov <borz_off@cs.msu.su>
  35   * @access public
  36   */
  37  class HTML_QuickForm_Renderer_ITDynamic extends HTML_QuickForm_Renderer
  38  {
  39     /**
  40      * A template class (HTML_Template_ITX or HTML_Template_Sigma) instance
  41      * @var object
  42      */
  43      var $_tpl = null;
  44  
  45     /**
  46      * The errors that were not shown near concrete fields go here
  47      * @var array
  48      */
  49      var $_errors = array();
  50  
  51     /**
  52      * Show the block with required note?
  53      * @var bool
  54      */
  55      var $_showRequired = false;
  56  
  57     /**
  58      * A separator for group elements
  59      * @var mixed
  60      */
  61      var $_groupSeparator = null;
  62  
  63     /**
  64      * The current element index inside a group
  65      * @var integer
  66      */
  67      var $_groupElementIdx = 0;
  68  
  69     /**
  70      * Blocks to use for different elements  
  71      * @var array
  72      */
  73      var $_elementBlocks = array();
  74  
  75     /**
  76      * Block to use for headers
  77      * @var string
  78      */
  79      var $_headerBlock = null;
  80  
  81  
  82     /**
  83      * Constructor
  84      *
  85      * @param object     An HTML_Template_ITX/HTML_Template_Sigma object to use
  86      */
  87      function HTML_QuickForm_Renderer_ITDynamic(&$tpl)
  88      {
  89          $this->HTML_QuickForm_Renderer();
  90          $this->_tpl =& $tpl;
  91          $this->_tpl->setCurrentBlock('qf_main_loop');
  92      }
  93  
  94  
  95      function finishForm(&$form)
  96      {
  97          // display errors above form
  98          if (!empty($this->_errors) && $this->_tpl->blockExists('qf_error_loop')) {
  99              foreach ($this->_errors as $error) {
 100                  $this->_tpl->setVariable('qf_error', $error);
 101                  $this->_tpl->parse('qf_error_loop');
 102              }
 103          }
 104          // show required note
 105          if ($this->_showRequired) {
 106              $this->_tpl->setVariable('qf_required_note', $form->getRequiredNote());
 107          }
 108          // assign form attributes
 109          $this->_tpl->setVariable('qf_attributes', $form->getAttributes(true));
 110          // assign javascript validation rules
 111          $this->_tpl->setVariable('qf_javascript', $form->getValidationScript());
 112      }
 113        
 114  
 115      function renderHeader(&$header)
 116      {
 117          $blockName = $this->_matchBlock($header);
 118          if ('qf_header' == $blockName && isset($this->_headerBlock)) {
 119              $blockName = $this->_headerBlock;
 120          }
 121          $this->_tpl->setVariable('qf_header', $header->toHtml());
 122          $this->_tpl->parse($blockName);
 123          $this->_tpl->parse('qf_main_loop');
 124      }
 125  
 126  
 127      function renderElement(&$element, $required, $error)
 128      {
 129          $blockName = $this->_matchBlock($element);
 130          // are we inside a group?
 131          if ('qf_main_loop' != $this->_tpl->currentBlock) {
 132              if (0 != $this->_groupElementIdx && $this->_tpl->placeholderExists('qf_separator', $blockName)) {
 133                  if (is_array($this->_groupSeparator)) {
 134                      $this->_tpl->setVariable('qf_separator', $this->_groupSeparator[($this->_groupElementIdx - 1) % count($this->_groupSeparator)]);
 135                  } else {
 136                      $this->_tpl->setVariable('qf_separator', (string)$this->_groupSeparator);
 137                  }
 138              }
 139              $this->_groupElementIdx++;
 140  
 141          } elseif(!empty($error)) {
 142              // show the error message or keep it for later use
 143              if ($this->_tpl->blockExists($blockName . '_error')) {
 144                  $this->_tpl->setVariable('qf_error', $error);
 145              } else {
 146                  $this->_errors[] = $error;
 147              }
 148          }
 149          // show an '*' near the required element
 150          if ($required) {
 151              $this->_showRequired = true;
 152              if ($this->_tpl->blockExists($blockName . '_required')) {
 153                  $this->_tpl->touchBlock($blockName . '_required');
 154              }
 155          }
 156          // Prepare multiple labels
 157          $labels = $element->getLabel();
 158          if (is_array($labels)) {
 159              $mainLabel = array_shift($labels);
 160          } else {
 161              $mainLabel = $labels;
 162          }
 163          // render the element itself with its main label
 164          $this->_tpl->setVariable('qf_element', $element->toHtml());
 165          if ($this->_tpl->placeholderExists('qf_label', $blockName)) {
 166              $this->_tpl->setVariable('qf_label', $mainLabel);
 167          }
 168          // render extra labels, if any
 169          if (is_array($labels)) {
 170              foreach($labels as $key => $label) {
 171                  $key = is_int($key)? $key + 2: $key;
 172                  if ($this->_tpl->blockExists($blockName . '_label_' . $key)) {
 173                      $this->_tpl->setVariable('qf_label_' . $key, $label);
 174                  }
 175              }
 176          }
 177          $this->_tpl->parse($blockName);
 178          $this->_tpl->parseCurrentBlock();
 179      }
 180     
 181  
 182      function renderHidden(&$element)
 183      {
 184          $this->_tpl->setVariable('qf_hidden', $element->toHtml());
 185          $this->_tpl->parse('qf_hidden_loop');
 186      }
 187  
 188  
 189      function startGroup(&$group, $required, $error)
 190      {
 191          $blockName = $this->_matchBlock($group);
 192          $this->_tpl->setCurrentBlock($blockName . '_loop');
 193          $this->_groupElementIdx = 0;
 194          $this->_groupSeparator  = is_null($group->_separator)? '&nbsp;': $group->_separator;
 195          // show an '*' near the required element
 196          if ($required) {
 197              $this->_showRequired = true;
 198              if ($this->_tpl->blockExists($blockName . '_required')) {
 199                  $this->_tpl->touchBlock($blockName . '_required');
 200              }
 201          }
 202          // show the error message or keep it for later use
 203          if (!empty($error)) {
 204              if ($this->_tpl->blockExists($blockName . '_error')) {
 205                  $this->_tpl->setVariable('qf_error', $error);
 206              } else {
 207                  $this->_errors[] = $error;
 208              }
 209          }
 210          $this->_tpl->setVariable('qf_group_label', $group->getLabel());
 211      }
 212  
 213  
 214      function finishGroup(&$group)
 215      {
 216          $this->_tpl->parse($this->_matchBlock($group));
 217          $this->_tpl->setCurrentBlock('qf_main_loop');
 218          $this->_tpl->parseCurrentBlock();
 219      }
 220  
 221  
 222     /**
 223      * Returns the name of a block to use for element rendering
 224      * 
 225      * If a name was not explicitly set via setElementBlock(), it tries
 226      * the names '{prefix}_{element type}' and '{prefix}_{element}', where
 227      * prefix is either 'qf' or the name of the current group's block
 228      * 
 229      * @param object     An HTML_QuickForm_element object
 230      * @access private
 231      * @return string    block name
 232      */
 233      function _matchBlock(&$element)
 234      {
 235          $name = $element->getName();
 236          $type = $element->getType();
 237          if (isset($this->_elementBlocks[$name]) && $this->_tpl->blockExists($this->_elementBlocks[$name])) {
 238              if (('group' == $type) || ($this->_elementBlocks[$name] . '_loop' != $this->_tpl->currentBlock)) {
 239                  return $this->_elementBlocks[$name];
 240              }
 241          }
 242          if ('group' != $type && 'qf_main_loop' != $this->_tpl->currentBlock) {
 243              $prefix = substr($this->_tpl->currentBlock, 0, -5); // omit '_loop' postfix
 244          } else {
 245              $prefix = 'qf';
 246          }
 247          if ($this->_tpl->blockExists($prefix . '_' . $type)) {
 248              return $prefix . '_' . $type;
 249          } elseif ($this->_tpl->blockExists($prefix . '_' . $name)) {
 250              return $prefix . '_' . $name;
 251          } else {
 252              return $prefix . '_element';
 253          }
 254      }
 255  
 256  
 257     /**
 258      * Sets the block to use for element rendering
 259      * 
 260      * @param mixed      element name or array ('element name' => 'block name')
 261      * @param string     block name if $elementName is not an array
 262      * @access public
 263      * @return void
 264      */
 265      function setElementBlock($elementName, $blockName = null)
 266      {
 267          if (is_array($elementName)) {
 268              $this->_elementBlocks = array_merge($this->_elementBlocks, $elementName);
 269          } else {
 270              $this->_elementBlocks[$elementName] = $blockName;
 271          }
 272      }
 273  
 274  
 275     /**
 276      * Sets the name of a block to use for header rendering
 277      *
 278      * @param string     block name
 279      * @access public
 280      * @return void
 281      */
 282      function setHeaderBlock($blockName)
 283      {
 284          $this->_headerBlock = $blockName;
 285      }
 286  }
 287  ?>


Généré le : Mon Nov 26 14:10:01 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics