[795] | 1 | <?php |
---|
| 2 | /** |
---|
| 3 | * Este plugin insere dois select boxes de seleções múltiplas que permitem ao usuário cadastrar vários ítens de uma lista dada. O primeiro select é utilizado para mostrar todos os ítens "cadastráveis". Pode-se selecionar um ou mais ítens que são transferidos para o segundo select através do botão ">>". |
---|
| 4 | * O mesmo pode ser feito do segundo select para o primeiro através do botão "" |
---|
| 5 | * A idéia é realizar o cadastro de todos os ítens contidos no segundo select ao final das operações. |
---|
| 6 | * @package Smarty |
---|
| 7 | * @subpackage wf_plugins |
---|
| 8 | * @param array $params Array de parametros |
---|
| 9 | * - nameLeft: o nome que o select da esquerda irá receber. |
---|
| 10 | * - nameRight: o nome que o select da direita irá receber. |
---|
| 11 | * - arrayLeft: lista dos ítens a serem carregados no select da esquerda. |
---|
| 12 | * - arrayRight: lista dos ítens a serem carregados no select da direita. |
---|
| 13 | * - size: tamanho dos select boxes. |
---|
| 14 | * - diffEnable: valor indicando se deve-se executar o diff entre os select boxes. |
---|
| 15 | * - style: para definir os estilos dos select boxes |
---|
| 16 | * @param object &$smarty Instância do objeto smarty em uso |
---|
| 17 | * @return string $output codigo que insere os select boxes. |
---|
| 18 | * @access public |
---|
| 19 | */ |
---|
| 20 | function smarty_function_wf_select_duplex($params, &$smarty) |
---|
| 21 | { |
---|
| 22 | require_once $smarty->_get_plugin_filepath('function','html_options'); |
---|
| 23 | |
---|
| 24 | $requiredParams = array( |
---|
| 25 | 'nameLeft', |
---|
| 26 | 'nameRight'); |
---|
| 27 | $defaultValues = array( |
---|
| 28 | 'size' => 8, |
---|
| 29 | 'style' => "width:200px", |
---|
| 30 | 'nameLeft' => "_disponiveis_" . rand(), |
---|
| 31 | 'nameRight' => "_cadastrados_" . rand(), |
---|
| 32 | 'diffEnable' => true); |
---|
| 33 | $extractParams = array( |
---|
| 34 | 'nameLeft', |
---|
| 35 | 'nameRight', |
---|
| 36 | 'arrayLeft', |
---|
| 37 | 'arrayRight', |
---|
| 38 | 'size', |
---|
| 39 | 'diffEnable', |
---|
| 40 | 'style'); |
---|
| 41 | |
---|
| 42 | /* verifica se todos os parâmetros obrigatórios foram passados */ |
---|
| 43 | foreach ($requiredParams as $required) |
---|
| 44 | if (!array_key_exists($required, $params) || (empty($params[$required]))) |
---|
| 45 | $smarty->trigger_error("[wf_select_duplex] missing required parameter(s): $required", E_USER_ERROR); |
---|
| 46 | |
---|
| 47 | /* atribui valores default para os parâmetros não passados */ |
---|
| 48 | foreach ($defaultValues as $key => $value) |
---|
| 49 | if (!isset($params[$key])) |
---|
| 50 | $params[$key] = $value; |
---|
| 51 | |
---|
| 52 | /* extrai alguns parâmetros da matriz de parâmetros */ |
---|
| 53 | foreach ($extractParams as $extract) |
---|
| 54 | $$extract = $params[$extract]; |
---|
| 55 | |
---|
| 56 | /* parâmetros extras são "acumulados" em uma única variável */ |
---|
| 57 | $extraParams = array(); |
---|
| 58 | foreach ($params as $key => $value_params) |
---|
| 59 | if (!in_array($key, $extractParams)) |
---|
| 60 | $extraParams[$key] = $value_params; |
---|
| 61 | |
---|
| 62 | $output = <<<EOF |
---|
| 63 | <table><tr> |
---|
| 64 | <td valign=bottom> |
---|
| 65 | EOF; |
---|
| 66 | |
---|
| 67 | $nameLeftLabel = ucwords( str_replace("_", " ", $nameLeft) ); |
---|
| 68 | $output .= $nameLeftLabel; |
---|
| 69 | |
---|
| 70 | $output .= <<<EOF |
---|
| 71 | <br> |
---|
| 72 | EOF; |
---|
| 73 | |
---|
| 74 | $output .= smarty_function_html_options(array_merge(array( |
---|
| 75 | 'multiple' => 'true', |
---|
| 76 | 'name' => $nameLeft . "[]", |
---|
| 77 | 'id' => $nameLeft, |
---|
| 78 | 'size' => $size, |
---|
| 79 | 'style' => $style, |
---|
| 80 | 'options' => $arrayLeft), $extraParams), |
---|
| 81 | $smarty); |
---|
| 82 | $output .= <<<EOF |
---|
| 83 | </td> |
---|
| 84 | <td valign=middle> |
---|
| 85 | EOF; |
---|
| 86 | |
---|
| 87 | $output .= <<<EOF |
---|
| 88 | <input type="hidden" name="$name" id="$name" value="$id_value"/> |
---|
| 89 | <input class="form_botao" type="button" value=">>" onclick="moveOptions('$nameLeft','$nameRight')"> |
---|
| 90 | <br> |
---|
| 91 | <input class="form_botao" type="button" value="<<" onclick="moveOptions('$nameRight','$nameLeft')"> |
---|
| 92 | EOF; |
---|
| 93 | |
---|
| 94 | $output .= <<<EOF |
---|
| 95 | </td> |
---|
| 96 | <td valign=bottom> |
---|
| 97 | EOF; |
---|
| 98 | |
---|
| 99 | $nameRightLabel = ucwords( str_replace("_", " ", $nameRight) ); |
---|
| 100 | $output .= $nameRightLabel; |
---|
| 101 | |
---|
| 102 | $output .= <<<EOF |
---|
| 103 | <br> |
---|
| 104 | EOF; |
---|
| 105 | |
---|
| 106 | $output .= smarty_function_html_options(array_merge(array( |
---|
| 107 | 'multiple' => 'true', |
---|
| 108 | 'name' => $nameRight . "[]", |
---|
| 109 | 'id' => $nameRight, |
---|
| 110 | 'size' => $size, |
---|
| 111 | 'style' => $style, |
---|
| 112 | 'options' => $arrayRight), $extraParams), |
---|
| 113 | $smarty); |
---|
| 114 | |
---|
| 115 | $output .= <<<EOF |
---|
| 116 | </td> |
---|
| 117 | </tr></table> |
---|
| 118 | EOF; |
---|
| 119 | |
---|
| 120 | if($diffEnable) |
---|
| 121 | { |
---|
| 122 | $output .= <<<EOF |
---|
| 123 | <script>selectDiff('$nameRight','$nameLeft');</script> |
---|
| 124 | EOF; |
---|
| 125 | } |
---|
| 126 | |
---|
| 127 | return $output; |
---|
| 128 | } |
---|
| 129 | ?> |
---|