* @author Bertrand Mansion * @author Alexey Borzov * @copyright 2001-2009 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @version CVS: $Id: checkbox.php,v 1.23 2009/04/04 21:34:02 avb Exp $ * @link http://pear.php.net/package/HTML_QuickForm */ /** * HTML class for a checkbox type field * * @category HTML * @package HTML_QuickForm * @author Adam Daniel * @author Bertrand Mansion * @author Alexey Borzov * @version Release: 3.2.11 * @since 1.0 */ class HTML_QuickForm_checkbox extends HTML_QuickForm_input { /** * Checkbox display text * @var string * @since 1.1 * @access private */ public $_text = ''; public $labelClass; public $checkboxClass; // }}} // {{{ constructor /** * Class constructor * * @param string $elementName (optional)Input field name attribute * @param string $elementLabel (optional)Input field value * @param string $text (optional)Checkbox display text * @param mixed $attributes (optional)Either a typical HTML attribute string * or an associative array * @since 1.0 * @access public * @return void */ public function __construct( $elementName = null, $elementLabel = null, $text = '', $attributes = null ) { $this->labelClass = isset($attributes['label-class']) ? $attributes['label-class'] : ''; $this->checkboxClass = isset($attributes['checkbox-class']) ? $attributes['checkbox-class'] : 'checkbox'; if (isset($attributes['label-class'])) { unset($attributes['label-class']); } if (isset($attributes['checkbox-class'])) { unset($attributes['checkbox-class']); } parent::__construct($elementName, $elementLabel, $attributes); $this->_persistantFreeze = true; $this->_text = $text; $this->setType('checkbox'); if (!isset($attributes['value'])) { $this->updateAttributes(array('value' => 1)); } else { $this->updateAttributes(array('value' => $attributes['value'])); } $this->_generateId(); } /** * Sets whether a checkbox is checked * * @param bool $checked Whether the field is checked or not * @since 1.0 * @access public * @return void */ function setChecked($checked) { if (!$checked) { $this->removeAttribute('checked'); } else { $this->updateAttributes(array('checked' => 'checked')); } } //end func setChecked // }}} // {{{ getChecked() /** * Returns whether a checkbox is checked * * @since 1.0 * @access public * @return bool */ function getChecked() { return (bool)$this->getAttribute('checked'); } //end func getChecked // }}} // {{{ toHtml() /** * Returns the checkbox element in HTML * * @since 1.0 * @access public * @return string */ public function toHtml() { if (0 == strlen($this->_text)) { $label = ''; } elseif ($this->_flagFrozen) { $label = $this->_text; } else { $labelClass = $this->labelClass; $checkClass = $this->checkboxClass; $name = $this->_attributes['name']; $label ='
'; return $label; } return HTML_QuickForm_input::toHtml() . $label; } /** * @param string $layout * * @return string */ public function getTemplate($layout) { $size = $this->calculateSize(); switch ($layout) { case FormValidator::LAYOUT_INLINE: return '
{element}
'; break; case FormValidator::LAYOUT_HORIZONTAL: return '
{icon} {element}

{label_2}

{error}
{label_3}
'; break; case FormValidator::LAYOUT_BOX_NO_LABEL: return '
{icon} {element}
'; break; } } /** * Returns the value of field without HTML tags * * @since 1.0 * @access public * @return string */ function getFrozenHtml() { if ($this->getChecked()) { return '[x]' . $this->_getPersistantData(); } else { return '[ ]'; } } //end func getFrozenHtml // }}} // {{{ setText() /** * Sets the checkbox text * * @param string $text * @since 1.1 * @access public * @return void */ function setText($text) { $this->_text = $text; } //end func setText // }}} // {{{ getText() /** * Returns the checkbox text * * @since 1.1 * @access public * @return string */ function getText() { return $this->_text; } //end func getText // }}} // {{{ setValue() /** * Sets the value of the form element * * @param string $value Default value of the form element * @since 1.0 * @access public * @return void */ function setValue($value) { return $this->setChecked($value); } // end func setValue // }}} // {{{ getValue() /** * Returns the value of the form element * * @since 1.0 * @access public * @return bool */ function getValue() { return $this->getChecked(); } // end func getValue // }}} // {{{ onQuickFormEvent() /** * Called by HTML_QuickForm whenever form event is made on this element * * @param string $event Name of event * @param mixed $arg event arguments * @param object &$caller calling object * @since 1.0 * @access public * @return void */ function onQuickFormEvent($event, $arg, &$caller) { switch ($event) { case 'updateValue': // constant values override both default and submitted ones // default values are overriden by submitted $value = $this->_findValue($caller->_constantValues); if (null === $value) { // if no boxes were checked, then there is no value in the array // yet we don't want to display default value in this case if ($caller->isSubmitted()) { $value = $this->_findValue($caller->_submitValues); } else { $value = $this->_findValue($caller->_defaultValues); } } if (null !== $value || $caller->isSubmitted()) { $this->setChecked($value); } break; case 'setGroupValue': $this->setChecked($arg); break; default: parent::onQuickFormEvent($event, $arg, $caller); } return true; } // end func onQuickFormEvent // }}} // {{{ exportValue() /** * Return true if the checkbox is checked, null if it is not checked (getValue() returns false) */ function exportValue(&$submitValues, $assoc = false) { $value = $this->_findValue($submitValues); if (null === $value) { $value = $this->getChecked()? true: null; } return $this->_prepareValue($value, $assoc); } }