[795] | 1 | <?php |
---|
| 2 | /** |
---|
| 3 | * Este plugin insere duas combo boxes que permitem ao usuário selecionar uma cidade do Brasil. |
---|
| 4 | * A primeira combo é utilizada para fazer a seleção de um Estado. Uma vez feita esta seleção, é feita uma chamada Ajax que carrega as cidades daquele Estado na segunda combo. |
---|
| 5 | * E, é nesta segunda combo que o usuário efetivamente seleciona a cidade. |
---|
| 6 | * @package Smarty |
---|
| 7 | * @subpackage wf_plugins |
---|
| 8 | * @param array $params Array de parametros |
---|
| 9 | * - name: o nome que a combo de seleção de cidade irá receber. |
---|
| 10 | * - value: o ID da cidade que aparecerá inicialmente selecionada. |
---|
| 11 | * - state_name: o nome da combo de seleção de Estado. |
---|
| 12 | * - state_value: o ID do Estado inicialmente selecionado. |
---|
| 13 | * @param object &$smarty Instância do objeto smarty em uso |
---|
| 14 | * @return string $output codigo que insere os comboboxes. |
---|
| 15 | * @access public |
---|
| 16 | */ |
---|
| 17 | function smarty_function_wf_select_city($params, &$smarty) |
---|
| 18 | { |
---|
| 19 | require_once $smarty->_get_plugin_filepath('function','wf_select_state'); |
---|
| 20 | |
---|
| 21 | $requiredParams = array( |
---|
| 22 | 'name'); |
---|
| 23 | $defaultValues = array( |
---|
| 24 | 'value' => 1, |
---|
| 25 | 'handleExpiredSessions' => true, |
---|
| 26 | 'state_value' => 1, |
---|
| 27 | 'state_name' => "_estado_" . rand() . '_' . rand()); |
---|
| 28 | $extractParams = array( |
---|
| 29 | 'name', |
---|
| 30 | 'handleExpiredSessions', |
---|
| 31 | 'value', |
---|
| 32 | 'state_value', |
---|
| 33 | 'state_name'); |
---|
| 34 | |
---|
| 35 | /* verifica se todos os parâmetros obrigatórios foram passados */ |
---|
| 36 | foreach ($requiredParams as $required) |
---|
| 37 | if (!array_key_exists($required, $params) || (empty($params[$required]))) |
---|
| 38 | $smarty->trigger_error("[wf_select_city] missing required parameter(s): $required", E_USER_ERROR); |
---|
[3167] | 39 | |
---|
[795] | 40 | /* atribui valores default para os parâmetros não passados */ |
---|
| 41 | foreach ($defaultValues as $key => $value) |
---|
| 42 | if (!isset($params[$key])) |
---|
| 43 | $params[$key] = $value; |
---|
[3167] | 44 | |
---|
[795] | 45 | /* extrai alguns parâmetros da matriz de parâmetros */ |
---|
| 46 | foreach ($extractParams as $extract) |
---|
| 47 | $$extract = $params[$extract]; |
---|
[3167] | 48 | |
---|
[795] | 49 | /* parâmetros extras são "acumulados" em uma única variável */ |
---|
| 50 | $extraParams = array(); |
---|
| 51 | foreach ($params as $key => $value_params) |
---|
| 52 | if (!in_array($key, $extractParams)) |
---|
| 53 | $extraParams[$key] = $value_params; |
---|
| 54 | |
---|
[3167] | 55 | $db = &Factory::getInstance('WorkflowObjects')->getDBExpresso()->Link_ID; |
---|
[795] | 56 | if (isset($params['value'])) |
---|
| 57 | { |
---|
| 58 | $sql = "SELECT id_state FROM phpgw_cc_city WHERE id_city = ?"; |
---|
| 59 | $result = $db->query($sql, array($value)); |
---|
| 60 | if ($result) |
---|
| 61 | { |
---|
| 62 | $row = $result->fetchRow(DB_FETCHMODE_ASSOC); |
---|
| 63 | $state_value = $row['id_state']; |
---|
| 64 | } |
---|
| 65 | else |
---|
| 66 | { |
---|
| 67 | $state_value = 1; |
---|
| 68 | $value = 1; |
---|
| 69 | } |
---|
| 70 | } |
---|
| 71 | |
---|
| 72 | $handleExpiredSessions = ($handleExpiredSessions === true) ? 'true' : 'false'; |
---|
| 73 | |
---|
| 74 | $output = smarty_function_wf_select_state(array( |
---|
| 75 | 'name' => $state_name, |
---|
| 76 | 'value' => $state_value, |
---|
| 77 | 'onchange' => "draw_cities('$name', this.value, null, $handleExpiredSessions);"), |
---|
| 78 | $smarty); |
---|
| 79 | $output .= '<br/>'; |
---|
| 80 | |
---|
| 81 | $sql = "SELECT id_city, city_name FROM phpgw_cc_city WHERE id_state = ? ORDER BY city_name"; |
---|
| 82 | $result = $db->query($sql, array($state_value)); |
---|
| 83 | $cities = array(); |
---|
| 84 | while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) |
---|
| 85 | $cidades[$row['id_city']] = $row['city_name']; |
---|
| 86 | |
---|
| 87 | $output .= smarty_function_html_options(array_merge(array( |
---|
| 88 | 'name' => $name, |
---|
| 89 | 'id' => $name, |
---|
| 90 | 'options' => $cidades, |
---|
| 91 | 'selected' => $value, |
---|
| 92 | 'print_result' => false), $extraParams), |
---|
| 93 | $smarty); |
---|
| 94 | return $output; |
---|
| 95 | } |
---|
| 96 | ?> |
---|