| // | Bertrand Mansion | // +----------------------------------------------------------------------+ // // $Id$ require_once('HTML/QuickForm/input.php'); /** * HTML class for a radio type element * * @author Adam Daniel * @author Bertrand Mansion * @version 1.1 * @since PHP4.04pl1 * @access public */ class HTML_QuickForm_radio extends HTML_QuickForm_input { // {{{ properties /** * Radio display text * @var string * @since 1.1 * @access private */ var $_text = ''; // }}} // {{{ constructor /** * Class constructor * * @param string Input field name attribute * @param mixed Label(s) for a field * @param string Text to display near the radio * @param string Input field value * @param mixed 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=null, $value=null, $attributes=null) { // TODO MDL-52313 Replace with the call to parent::__construct(). HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes); if (isset($value)) { $this->setValue($value); } $this->_persistantFreeze = true; $this->setType('radio'); $this->_text = $text; } //end constructor /** * Old syntax of class constructor for backward compatibility. */ public function HTML_QuickForm_radio($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) { self::__construct($elementName, $elementLabel, $text, $value, $attributes); } // }}} function _generateId() { // Override the standard implementation, since you can have multiple // check-boxes with the same name on a form. Therefore, add the // (cleaned up) value to the id. if ($this->getAttribute('id')) { return; } parent::_generateId(); $id = $this->getAttribute('id') . '_' . clean_param($this->getValue(), PARAM_ALPHANUMEXT); $this->updateAttributes(array('id' => $id)); } // {{{ setChecked() /** * Sets whether radio button 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 radio button is checked * * @since 1.0 * @access public * @return string */ function getChecked() { return $this->getAttribute('checked'); } //end func getChecked // }}} // {{{ toHtml() /** * Returns the radio element in HTML * * @since 1.0 * @access public * @return string */ function toHtml() { if (0 == strlen($this->_text)) { $label = ''; } elseif ($this->_flagFrozen) { $label = $this->_text; } else { $label = ''; } return HTML_QuickForm_input::toHtml() . $label; } //end func toHtml // }}} // {{{ getFrozenHtml() /** * 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 radio text * * @param string $text Text to display near the radio button * @since 1.1 * @access public * @return void */ function setText($text) { $this->_text = $text; } //end func setText // }}} // {{{ getText() /** * Returns the radio text * * @since 1.1 * @access public * @return string */ function getText() { return $this->_text; } //end func getText // }}} // {{{ 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) { $value = $this->_findValue($caller->_submitValues); if (null === $value) { $value = $this->_findValue($caller->_defaultValues); } } if ($value == $this->getValue()) { $this->setChecked(true); } else { $this->setChecked(false); } break; case 'setGroupValue': if ($arg == $this->getValue()) { $this->setChecked(true); } else { $this->setChecked(false); } break; default: parent::onQuickFormEvent($event, $arg, $caller); } return true; } // end func onQuickFormLoad // }}} // {{{ exportValue() /** * Returns the value attribute if the radio is checked, null if it is not */ function exportValue(&$submitValues, $assoc = false) { $value = $this->_findValue($submitValues); if (null === $value) { $value = $this->getChecked()? $this->getValue(): null; } elseif ($value != $this->getValue()) { $value = null; } return $this->_prepareValue($value, $assoc); } // }}} } //end class HTML_QuickForm_radio ?>