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