1<?php
2/**
3 * Class helper_plugin_bureaucracy_fieldmultiselect
4 *
5 * Creates a multiselect box
6 */
7class helper_plugin_bureaucracy_fieldmultiselect extends helper_plugin_bureaucracy_fieldselect {
8
9    /**
10     * Arguments:
11     *  - cmd
12     *  - label
13     *  - option1|option2|etc
14     *  - ^ (optional)
15     *
16     * @param array $args The tokenized definition, only split at spaces
17     */
18    public function initialize($args) {
19        $this->init($args);
20        $this->opt['args'] = array_map('trim', explode('|',array_shift($args)));
21        $this->standardArgs($args);
22        if (isset($this->opt['value'])) {
23            $this->opt['value'] = array_map('trim', explode(',', $this->opt['value']));
24        } else {
25            $this->opt['value'] = array();
26        }
27    }
28
29    /**
30     * Render the field as XHTML
31     *
32     * Outputs the represented field using the passed Doku_Form object.
33     * Additional parameters (CSS class & HTML name) are passed in $params.
34     *
35     * @params array     $params Additional HTML specific parameters
36     * @params Doku_Form $form   The target Doku_Form object
37     * @params int       $formid unique identifier of the form which contains this field
38     */
39    public function renderfield($params, Doku_Form $form, $formid) {
40        $this->_handlePreload();
41        if(!$form->_infieldset){
42            $form->startFieldset('');
43        }
44        if ($this->error) {
45            $params['class'] = 'bureaucracy_error';
46        }
47        $params = array_merge($this->opt, $params);
48        $form->addElement(call_user_func_array('form_makeListboxField',
49                                               $this->_parse_tpl(
50                                                   array(
51                                                       '@@NAME@@[]',
52                                                       $params['args'],
53                                                       $this->opt['value'],
54                                                       '@@DISPLAY@@',
55                                                       '@@ID@@',
56                                                       '@@CLASS@@',
57                                                       array('multiple' => 'multiple')
58                                                   ),
59                                                   $params
60                                               )));
61    }
62}