diff options
author | Andreas Gohr <andi@splitbrain.org> | 2015-05-08 16:15:16 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2015-05-08 16:15:16 +0200 |
commit | 12a4e4d1ed827c59290838d5a11d75ad32aa28f1 (patch) | |
tree | 0fa3fe9326391a24c5eef384b4882580bab3a2e1 /inc/Form/CheckableElement.php | |
parent | cffb4528cea1b9e7e03dc724aaa9719dbd6e23c9 (diff) | |
download | rpg-12a4e4d1ed827c59290838d5a11d75ad32aa28f1.tar.gz rpg-12a4e4d1ed827c59290838d5a11d75ad32aa28f1.tar.bz2 |
start of rewriting the form handling
This is jsut a small beginning. Not all elements are there, yet. It's
also completely untested so far.
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'); + } + } + } + } + } + +} |