PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/libs/HTML/QuickForm2/Element/InputCheckable.php

https://github.com/CodeYellowBV/piwik
PHP | 172 lines | 74 code | 14 blank | 84 comment | 15 complexity | 2ac2c2b81fdcd2fce8cd4c58b178a474 MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
  1. <?php
  2. /**
  3. * Base class for checkboxes and radios
  4. *
  5. * PHP version 5
  6. *
  7. * LICENSE:
  8. *
  9. * Copyright (c) 2006-2010, Alexey Borzov <avb@php.net>,
  10. * Bertrand Mansion <golgote@mamasam.com>
  11. * All rights reserved.
  12. *
  13. * Redistribution and use in source and binary forms, with or without
  14. * modification, are permitted provided that the following conditions
  15. * are met:
  16. *
  17. * * Redistributions of source code must retain the above copyright
  18. * notice, this list of conditions and the following disclaimer.
  19. * * Redistributions in binary form must reproduce the above copyright
  20. * notice, this list of conditions and the following disclaimer in the
  21. * documentation and/or other materials provided with the distribution.
  22. * * The names of the authors may not be used to endorse or promote products
  23. * derived from this software without specific prior written permission.
  24. *
  25. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  26. * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  27. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  28. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  29. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  30. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  31. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  32. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  33. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  34. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  35. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. * @category HTML
  38. * @package HTML_QuickForm2
  39. * @author Alexey Borzov <avb@php.net>
  40. * @author Bertrand Mansion <golgote@mamasam.com>
  41. * @license http://opensource.org/licenses/bsd-license.php New BSD License
  42. * @version SVN: $Id: InputCheckable.php 300722 2010-06-24 10:15:52Z mansion $
  43. * @link http://pear.php.net/package/HTML_QuickForm2
  44. */
  45. /**
  46. * Base class for <input> elements
  47. */
  48. // require_once 'HTML/QuickForm2/Element/Input.php';
  49. /**
  50. * Base class for <input> elements having 'checked' attribute (checkboxes and radios)
  51. *
  52. * @category HTML
  53. * @package HTML_QuickForm2
  54. * @author Alexey Borzov <avb@php.net>
  55. * @author Bertrand Mansion <golgote@mamasam.com>
  56. * @version Release: @package_version@
  57. */
  58. class HTML_QuickForm2_Element_InputCheckable extends HTML_QuickForm2_Element_Input
  59. {
  60. protected $persistent = true;
  61. /**
  62. * HTML to represent the element in "frozen" state
  63. *
  64. * Array index "checked" contains HTML for element's "checked" state,
  65. * "unchecked" for not checked
  66. * @var array
  67. */
  68. protected $frozenHtml = array(
  69. 'checked' => 'On',
  70. 'unchecked' => 'Off'
  71. );
  72. /**
  73. * Contains options and data used for the element creation
  74. * - content: Label "glued" to a checkbox or radio
  75. * @var array
  76. */
  77. protected $data = array('content' => '');
  78. public function __construct($name = null, $attributes = null, $data = null)
  79. {
  80. parent::__construct($name, $attributes, $data);
  81. // "checked" attribute should be updated on changes to "value" attribute
  82. // see bug #15708
  83. $this->watchedAttributes[] = 'value';
  84. }
  85. protected function onAttributeChange($name, $value = null)
  86. {
  87. if ('value' != $name) {
  88. return parent::onAttributeChange($name, $value);
  89. }
  90. if (null === $value) {
  91. unset($this->attributes['value'], $this->attributes['checked']);
  92. } else {
  93. $this->attributes['value'] = $value;
  94. $this->updateValue();
  95. }
  96. }
  97. /**
  98. * Sets the label to be rendered glued to the element
  99. *
  100. * This label is returned by {@link __toString()} method with the element's
  101. * HTML. It is automatically wrapped into the <label> tag.
  102. *
  103. * @param string
  104. * @return HTML_QuickForm2_Element_InputCheckable
  105. */
  106. public function setContent($content)
  107. {
  108. $this->data['content'] = $content;
  109. return $this;
  110. }
  111. /**
  112. * Returns the label that will be "glued" to element's HTML
  113. *
  114. * @return string
  115. */
  116. public function getContent()
  117. {
  118. return $this->data['content'];
  119. }
  120. public function setValue($value)
  121. {
  122. if ((string)$value == $this->getAttribute('value')) {
  123. return $this->setAttribute('checked');
  124. } else {
  125. return $this->removeAttribute('checked');
  126. }
  127. }
  128. public function getValue()
  129. {
  130. if (!empty($this->attributes['checked']) && empty($this->attributes['disabled'])) {
  131. return $this->applyFilters($this->getAttribute('value'));
  132. } else {
  133. return null;
  134. }
  135. }
  136. public function __toString()
  137. {
  138. if (0 == strlen($this->data['content'])) {
  139. $label = '';
  140. } elseif ($this->frozen) {
  141. $label = $this->data['content'];
  142. } else {
  143. $label = '<label for="' . htmlspecialchars(
  144. $this->getId(), ENT_QUOTES, self::getOption('charset')
  145. ) . '">' . $this->data['content'] . '</label>';
  146. }
  147. return parent::__toString() . $label;
  148. }
  149. public function getFrozenHtml()
  150. {
  151. if ($this->getAttribute('checked')) {
  152. return $this->frozenHtml['checked'] . $this->getPersistentContent();
  153. } else {
  154. return $this->frozenHtml['unchecked'];
  155. }
  156. }
  157. }
  158. ?>