112a4e4d1SAndreas Gohr<?php 29d01c1d9SSatoshi Sahara 312a4e4d1SAndreas Gohrnamespace dokuwiki\Form; 412a4e4d1SAndreas Gohr 512a4e4d1SAndreas Gohr/** 612a4e4d1SAndreas Gohr * Class CheckableElement 712a4e4d1SAndreas Gohr * 812a4e4d1SAndreas Gohr * For Radio- and Checkboxes 912a4e4d1SAndreas Gohr * 107ec97767SGerrit Uitslag * @package dokuwiki\Form 1112a4e4d1SAndreas Gohr */ 129d01c1d9SSatoshi Saharaclass CheckableElement extends InputElement 139d01c1d9SSatoshi Sahara{ 1412a4e4d1SAndreas Gohr /** 1512a4e4d1SAndreas Gohr * @param string $type The type of this element 1612a4e4d1SAndreas Gohr * @param string $name The name of this form element 1712a4e4d1SAndreas Gohr * @param string $label The label text for this element 1812a4e4d1SAndreas Gohr */ 199d01c1d9SSatoshi Sahara public function __construct($type, $name, $label) 209d01c1d9SSatoshi Sahara { 2112a4e4d1SAndreas Gohr parent::__construct($type, $name, $label); 2212a4e4d1SAndreas Gohr // default value is 1 2312a4e4d1SAndreas Gohr $this->attr('value', 1); 2412a4e4d1SAndreas Gohr } 2512a4e4d1SAndreas Gohr 2612a4e4d1SAndreas Gohr /** 2712a4e4d1SAndreas Gohr * Handles the useInput flag and sets the checked attribute accordingly 2812a4e4d1SAndreas Gohr */ 299d01c1d9SSatoshi Sahara protected function prefillInput() 309d01c1d9SSatoshi Sahara { 3112a4e4d1SAndreas Gohr global $INPUT; 32*6fd0861fSAndreas Gohr [$name, $key] = $this->getInputName(); 3312a4e4d1SAndreas Gohr $myvalue = $this->val(); 3412a4e4d1SAndreas Gohr 3512a4e4d1SAndreas Gohr if (!$INPUT->has($name)) return; 3612a4e4d1SAndreas Gohr 3712a4e4d1SAndreas Gohr if ($key === null) { 3812a4e4d1SAndreas Gohr // no key - single value 3912a4e4d1SAndreas Gohr $value = $INPUT->str($name); 4012a4e4d1SAndreas Gohr if ($value == $myvalue) { 4112a4e4d1SAndreas Gohr $this->attr('checked', 'checked'); 4212a4e4d1SAndreas Gohr } else { 4312a4e4d1SAndreas Gohr $this->rmattr('checked'); 4412a4e4d1SAndreas Gohr } 4512a4e4d1SAndreas Gohr } else { 4612a4e4d1SAndreas Gohr // we have an array, there might be several values in it 4712a4e4d1SAndreas Gohr $input = $INPUT->arr($name); 4812a4e4d1SAndreas Gohr if (isset($input[$key])) { 4912a4e4d1SAndreas Gohr $this->rmattr('checked'); 5012a4e4d1SAndreas Gohr 5112a4e4d1SAndreas Gohr // values seem to be in another sub array 5212a4e4d1SAndreas Gohr if (is_array($input[$key])) { 5312a4e4d1SAndreas Gohr $input = $input[$key]; 5412a4e4d1SAndreas Gohr } 5512a4e4d1SAndreas Gohr 5612a4e4d1SAndreas Gohr foreach ($input as $value) { 5712a4e4d1SAndreas Gohr if ($value == $myvalue) { 5812a4e4d1SAndreas Gohr $this->attr('checked', 'checked'); 5912a4e4d1SAndreas Gohr } 6012a4e4d1SAndreas Gohr } 6112a4e4d1SAndreas Gohr } 6212a4e4d1SAndreas Gohr } 6312a4e4d1SAndreas Gohr } 6412a4e4d1SAndreas Gohr 6534431439SSatoshi Sahara /** 6634431439SSatoshi Sahara * The HTML representation of this element wrapped in a label 6734431439SSatoshi Sahara * Note: allow HTML tags in label text 6834431439SSatoshi Sahara * 6934431439SSatoshi Sahara * @return string 7034431439SSatoshi Sahara */ 7134431439SSatoshi Sahara public function toHTML() 7234431439SSatoshi Sahara { 7334431439SSatoshi Sahara if ($this->label) { 7434431439SSatoshi Sahara return '<label ' . buildAttributes($this->label->attrs()) . '>' . DOKU_LF 7534431439SSatoshi Sahara . $this->mainElementHTML() . DOKU_LF 7634431439SSatoshi Sahara . '<span>' . $this->label->val() . '</span>' . DOKU_LF 7734431439SSatoshi Sahara . '</label>'; 7834431439SSatoshi Sahara } else { 7934431439SSatoshi Sahara return $this->mainElementHTML(); 8034431439SSatoshi Sahara } 8134431439SSatoshi Sahara } 8212a4e4d1SAndreas Gohr} 83