diff options
Diffstat (limited to 'platform/www/lib/plugins/bureaucracy/helper/fieldradio.php')
-rw-r--r-- | platform/www/lib/plugins/bureaucracy/helper/fieldradio.php | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/bureaucracy/helper/fieldradio.php b/platform/www/lib/plugins/bureaucracy/helper/fieldradio.php new file mode 100644 index 0000000..e2b466d --- /dev/null +++ b/platform/www/lib/plugins/bureaucracy/helper/fieldradio.php @@ -0,0 +1,82 @@ +<?php +/** + * Class helper_plugin_bureaucracy_fieldselect + * + * Creates a dropdown list + */ +class helper_plugin_bureaucracy_fieldradio extends helper_plugin_bureaucracy_field { + + protected $mandatory_args = 3; + + /** + * Arguments: + * - cmd + * - label + * - option1|option2|etc + * - ^ (optional) + * + * @param array $args The tokenized definition, only split at spaces + */ + public function initialize($args) { + $this->init($args); + $this->opt['args'] = array_filter(array_map('trim', explode('|',array_shift($args)))); + $this->standardArgs($args); + } + + /** + * Render the field as XHTML + * + * Outputs the represented field using the passed Doku_Form object. + * Additional parameters (CSS class & HTML name) are passed in $params. + * + * @params array $params Additional HTML specific parameters + * @params Doku_Form $form The target Doku_Form object + * @params int $formid unique identifier of the form which contains this field + */ + public function renderfield($params, Doku_Form $form, $formid) { + $this->_handlePreload(); + if(!$form->_infieldset){ + $form->startFieldset(''); + } + if ($this->error) { + $params['class'] = 'bureaucracy_error'; + } + $params = array_merge($this->opt, $params); + + list($name, $entries, $value, $label, $id, $class) = $this->_parse_tpl( + array( + '@@NAME@@', + $params['args'], + '@@VALUE@@', + '@@DISPLAY@@', + '@@ID@@', + '@@CLASS@@' + ), + $params + ); + + $value = (in_array($value, $entries) ? $value : null); + $valueoffieldwithid = ($value !== null ? $value : current($entries)); + // label + $s = '<label'; + $s .= ' class="radiolabel '.$class.'"'; + $s .= '><span>' . $label . '</span>'; + $s .= '</label>'; + $form->addElement($s); + + // radio fields + foreach($entries as $val) { + if($value === $val) { + $attrs = array('checked' => 'checked'); + } else { + $attrs = array(); + } + if($valueoffieldwithid === $val) { + $_id = $id; //e.g. autofocus with 'focus__this' id + } else { + $_id = ''; + } + $form->addElement(form_makeRadioField($name, $val, $val, $_id, $class, $attrs)); + } + } +} |