|
- <?php
-
- namespace dokuwiki\Form;
-
- /**
- * Class CheckableElement
- *
- * For Radio- and Checkboxes
- *
- * @package dokuwiki\Form
- */
- class CheckableElement extends InputElement
- {
- /**
- * @param string $type The type of this element
- * @param string $name The name of this form element
- * @param string $label The label text for this element
- */
- public function __construct($type, $name, $label)
- {
- parent::__construct($type, $name, $label);
- // default value is 1
- $this->attr('value', 1);
- }
-
- /**
- * Handles the useInput flag and sets the checked attribute accordingly
- */
- protected function prefillInput()
- {
- global $INPUT;
- [$name, $key] = $this->getInputName();
- $myvalue = $this->val();
-
- if (!$INPUT->has($name)) return;
-
- if ($key === null) {
- // no key - single value
- $value = $INPUT->str($name);
- if ($value == $myvalue) {
- $this->attr('checked', 'checked');
- } else {
- $this->rmattr('checked');
- }
- } else {
- // we have an array, there might be several values in it
- $input = $INPUT->arr($name);
- if (isset($input[$key])) {
- $this->rmattr('checked');
-
- // values seem to be in another sub array
- if (is_array($input[$key])) {
- $input = $input[$key];
- }
-
- foreach ($input as $value) {
- if ($value == $myvalue) {
- $this->attr('checked', 'checked');
- }
- }
- }
- }
- }
-
- /**
- * The HTML representation of this element wrapped in a label
- * Note: allow HTML tags in label text
- *
- * @return string
- */
- public function toHTML()
- {
- if ($this->label) {
- return '<label ' . buildAttributes($this->label->attrs()) . '>' . DOKU_LF
- . $this->mainElementHTML() . DOKU_LF
- . '<span>' . $this->label->val() . '</span>' . DOKU_LF
- . '</label>';
- } else {
- return $this->mainElementHTML();
- }
- }
- }
|