xref: /dokuwiki/inc/Form/CheckableElement.php (revision 90fb952c4c30c09c8446076ba05991c89a3f0b01)
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