source: branches/1.2/workflow/inc/smarty/wf_plugins/function.wf_select_option_multiple.php @ 1349

Revision 1349, 5.6 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

Line 
1<?php
2/**
3 * Este plugin insere uma combo box e um select box múltiplo que permite ao usuário cadastrar vários ítens de uma lista.
4 * O combo é utilizado para mostrar todos os ítens "cadastráveis", que podem estar em formato de lista normal,
5 * ou uma lista dividida em grupos (utilizando optGroup). Ao selecionar um item, deve-se clicar no botão "Adicionar" para que a seleção seja copiada para o select box,
6 * onde se encontram os itens a serem cadastrados. Ao adicionar um elemento,ele será desabilitado na combo para que não possa ser selecionado novamente.
7 * Para remover um ou mais itens do select, basta selecioná-los e clicar no botão "Remover". Isso vai reabilitá-los na combo.
8 * @author Anderson Tadayuki Saikawa
9 * @author Everton Flávio Rufino Seára
10 * @package Smarty
11 * @subpackage wf_plugins
12 * @license http://www.gnu.org/copyleft/gpl.html GPL
13 * @version 1.0
14 * @param array $params Array de parametros
15 * - nameTop: o nome que a combo irá receber.
16 * - nameBottom: o nome que o select irá receber.
17 * - arrayTop: lista dos ítens a serem carregados na combo.
18 * - arrayBottom: lista dos ítens a serem carregados no select.
19 * - onChangeTop: chamada da função a ser executada no onChange da combo.
20 * - onChangeBottom: chamada da função a ser executada no onChange do select.
21 * - size: tamanho do select box.
22 * - sortEnableBottom: valor indicando se deve-se executar o sort no select box de baixo.
23 * - diffEnable: valor indicando se deve-se executar o diff entre a combo e o select box.
24 * - style: para definir os estilos do select box
25 * @access public
26 * @return string $output codigo que insere o plugin
27 */
28function smarty_function_wf_select_option_multiple($params, &$smarty)
29{
30    require_once $smarty->_get_plugin_filepath('function','html_options');
31
32        // This function build a "normal" select or an "option group" select
33        function option_multiple_build($name, $array, $onChange, $extraParams, &$smarty)
34        {
35                if (!is_array($array))
36                {
37                        return false;
38                }
39
40                $values = array_values($array);
41                // If $array is a matrix, build an option group selectbox
42                if (is_array($values[0]))
43                {
44                        $result  = "<select name='$name' id='$name' onchange='enableButton(\"$name\");$onChange'>";
45                        $result .= "<option value='-1'></option>";
46
47                        foreach ($array as $key => $value)
48                        {
49                                $result .= "<optgroup label='$key'>";
50                                foreach ($value as $optKey => $optValue)
51                                {
52                                        // text-indent style is used on Firefox. IE indents automatically.
53                                        $result .= "<option value='$optKey' style='text-indent:1cm'>$optValue</option>";
54                                }
55                                $result .= '</optgroup>';
56                        }
57                        $result .= '</select>';
58                }
59                // If $array is NOT a matrix, build a normal selectbox
60                else
61                {
62                        // Insert a blank option with value=-1
63                        $array  = array(-1 => "") + $array;
64                        $result = smarty_function_html_options(array_merge(array(
65                                                                                                        'name'     => $name,
66                                                                                                        'id'       => $name,
67                                                                                                        'onchange' => "enableButton('" . $name . "');$onChange",
68                                                                                                        'options'  => $array), $extraParams),
69                                                                                                $smarty);
70                }
71                return $result;
72        }
73
74        $requiredParams  = array(
75                'nameTop',
76                'nameBottom'            );
77        $defaultValues   = array(
78                'size'             => 8,
79                'style'            => "width:400px",
80                'sortEnableBottom' => true,
81                'diffEnable'       => true);
82        $extractParams   = array(
83                'nameTop',
84                'nameBottom',
85                'arrayTop',
86                'arrayBottom',
87                'onChangeTop',
88                'onChangeBottom',
89                'size',
90                'diffEnable',
91                'sortEnableBottom',
92                'style');
93
94        /* verifica se todos os parâmetros obrigatórios foram passados */
95        foreach ($requiredParams as $required)
96                if (!array_key_exists($required, $params) || (empty($params[$required])))
97                        $smarty->trigger_error("[wf_select_option_multiple] missing required parameter(s): $required", E_USER_ERROR);
98
99        /* atribui valores default para os parâmetros não passados */
100        foreach ($defaultValues as $key => $value)
101        if (!isset($params[$key]))
102                        $params[$key] = $value;
103
104        /* extrai alguns parâmetros da matriz de parâmetros */
105        foreach ($extractParams as $extract)
106                $$extract = $params[$extract];
107
108        /* parâmetros extras são "acumulados" em uma única variável */
109        $extraParams = array();
110        foreach ($params as $key => $value_params)
111                if (!in_array($key, $extractParams))
112                        $extraParams[$key] = $value_params;
113
114        $output = <<<EOF
115                                <table valign=top>
116                                <tr>
117                                        <td valign=top>
118EOF;
119        $output .=  option_multiple_build($nameTop, $arrayTop, $onChangeTop, $extraParams, $smarty);
120
121        $output .= <<<EOF
122                        <!-- <input type="hidden" name="$name" id="$name" value="$id_value"/> -->
123                        &nbsp;&nbsp;<input class="form_botao" type="button" id="btn_$nameTop" value="Adicionar" disabled  onclick="addOption('$nameTop','$nameBottom','$sortEnableBottom')">
124EOF;
125
126        $output .= <<<EOF
127                                        </td>
128                                </tr>
129                                <tr>
130                                        <td valign=top>
131EOF;
132
133        $nameBottomLabel = ucwords( str_replace("_", " ", $nameBottom) );
134        $output .= $nameBottomLabel;
135
136        $output .= <<<EOF
137                                <br>
138EOF;
139
140        $output .= smarty_function_html_options(array_merge(array(
141                                                                                        'multiple' => 'true',
142                                                                                        'name'     => $nameBottom . "[]",
143                                                                                        'id'       => $nameBottom,
144                                                                                        'size'     => $size,
145                                                                                        'style'    => $style,
146                                                                                        'onChange' => "enableButton('" . $nameBottom . "');$onChangeBottom",
147                                                                                        'options'  => $arrayBottom),
148                                                                                        $extraParams),
149                                                                                $smarty);
150
151        $output .= <<<EOF
152                                        </td>
153                                </tr>
154                                <tr>
155                                        <td align=right>
156                                                <input class="form_botao" type="button" id="btn_$nameBottom" value="Remover" disabled onclick="removeOptions('$nameBottom', '$nameTop')">
157                                        </td>
158                                </tr>
159                                </table>
160EOF;
161
162        if($diffEnable)
163        {
164        $output .= <<<EOF
165                                <script>selectDiffMultiple('$nameBottom','$nameTop');</script>
166EOF;
167        }
168
169        return $output;
170}
171?>
Note: See TracBrowser for help on using the repository browser.