diff options
author | Andreas Gohr <andi@splitbrain.org> | 2015-08-03 18:47:19 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2015-08-03 18:47:19 +0200 |
commit | 8909ab7629ec67708b589c35d380c68da04a8b44 (patch) | |
tree | a35ec57bebc7c0fcc45853fe377b5b0fcc2d5846 /inc/Form/CheckableElement.php | |
parent | b20571a714d774d231f80f95643c6f84ef9833ed (diff) | |
parent | 3c8e094acdcf6d556f022bc224b81ef17e449281 (diff) | |
download | rpg-8909ab7629ec67708b589c35d380c68da04a8b44.tar.gz rpg-8909ab7629ec67708b589c35d380c68da04a8b44.tar.bz2 |
Merge pull request #1265 from splitbrain/form2
Form 2
Diffstat (limited to 'inc/Form/CheckableElement.php')
-rw-r--r-- | inc/Form/CheckableElement.php | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/inc/Form/CheckableElement.php b/inc/Form/CheckableElement.php new file mode 100644 index 000000000..a57bbc1f6 --- /dev/null +++ b/inc/Form/CheckableElement.php @@ -0,0 +1,62 @@ +<?php +namespace dokuwiki\Form; + +/** + * Class CheckableElement + * + * For Radio- and Checkboxes + * + * @package DokuForm + */ +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; + list($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'); + } + } + } + } + } + +} |