xref: /dokuwiki/inc/Form/CheckableElement.php (revision 9d01c1d91a93cf50f37d1486481a6493e98be821)
112a4e4d1SAndreas Gohr<?php
2*9d01c1d9SSatoshi 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 */
12*9d01c1d9SSatoshi Saharaclass CheckableElement extends InputElement
13*9d01c1d9SSatoshi 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     */
19*9d01c1d9SSatoshi Sahara    public function __construct($type, $name, $label)
20*9d01c1d9SSatoshi 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     */
29*9d01c1d9SSatoshi Sahara    protected function prefillInput()
30*9d01c1d9SSatoshi Sahara    {
3112a4e4d1SAndreas Gohr        global $INPUT;
3212a4e4d1SAndreas Gohr        list($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
6512a4e4d1SAndreas Gohr}
66