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

Source for file advcheckbox.php

Documentation is available at advcheckbox.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * HTML class for an advanced checkbox type field
  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      Jason Rust <jrust@php.net>
  18.  * @author      Alexey Borzov <avb@php.net>
  19.  * @copyright   2001-2011 The PHP Group
  20.  * @license     http://www.php.net/license/3_01.txt PHP License 3.01
  21.  * @version     CVS: $Id: advcheckbox.php 317587 2011-10-01 07:55:53Z avb $
  22.  * @link        http://pear.php.net/package/HTML_QuickForm
  23.  */
  24.  
  25. /**
  26.  * HTML class for a checkbox type field
  27.  */
  28. require_once 'HTML/QuickForm/checkbox.php';
  29.  
  30. /**
  31.  * HTML class for an advanced checkbox type field
  32.  *
  33.  * Basically this fixes a problem that HTML has had
  34.  * where checkboxes can only pass a single value (the
  35.  * value of the checkbox when checked).  A value for when
  36.  * the checkbox is not checked cannot be passed, and
  37.  * furthermore the checkbox variable doesn't even exist if
  38.  * the checkbox was submitted unchecked.
  39.  *
  40.  * It works by prepending a hidden field with the same name and
  41.  * another "unchecked" value to the checbox. If the checkbox is
  42.  * checked, PHP overwrites the value of the hidden field with
  43.  * its value.
  44.  * 
  45.  * @category    HTML
  46.  * @package     HTML_QuickForm
  47.  * @author      Jason Rust <jrust@php.net>
  48.  * @author      Alexey Borzov <avb@php.net>
  49.  * @version     Release: 3.2.13
  50.  * @since       2.0
  51.  */
  52. {
  53.     // {{{ properties
  54.  
  55.     /**
  56.      * The values passed by the hidden elment
  57.      *
  58.      * @var array 
  59.      * @access private
  60.      */
  61.     var $_values = null;
  62.  
  63.     /**
  64.      * The default value
  65.      *
  66.      * @var boolean 
  67.      * @access private
  68.      */
  69.     var $_currentValue = null;
  70.  
  71.     // }}}
  72.     // {{{ constructor
  73.  
  74.     /**
  75.      * Class constructor
  76.      * 
  77.      * @param     string    $elementName    (optional)Input field name attribute
  78.      * @param     string    $elementLabel   (optional)Input field label
  79.      * @param     string    $text           (optional)Text to put after the checkbox
  80.      * @param     mixed     $attributes     (optional)Either a typical HTML attribute string
  81.      *                                       or an associative array
  82.      * @param     mixed     $values         (optional)Values to pass if checked or not checked
  83.      *
  84.      * @since     1.0
  85.      * @access    public
  86.      * @return    void 
  87.      */
  88.     function HTML_QuickForm_advcheckbox($elementName=null$elementLabel=null$text=null$attributes=null$values=null)
  89.     {
  90.         $this->HTML_QuickForm_checkbox($elementName$elementLabel$text$attributes);
  91.         $this->setValues($values);
  92.     //end constructor
  93.     
  94.     // }}}
  95.     // {{{ getPrivateName()
  96.  
  97.     /**
  98.      * Gets the private name for the element
  99.      *
  100.      * @param   string  $elementName The element name to make private
  101.      *
  102.      * @access public
  103.      * @return string 
  104.      *
  105.      * @deprecated          Deprecated since 3.2.6, both generated elements have the same name
  106.      */
  107.     function getPrivateName($elementName)
  108.     {
  109.         return '__'.$elementName;
  110.     }
  111.  
  112.     // }}}
  113.     // {{{ getOnclickJs()
  114.  
  115.     /**
  116.      * Create the javascript for the onclick event which will
  117.      * set the value of the hidden field
  118.      *
  119.      * @param     string    $elementName    The element name
  120.      *
  121.      * @access public
  122.      * @return string 
  123.      *
  124.      * @deprecated          Deprecated since 3.2.6, this element no longer uses any javascript
  125.      */
  126.     function getOnclickJs($elementName)
  127.     {
  128.         $onclickJs 'if (this.checked) { this.form[\''.$elementName.'\'].value=\''.addcslashes($this->_values[1]'\'').'\'; }';
  129.         $onclickJs .= 'else { this.form[\''.$elementName.'\'].value=\''.addcslashes($this->_values[0]'\'').'\'; }';
  130.         return $onclickJs;
  131.     }
  132.  
  133.     // }}}
  134.     // {{{ setValues()
  135.  
  136.     /**
  137.      * Sets the values used by the hidden element
  138.      *
  139.      * @param   mixed   $values The values, either a string or an array
  140.      *
  141.      * @access public
  142.      * @return void 
  143.      */
  144.     function setValues($values)
  145.     {
  146.         if (empty($values)) {
  147.             // give it default checkbox behavior
  148.             $this->_values = array(''1);
  149.         elseif (is_scalar($values)) {
  150.             // if it's string, then assume the value to 
  151.             // be passed is for when the element is checked
  152.             $this->_values = array(''$values);
  153.         else {
  154.             $this->_values $values;
  155.         }
  156.         $this->updateAttributes(array('value' => $this->_values[1]));
  157.         $this->setChecked($this->_currentValue == $this->_values[1]);
  158.     }
  159.  
  160.     // }}}
  161.     // {{{ setValue()
  162.  
  163.    /**
  164.     * Sets the element's value
  165.     * 
  166.     * @param    mixed   Element's value
  167.     * @access   public
  168.     */
  169.     function setValue($value)
  170.     {
  171.         $this->setChecked(isset($this->_values[1]&& $value == $this->_values[1]);
  172.         $this->_currentValue $value;
  173.     }
  174.  
  175.     // }}}
  176.     // {{{ getValue()
  177.  
  178.    /**
  179.     * Returns the element's value
  180.     *
  181.     * @access   public
  182.     * @return   mixed 
  183.     */
  184.     function getValue()
  185.     {
  186.         if (is_array($this->_values)) {
  187.             return $this->_values[$this->getChecked()? 1: 0];
  188.         else {
  189.             return null;
  190.         }
  191.     }
  192.  
  193.     // }}}
  194.     // {{{ toHtml()
  195.  
  196.     /**
  197.      * Returns the checkbox element in HTML
  198.      * and the additional hidden element in HTML
  199.      * 
  200.      * @access    public
  201.      * @return    string 
  202.      */
  203.     function toHtml()
  204.     {
  205.         if ($this->_flagFrozen{
  206.             return parent::toHtml();
  207.         else {
  208.             return '<input' $this->_getAttrString(array(
  209.                         'type'  => 'hidden'
  210.                         'name'  => $this->getName()
  211.                         'value' => $this->_values[0]
  212.                    )) ' />' . parent::toHtml();
  213.             
  214.         }
  215.     //end func toHtml
  216.     
  217.     // }}}
  218.     // {{{ getFrozenHtml()
  219.  
  220.    /**
  221.     * Unlike checkbox, this has to append a hidden input in both
  222.     * checked and non-checked states
  223.     */
  224.     function getFrozenHtml()
  225.     {
  226.         return ($this->getChecked()'<tt>[x]</tt>''<tt>[ ]</tt>'.
  227.                $this->_getPersistantData();
  228.     }
  229.  
  230.     // }}}
  231.     // {{{ onQuickFormEvent()
  232.  
  233.     /**
  234.      * Called by HTML_QuickForm whenever form event is made on this element
  235.      *
  236.      * @param     string    $event  Name of event
  237.      * @param     mixed     $arg    event arguments
  238.      * @param     object    &$caller calling object
  239.      * @since     1.0
  240.      * @access    public
  241.      * @return    void 
  242.      */
  243.     function onQuickFormEvent($event$arg&$caller)
  244.     {
  245.         switch ($event{
  246.             case 'updateValue':
  247.                 // constant values override both default and submitted ones
  248.                 // default values are overriden by submitted
  249.                 $value $this->_findValue($caller->_constantValues);
  250.                 if (null === $value{
  251.                     $value $this->_findValue($caller->_submitValues);
  252.                     if (null === $value{
  253.                         $value $this->_findValue($caller->_defaultValues);
  254.                     }
  255.                 }
  256.                 if (null !== $value{
  257.                     $this->setValue($value);
  258.                 }
  259.                 break;
  260.             default:
  261.                 parent::onQuickFormEvent($event$arg$caller);
  262.         }
  263.         return true;
  264.     // end func onQuickFormLoad
  265.  
  266.     // }}}
  267.     // {{{ exportValue()
  268.  
  269.    /**
  270.     * This element has a value even if it is not checked, thus we override
  271.     * checkbox's behaviour here
  272.     */
  273.     function exportValue(&$submitValues$assoc)
  274.     {
  275.         $value $this->_findValue($submitValues);
  276.         if (null === $value{
  277.             $value $this->getValue();
  278.         elseif (is_array($this->_values&& ($value != $this->_values[0]&& ($value != $this->_values[1])) {
  279.             $value = null;
  280.         }
  281.         return $this->_prepareValue($value$assoc);
  282.     }
  283.     // }}}
  284. //end class HTML_QuickForm_advcheckbox
  285. ?>

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