Commit fe9bb20e7b33e727c0ab4f2836e3c97ce9968e91
1 parent
721d1ffa
Exists in
master
#76 by Eriksen Costa: Melhorias no calendário de ano letivo, permitindo que o a…
…no letivo termine em anos posteriores
Showing
10 changed files
with
495 additions
and
126 deletions
Show diff stats
ieducar/intranet/clsCalendario.inc.php
... | ... | @@ -297,10 +297,11 @@ class clsCalendario |
297 | 297 | * @todo Substituir código de geração de calendário por uma biblioteca |
298 | 298 | * com licença compatível com GPL2 |
299 | 299 | */ |
300 | - function getCalendario($mes, $ano, $nome, $mixVariaveisMantidas) | |
300 | + function getCalendario($mes, $ano, $nome, $mixVariaveisMantidas, | |
301 | + array $formValues = array()) | |
301 | 302 | { |
302 | - $array_color = $array_color; | |
303 | - $array_legenda = $array_legenda; | |
303 | + $array_color = $this->array_cor; | |
304 | + $array_legenda = $this->array_legenda; | |
304 | 305 | |
305 | 306 | if ( |
306 | 307 | isset($mixVariaveisMantidas["{$nome}_mes"]) && |
... | ... | @@ -354,7 +355,7 @@ class clsCalendario |
354 | 355 | |
355 | 356 | // Create the table tag opener and day headers |
356 | 357 | // GET |
357 | - $linkFixo = $strUrl . "?"; | |
358 | + $linkFixo = '?'; | |
358 | 359 | if (is_array($mixVariaveisMantidas)) { |
359 | 360 | foreach ($mixVariaveisMantidas as $key => $value) { |
360 | 361 | if ($key != "{$nome}_mes" && $key != "{$nome}_ano") { |
... | ... | @@ -427,11 +428,15 @@ class clsCalendario |
427 | 428 | |
428 | 429 | $form = sprintf(' |
429 | 430 | <form id="form_calendario" name="form_calendario" method="post" action="%s"> |
430 | - <input type="hidden" id="nome" name="nome" value=""> | |
431 | - <input type="hidden" id="dia" name="dia" value=""> | |
432 | - <input type="hidden" id="mes" name="mes" value=""> | |
433 | - <input type="hidden" id="ano" name="ano" value=""> | |
434 | - </form>', $linkFixo); | |
431 | + <input type="hidden" id="cal_nome" name="nome" value=""> | |
432 | + <input type="hidden" id="cal_dia" name="dia" value=""> | |
433 | + <input type="hidden" id="cal_mes" name="mes" value=""> | |
434 | + <input type="hidden" id="cal_ano" name="ano" value=""> | |
435 | + %s | |
436 | + </form>', | |
437 | + $linkFixo, | |
438 | + $this->_generateFormValues($formValues, array('nome', 'ano', 'mes', 'dia')) | |
439 | + ); | |
435 | 440 | |
436 | 441 | if ($this->permite_trocar_ano == TRUE) { |
437 | 442 | $select = sprintf( |
... | ... | @@ -467,8 +472,8 @@ class clsCalendario |
467 | 472 | <a href="#" onclick="acaoCalendario(\'%s\', \'\', \'%s\', \'%s\')"> |
468 | 473 | <img src="/intranet/imagens/i-educar/seta_esq.gif" border="0" style="margin-right: 5px;" alt="Mês Anterior"> |
469 | 474 | </a> |
470 | - %s | |
471 | - ', $nome, $mes_ano, $ano_anterior_ano, $ano); | |
475 | + %s', | |
476 | + $nome, $mes_ano, $ano_anterior_ano, $ano); | |
472 | 477 | |
473 | 478 | $cab[] = sprintf(' |
474 | 479 | <a href="#" onclick="acaoCalendario(\'%s\', \'\', \'%s\', \'%s\')"> |
... | ... | @@ -568,7 +573,7 @@ class clsCalendario |
568 | 573 | |
569 | 574 | $style_dia = sprintf('background-color: %s;', $this->array_cor[0]); |
570 | 575 | |
571 | - if ($this->array_cor_dia_padrao[$DiaSemana]) | |
576 | + if (isset($this->array_cor_dia_padrao[$DiaSemana])) | |
572 | 577 | $style_dia = sprintf('background-color: %s;', $this->array_cor_dia_padrao[$DiaSemana]); |
573 | 578 | |
574 | 579 | if (key_exists($diaCorrente,$this->array_dias)) { |
... | ... | @@ -607,7 +612,7 @@ class clsCalendario |
607 | 612 | $diaCorrente_ = strlen($diaCorrente) == 1 ? '0' . $diaCorrente : $diaCorrente; |
608 | 613 | $NomeMes = strtolower($NomeMes); |
609 | 614 | |
610 | - if (key_exists($diaCorrente,$this->array_div_flutuante_dias)) { | |
615 | + if (key_exists($diaCorrente, $this->array_div_flutuante_dias)) { | |
611 | 616 | $message = "onmouseover=\"ShowContent('{$diaCorrente}','{$mes}','{$ano}','{$nome}'); return true;\""; |
612 | 617 | $mouseout = "onmouseout=\"HideContent(event,'{$diaCorrente}','{$mes}','{$ano}','{$nome}')\" "; |
613 | 618 | $mensagens .= " |
... | ... | @@ -713,8 +718,53 @@ class clsCalendario |
713 | 718 | $calendario .= '</td></tr>'; |
714 | 719 | $calendario .= '</table></div>'; |
715 | 720 | |
716 | - $calendario .= $mensagens; | |
721 | + if (isset($mensagens)) { | |
722 | + $calendario .= $mensagens; | |
723 | + } | |
717 | 724 | |
718 | 725 | return $calendario; |
719 | 726 | } |
727 | + | |
728 | + /** | |
729 | + * Gera campos hidden para o formulário do calendário. | |
730 | + * | |
731 | + * Exemplo de uso: | |
732 | + * | |
733 | + * <code> | |
734 | + * <?php | |
735 | + * $formValues = array( | |
736 | + * 'formFieldKey' => 'formFieldValue' | |
737 | + * ); | |
738 | + * print $this->_generateFormValues($formValues); | |
739 | + * // <input id="cal_formFieldKey" name="formFieldKey" type="hidden" value="formFieldValue" /> | |
740 | + * </code> | |
741 | + * | |
742 | + * @access protected | |
743 | + * @param array $formValues Array associativo onde a chave torna-se o | |
744 | + * o valor dos atributos id e name do campo hidden. | |
745 | + * @param array $invalidNames Array com nomes inválidos para campos. Útil | |
746 | + * para evitar que sejam criados campos duplicados. | |
747 | + * @return string String com o HTML dos campos hidden gerados. | |
748 | + * @since Método disponível desde a versão 1.2.0 | |
749 | + * @todo Refatorar código de geração de html para uma classe externa. | |
750 | + */ | |
751 | + function _generateFormValues($formValues = array(), $invalidNames = array()) | |
752 | + { | |
753 | + $ret = ''; | |
754 | + | |
755 | + if (is_array($formValues) && 0 < count($formValues)) { | |
756 | + foreach ($formValues as $name => $value) { | |
757 | + if (in_array($name, $invalidNames)) { | |
758 | + continue; | |
759 | + } | |
760 | + | |
761 | + $ret .= sprintf( | |
762 | + '<input id="cal_%s" name="%s" type="hidden" value="%s" />', | |
763 | + $name, $name, $value | |
764 | + ); | |
765 | + } | |
766 | + } | |
767 | + | |
768 | + return $ret; | |
769 | + } | |
720 | 770 | } |
721 | 771 | \ No newline at end of file | ... | ... |
ieducar/intranet/educar_ano_letivo_modulo_cad.php
... | ... | @@ -33,6 +33,8 @@ require_once 'include/clsCadastro.inc.php'; |
33 | 33 | require_once 'include/clsBanco.inc.php'; |
34 | 34 | require_once 'include/pmieducar/geral.inc.php'; |
35 | 35 | |
36 | +require_once 'App/Date/Utils.php'; | |
37 | + | |
36 | 38 | /** |
37 | 39 | * clsIndexBase class. |
38 | 40 | * |
... | ... | @@ -280,12 +282,16 @@ class indice extends clsCadastro |
280 | 282 | |
281 | 283 | if ($this->ano_letivo_modulo) { |
282 | 284 | $obj = new clsPmieducarEscolaAnoLetivo($this->ref_ref_cod_escola, |
283 | - $this->ref_ano, $this->pessoa_logada, NULL, 0, NULL, NULL, 1 | |
285 | + $this->ref_ano, $this->pessoa_logada, NULL, 0, NULL, NULL, 1 | |
284 | 286 | ); |
285 | 287 | |
286 | 288 | $cadastrou = $obj->cadastra(); |
287 | 289 | |
288 | 290 | if ($cadastrou) { |
291 | + if (FALSE == $this->_verificaModuloDatas($this->ano_letivo_modulo)) { | |
292 | + return FALSE; | |
293 | + } | |
294 | + | |
289 | 295 | foreach ($this->ano_letivo_modulo as $campo) { |
290 | 296 | $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']); |
291 | 297 | $campo['data_fim_'] = dataToBanco($campo['data_fim_']); |
... | ... | @@ -336,6 +342,10 @@ class indice extends clsCadastro |
336 | 342 | $excluiu = $obj->excluirTodos(); |
337 | 343 | |
338 | 344 | if ($excluiu) { |
345 | + if (FALSE == $this->_verificaModuloDatas($this->ano_letivo_modulo)) { | |
346 | + return FALSE; | |
347 | + } | |
348 | + | |
339 | 349 | foreach ($this->ano_letivo_modulo as $campo) { |
340 | 350 | $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']); |
341 | 351 | $campo['data_fim_'] = dataToBanco($campo['data_fim_']); |
... | ... | @@ -397,6 +407,33 @@ class indice extends clsCadastro |
397 | 407 | $this->mensagem = 'Exclusão não realizada.<br />'; |
398 | 408 | return FALSE; |
399 | 409 | } |
410 | + | |
411 | + /** | |
412 | + * Verifica se ao menos uma das datas as datas de início dos módulos é do | |
413 | + * mesmo ano letivo da escola. Em caso de erro, configura a mensagem de | |
414 | + * erro que é retornado pelo formulário. | |
415 | + * | |
416 | + * @access private | |
417 | + * @param array $modulos O array associativo recebido via POST pelo formulário. | |
418 | + * @return bool FALSE caso nenhuma das datas esteja no mesmo ano letivo da escola. | |
419 | + */ | |
420 | + function _verificaModuloDatas(array $modulos) | |
421 | + { | |
422 | + $dates = array(); | |
423 | + foreach ($modulos as $modulo) { | |
424 | + $dates[] = $modulo['data_inicio_']; | |
425 | + } | |
426 | + | |
427 | + try { | |
428 | + App_Date_Utils::datesYearAtLeast($dates, $this->ref_ano, 1); | |
429 | + } | |
430 | + catch (App_Date_Exception $e) { | |
431 | + $this->mensagem = $e->getMessage(); | |
432 | + return FALSE; | |
433 | + } | |
434 | + | |
435 | + return TRUE; | |
436 | + } | |
400 | 437 | } |
401 | 438 | |
402 | 439 | // Instancia objeto de página |
... | ... | @@ -412,37 +449,43 @@ $pagina->addForm($miolo); |
412 | 449 | $pagina->MakeAll(); |
413 | 450 | ?> |
414 | 451 | <script type="text/javascript"> |
452 | +/** | |
453 | + * Realiza validação client-side do formulário. | |
454 | + */ | |
415 | 455 | function incluir() |
416 | 456 | { |
417 | - if (new Date(document.getElementById('data_fim').value) > new Date(document.getElementById('data_inicio').value)) | |
457 | + var phpjs = ied_phpjs.getInstance(); | |
458 | + var startDate = null; | |
459 | + var endDate = null; | |
460 | + | |
461 | + startDate = document.getElementById('data_inicio').value.split('/'); | |
462 | + endDate = document.getElementById('data_fim').value.split('/'); | |
463 | + | |
464 | + if ('' === document.getElementById('ref_cod_modulo').value) { | |
465 | + alert('É necessário selecionar um "módulo".'); | |
466 | + return false; | |
467 | + } | |
418 | 468 | |
419 | - if (! (/(((0[1-9]|[12][0-9])\/(02))|((0[1-9]|[12][0-9]|(30))\/(0[4689]|(11)))|((0[1-9]|[12][0-9]|3[01])\/(0[13578]|(10)|(12))))\/[1-2][0-9]{3}/.test( document.getElementById("data_inicio").value ))) { | |
420 | - mudaClassName('formdestaque', 'obrigatorio'); | |
469 | + if (!phpjs.checkdate(startDate[1], startDate[0], startDate[2])) { | |
421 | 470 | document.getElementById('data_inicio').className = 'formdestaque'; |
422 | 471 | alert('Preencha o campo "Data Início" corretamente!'); |
423 | - | |
424 | 472 | document.getElementById('data_inicio').focus(); |
425 | 473 | return false; |
426 | 474 | } |
427 | 475 | |
428 | - if (!(/(((0[1-9]|[12][0-9])\/(02))|((0[1-9]|[12][0-9]|(30))\/(0[4689]|(11)))|((0[1-9]|[12][0-9]|3[01])\/(0[13578]|(10)|(12))))\/[1-2][0-9]{3}/.test( document.getElementById("data_fim").value ))) { | |
429 | - mudaClassName('formdestaque', 'obrigatorio'); | |
476 | + if (!phpjs.checkdate(endDate[1], endDate[0], endDate[2])) { | |
430 | 477 | document.getElementById('data_fim').className = 'formdestaque'; |
431 | 478 | alert('Preencha o campo "Data Fim" corretamente!'); |
432 | - | |
433 | 479 | document.getElementById('data_fim').focus(); |
434 | 480 | return false; |
435 | 481 | } |
436 | 482 | |
437 | - var dt1 = document.getElementById('data_inicio').value.split('/'); | |
438 | - var dt2 = document.getElementById('data_fim').value.split('/'); | |
439 | - | |
440 | - var data_ini = new Date(parseInt(dt1[2]), parseInt(dt1[1], 10), parseInt(dt1[0], 10)); | |
441 | - var data_fim = new Date(parseInt(dt2[2]), parseInt(dt2[1], 10), parseInt(dt2[0], 10)); | |
483 | + startDate = new Date(parseInt(startDate[2], 10), parseInt(startDate[1], 10) - 1, parseInt(startDate[0], 10)); | |
484 | + endDate = new Date(parseInt(endDate[2], 10), parseInt(endDate[1], 10) - 1, parseInt(endDate[0], 10)); | |
442 | 485 | |
443 | - if (data_ini > data_fim || parseInt(dt1[2]) != parseInt(dt2[2])) { | |
444 | - alert( 'Datas incorretas!\n1- Verifique se as datas são do mesmo ano.\n2- Verifique se a "Data Fim" é maior que a "Data Início".'); | |
445 | - return; | |
486 | + if (endDate < startDate) { | |
487 | + alert('"Data Início" não pode ser posterior a "Data Fim".'); | |
488 | + return false; | |
446 | 489 | } |
447 | 490 | |
448 | 491 | document.getElementById('incluir_modulo').value = 'S'; | ... | ... |
ieducar/intranet/educar_calendario_ano_letivo_lst.php
... | ... | @@ -118,11 +118,11 @@ class indice extends clsConfig |
118 | 118 | <tbody>'; |
119 | 119 | |
120 | 120 | if ($_POST) { |
121 | - $this->ref_cod_escola = $_POST['ref_cod_escola'] ? | |
122 | - $_POST['ref_cod_escola'] : $_SESSION['calendario']['ref_cod_escola']; | |
121 | + $this->ref_cod_escola = $_POST['ref_cod_escola'] ? | |
122 | + $_POST['ref_cod_escola'] : $_SESSION['calendario']['ref_cod_escola']; | |
123 | 123 | |
124 | - $this->ref_cod_instituicao = $_POST['ref_cod_instituicao'] ? | |
125 | - $_POST['ref_cod_instituicao'] : $_SESSION['calendario']['ref_cod_instituicao']; | |
124 | + $this->ref_cod_instituicao = $_POST['ref_cod_instituicao'] ? | |
125 | + $_POST['ref_cod_instituicao'] : $_SESSION['calendario']['ref_cod_instituicao']; | |
126 | 126 | |
127 | 127 | if ($_POST['mes']) { |
128 | 128 | $this->mes = $_POST['mes']; |
... | ... | @@ -131,19 +131,15 @@ class indice extends clsConfig |
131 | 131 | if ($_POST['ano']) { |
132 | 132 | $this->ano = $_POST['ano']; |
133 | 133 | } |
134 | - } | |
135 | - else { | |
136 | - if ($_GET){ | |
137 | - // passa todos os valores obtidos no GET para atributos do objeto | |
138 | - foreach($_GET as $var => $val) { | |
139 | - $this->$var = ( $val === "" ) ? NULL: $val; | |
140 | - } | |
134 | + | |
135 | + if ($_POST['cod_calendario_ano_letivo']) { | |
136 | + $this->cod_calendario_ano_letivo = $_POST['cod_calendario_ano_letivo']; | |
141 | 137 | } |
142 | - elseif ($_SESSION['calendario']) { | |
143 | - // passa todos os valores em SESSION para atributos do objeto | |
144 | - foreach ($_SESSION['calendario'] as $var => $val) { | |
145 | - $this->$var = ($val === '') ? NULL : $val; | |
146 | - } | |
138 | + } | |
139 | + elseif (isset($_SESSION['calendario'])) { | |
140 | + // passa todos os valores em SESSION para atributos do objeto | |
141 | + foreach ($_SESSION['calendario'] as $var => $val) { | |
142 | + $this->$var = ($val === '') ? NULL : $val; | |
147 | 143 | } |
148 | 144 | } |
149 | 145 | |
... | ... | @@ -159,49 +155,6 @@ class indice extends clsConfig |
159 | 155 | $this->ano = date('Y'); |
160 | 156 | } |
161 | 157 | |
162 | - $obj_cal = new clsPmieducarCalendarioAnoLetivo(); | |
163 | - | |
164 | - if ($this->ref_cod_escola && $this->ano) { | |
165 | - if ($obj_cal->lista(NULL, $this->ref_cod_escola, NULL, NULL, | |
166 | - $this->ano, NULL, NULL, NULL, NULL, 1) | |
167 | - ) { | |
168 | - $_SESSION['calendario']['ultimo_valido'] = 1; | |
169 | - | |
170 | - if ($this->ref_cod_escola) { | |
171 | - $_SESSION['calendario']['ref_cod_escola'] = $this->ref_cod_escola; | |
172 | - } | |
173 | - | |
174 | - if ($this->ref_cod_instituicao) { | |
175 | - $_SESSION['calendario']['ref_cod_instituicao'] = $this->ref_cod_instituicao; | |
176 | - } | |
177 | - | |
178 | - if ($this->ano) { | |
179 | - $_SESSION['calendario']['ano'] = $this->ano; | |
180 | - } | |
181 | - | |
182 | - if ($this->mes) { | |
183 | - $_SESSION['calendario']['mes'] = $this->mes; | |
184 | - } | |
185 | - } | |
186 | - } | |
187 | - elseif (! $_POST) { | |
188 | - if ($_SESSION['calendario']['ref_cod_escola']) { | |
189 | - $this->ref_cod_escola = $_SESSION["calendario"]["ref_cod_escola"]; | |
190 | - } | |
191 | - | |
192 | - if ($_SESSION['calendario']['ref_cod_instituicao']) { | |
193 | - $this->ref_cod_instituicao = $_SESSION['calendario']['ref_cod_instituicao']; | |
194 | - } | |
195 | - | |
196 | - if ($_SESSION['calendario']['mes']) { | |
197 | - $this->ano = $_SESSION['calendario']['mes']; | |
198 | - } | |
199 | - | |
200 | - if ($_SESSION['calendario']['mes']) { | |
201 | - $this->mes = $_SESSION['calendario']['mes']; | |
202 | - } | |
203 | - } | |
204 | - | |
205 | 158 | $nivel_usuario = $obj_permissoes->nivel_acesso($this->pessoa_logada); |
206 | 159 | |
207 | 160 | if (! $this->ref_cod_escola) { |
... | ... | @@ -234,22 +187,14 @@ class indice extends clsConfig |
234 | 187 | } |
235 | 188 | |
236 | 189 | $lista = $obj_calendario_ano_letivo->lista( |
237 | - NULL, | |
190 | + $this->cod_calendario_ano_letivo, | |
238 | 191 | $this->ref_cod_escola, |
239 | 192 | NULL, |
240 | 193 | NULL, |
241 | - $this->ano, | |
242 | - NULL, | |
243 | - NULL, | |
244 | - 1, | |
245 | - NULL, | |
246 | - NULL, | |
194 | + (!isset($this->cod_calendario_ano_letivo) ? $this->ano : NULL), | |
247 | 195 | NULL, |
248 | 196 | NULL, |
249 | - NULL, | |
250 | - NULL, | |
251 | - NULL, | |
252 | - NULL | |
197 | + 1 | |
253 | 198 | ); |
254 | 199 | break; |
255 | 200 | } |
... | ... | @@ -270,33 +215,32 @@ class indice extends clsConfig |
270 | 215 | } |
271 | 216 | } |
272 | 217 | |
273 | - | |
274 | 218 | // Monta a lista |
275 | 219 | if (is_array($lista) && count($lista)) { |
276 | 220 | foreach ($lista as $key => $registro) { |
277 | - $registro['inicio_ano_letivo_time'] = strtotime(substr($registro['inicio_ano_letivo'], 0, 16)); | |
278 | - $registro['inicio_ano_letivo_br'] = date('d/m/Y', $registro['inicio_ano_letivo_time']); | |
279 | - $registro['termino_ano_letivo_time'] = strtotime(substr($registro['termino_ano_letivo'], 0, 16)); | |
280 | - $registro['termino_ano_letivo_br'] = date('d/m/Y', $registro['termino_ano_letivo_time']); | |
281 | - | |
282 | - // Pega detalhes de foreign_keys | |
283 | - if (class_exists('clsPmieducarEscola')) { | |
284 | - $obj_ref_cod_escola = new clsPmieducarEscola($registro['ref_cod_escola']); | |
285 | - $det_ref_cod_escola = $obj_ref_cod_escola->detalhe(); | |
286 | - $registro['nm_escola'] = $det_ref_cod_escola['nome']; | |
287 | - } | |
288 | - else { | |
289 | - $registro['ref_cod_escola'] = 'Erro na geração'; | |
290 | - } | |
221 | + // Guarda dados na $_SESSION | |
222 | + $_SESSION['calendario'] = array( | |
223 | + 'cod_calendario_ano_letivo' => $registro['cod_calendario_ano_letivo'], | |
224 | + 'ref_cod_instituicao' => $this->ref_cod_instituicao, | |
225 | + 'ref_cod_escola' => $this->ref_cod_escola, | |
226 | + 'ano' => $this->ano, | |
227 | + 'mes' => $this->mes | |
228 | + ); | |
291 | 229 | |
230 | + // Nome da escola | |
231 | + $obj_ref_cod_escola = new clsPmieducarEscola($registro['ref_cod_escola']); | |
232 | + $det_ref_cod_escola = $obj_ref_cod_escola->detalhe(); | |
233 | + $registro['nm_escola'] = $det_ref_cod_escola['nome']; | |
234 | + | |
235 | + // Início e término do ano letivo. | |
292 | 236 | $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo(); |
293 | 237 | |
294 | 238 | $inicio_ano = $obj_ano_letivo_modulo->menorData( |
295 | - $this->ano, $this->ref_cod_escola | |
239 | + $registro['ano'], $this->ref_cod_escola | |
296 | 240 | ); |
297 | 241 | |
298 | 242 | $fim_ano = $obj_ano_letivo_modulo->maiorData( |
299 | - $this->ano, $this->ref_cod_escola | |
243 | + $registro['ano'], $this->ref_cod_escola | |
300 | 244 | ); |
301 | 245 | |
302 | 246 | $inicio_ano = explode('/', dataFromPgToBr($inicio_ano)); |
... | ... | @@ -391,12 +335,12 @@ class indice extends clsConfig |
391 | 335 | } |
392 | 336 | |
393 | 337 | if ($this->mes <= (int) $inicio_ano[1] && $this->ano == (int) $inicio_ano[2]) { |
394 | - if ($this->mes == (int)$inicio_ano[1] ){ | |
338 | + if ($this->mes == (int) $inicio_ano[1]) { | |
395 | 339 | $obj_calendario->adicionarLegenda('Início Ano Letivo', 'AMARELO'); |
396 | 340 | $obj_calendario->adicionarArrayDias('Início Ano Letivo', array($inicio_ano[0])); |
397 | 341 | } |
398 | 342 | |
399 | - $dia_inicio = (int)$inicio_ano[0]; | |
343 | + $dia_inicio = (int) $inicio_ano[0]; | |
400 | 344 | $dias = array(); |
401 | 345 | |
402 | 346 | if ($this->mes < (int) $inicio_ano[1]) { |
... | ... | @@ -414,6 +358,7 @@ class indice extends clsConfig |
414 | 358 | } |
415 | 359 | else { |
416 | 360 | $dia_inicio; |
361 | + | |
417 | 362 | for ($d = 1 ; $d < $dia_inicio ; $d++) { |
418 | 363 | $dias[] = $d; |
419 | 364 | } |
... | ... | @@ -470,7 +415,7 @@ class indice extends clsConfig |
470 | 415 | |
471 | 416 | $obj_anotacao = new clsPmieducarCalendarioDiaAnotacao(); |
472 | 417 | $lista_anotacoes = $obj_anotacao->lista( |
473 | - NULL, $this->mes,$registro['cod_calendario_ano_letivo'], NULL, 1 | |
418 | + NULL, $this->mes, $registro['cod_calendario_ano_letivo'], NULL, 1 | |
474 | 419 | ); |
475 | 420 | |
476 | 421 | if ($lista_anotacoes) { |
... | ... | @@ -489,8 +434,10 @@ class indice extends clsConfig |
489 | 434 | $registro['cod_calendario_ano_letivo'] |
490 | 435 | ); |
491 | 436 | |
437 | + // Gera código HTML do calendário | |
492 | 438 | $calendario = $obj_calendario->getCalendario( |
493 | - $this->mes, $registro['ano'], 'mes_corrente', $_GET | |
439 | + $this->mes, $this->ano, 'mes_corrente', $_GET, | |
440 | + array('cod_calendario_ano_letivo' => $registro['cod_calendario_ano_letivo']) | |
494 | 441 | ); |
495 | 442 | |
496 | 443 | $retorno .= sprintf( | ... | ... |
ieducar/intranet/scripts/calendario.js
... | ... | @@ -278,10 +278,10 @@ function tamanhoTela() |
278 | 278 | |
279 | 279 | function acaoCalendario(nome, dia, mes, ano) |
280 | 280 | { |
281 | - document.getElementById('nome').value = nome; | |
282 | - document.getElementById('dia').value = dia; | |
283 | - document.getElementById('mes').value = mes; | |
284 | - document.form_calendario.ano.value = ano; | |
281 | + document.getElementById('cal_nome').value = nome; | |
282 | + document.getElementById('cal_dia').value = dia; | |
283 | + document.getElementById('cal_mes').value = mes; | |
284 | + document.getElementById('cal_ano').value = ano; | |
285 | 285 | |
286 | - document.form_calendario.submit(); | |
286 | + document.getElementById('form_calendario').submit(); | |
287 | 287 | } |
288 | 288 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,45 @@ |
1 | +<?php | |
2 | + | |
3 | +/** | |
4 | + * i-Educar - Sistema de gestão escolar | |
5 | + * | |
6 | + * Copyright (C) 2006 Prefeitura Municipal de Itajaí | |
7 | + * <ctima@itajai.sc.gov.br> | |
8 | + * | |
9 | + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo | |
10 | + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free | |
11 | + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) | |
12 | + * qualquer versão posterior. | |
13 | + * | |
14 | + * Este programa é distribuído na expectativa de que seja útil, porém, SEM | |
15 | + * NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU | |
16 | + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral | |
17 | + * do GNU para mais detalhes. | |
18 | + * | |
19 | + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto | |
20 | + * com este programa; se não, escreva para a Free Software Foundation, Inc., no | |
21 | + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. | |
22 | + * | |
23 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
24 | + * @category i-Educar | |
25 | + * @license @@license@@ | |
26 | + * @package App_Date | |
27 | + * @since Arquivo disponível desde a versão 1.2.0 | |
28 | + * @version $Id$ | |
29 | + */ | |
30 | + | |
31 | +require_once 'CoreExt/Exception.php'; | |
32 | + | |
33 | +/** | |
34 | + * App_Date_Exception class. | |
35 | + * | |
36 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
37 | + * @category i-Educar | |
38 | + * @license @@license@@ | |
39 | + * @package App_Date | |
40 | + * @since Classe disponível desde a versão 1.2.0 | |
41 | + * @version @@package_version@@ | |
42 | + */ | |
43 | +class App_Date_Exception extends CoreExt_Exception | |
44 | +{ | |
45 | +} | |
0 | 46 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,92 @@ |
1 | +<?php | |
2 | + | |
3 | +/** | |
4 | + * i-Educar - Sistema de gestão escolar | |
5 | + * | |
6 | + * Copyright (C) 2006 Prefeitura Municipal de Itajaí | |
7 | + * <ctima@itajai.sc.gov.br> | |
8 | + * | |
9 | + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo | |
10 | + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free | |
11 | + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) | |
12 | + * qualquer versão posterior. | |
13 | + * | |
14 | + * Este programa é distribuído na expectativa de que seja útil, porém, SEM | |
15 | + * NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU | |
16 | + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral | |
17 | + * do GNU para mais detalhes. | |
18 | + * | |
19 | + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto | |
20 | + * com este programa; se não, escreva para a Free Software Foundation, Inc., no | |
21 | + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. | |
22 | + * | |
23 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
24 | + * @category i-Educar | |
25 | + * @license @@license@@ | |
26 | + * @package App_Date | |
27 | + * @since Arquivo disponível desde a versão 1.1.0 | |
28 | + * @version $Id$ | |
29 | + */ | |
30 | + | |
31 | +require_once 'App/Date/Exception.php'; | |
32 | + | |
33 | +/** | |
34 | + * App_Date_Utils class. | |
35 | + * | |
36 | + * Possui métodos | |
37 | + * | |
38 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
39 | + * @category i-Educar | |
40 | + * @license @@license@@ | |
41 | + * @package App_Date | |
42 | + * @since Classe disponível desde a versão 1.2.0 | |
43 | + * @version @@package_version@@ | |
44 | + */ | |
45 | +class App_Date_Utils | |
46 | +{ | |
47 | + /** | |
48 | + * Retorna o ano de uma string nos formatos dd/mm/yyyy e dd/mm/yyyy hh:ii:ss. | |
49 | + * @param string $date | |
50 | + * @param int | |
51 | + */ | |
52 | + public static function getYear($date) | |
53 | + { | |
54 | + $parts = explode('/', $date); | |
55 | + $year = explode(' ', $parts[2]); | |
56 | + | |
57 | + if (is_array($year)) { | |
58 | + $year = $year[0]; | |
59 | + } | |
60 | + | |
61 | + return (int) $year; | |
62 | + } | |
63 | + | |
64 | + /** | |
65 | + * Verifica se ao menos uma das datas de um array é do ano especificado. | |
66 | + * @param array $dates Datas nos formatos dd/mm/yyyy [hh:ii:ss]. | |
67 | + * @param int $year Ano esperado. | |
68 | + * @param int $at Quantidade mínima de datas esperadas no ano $year. | |
69 | + * @return bool TRUE se ao menos uma das datas estiver no ano esperado. | |
70 | + * @throws App_Date_Exception | |
71 | + */ | |
72 | + public static function datesYearAtLeast(array $dates, $year, $at = 1) | |
73 | + { | |
74 | + $matches = 0; | |
75 | + | |
76 | + foreach ($dates as $date) { | |
77 | + $dateYear = self::getYear($date); | |
78 | + if ($year == $dateYear) { | |
79 | + $matches++; | |
80 | + } | |
81 | + } | |
82 | + | |
83 | + if ($matches >= $at) { | |
84 | + return TRUE; | |
85 | + } | |
86 | + | |
87 | + throw new App_Date_Exception(sprintf( | |
88 | + 'Ao menos "%d" das datas informadas deve ser do ano "%d". Datas: "%s".', | |
89 | + $at, $year, implode('", "', $dates) | |
90 | + )); | |
91 | + } | |
92 | +} | |
0 | 93 | \ No newline at end of file | ... | ... |
ieducar/tests/unit/App/AllTests.php
... | ... | @@ -29,6 +29,7 @@ |
29 | 29 | * @version $Id$ |
30 | 30 | */ |
31 | 31 | |
32 | +require_once 'App/Date/AllTests.php'; | |
32 | 33 | require_once 'App/Model/AllTests.php'; |
33 | 34 | require_once 'App/Service/AllTests.php'; |
34 | 35 | |
... | ... | @@ -50,6 +51,7 @@ class App_AllTests |
50 | 51 | public static function suite() |
51 | 52 | { |
52 | 53 | $suite = new PHPUnit_Framework_TestSuite('Suíte de testes unitários de App'); |
54 | + $suite->addTest(App_Date_AllTests::suite()); | |
53 | 55 | $suite->addTest(App_Model_AllTests::suite()); |
54 | 56 | $suite->addTest(App_Service_AllTests::suite()); |
55 | 57 | return $suite; | ... | ... |
... | ... | @@ -0,0 +1,55 @@ |
1 | +<?php | |
2 | + | |
3 | +/** | |
4 | + * i-Educar - Sistema de gestão escolar | |
5 | + * | |
6 | + * Copyright (C) 2006 Prefeitura Municipal de Itajaí | |
7 | + * <ctima@itajai.sc.gov.br> | |
8 | + * | |
9 | + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo | |
10 | + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free | |
11 | + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) | |
12 | + * qualquer versão posterior. | |
13 | + * | |
14 | + * Este programa é distribuído na expectativa de que seja útil, porém, SEM | |
15 | + * NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU | |
16 | + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral | |
17 | + * do GNU para mais detalhes. | |
18 | + * | |
19 | + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto | |
20 | + * com este programa; se não, escreva para a Free Software Foundation, Inc., no | |
21 | + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. | |
22 | + * | |
23 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
24 | + * @category i-Educar | |
25 | + * @license @@license@@ | |
26 | + * @package App_Model | |
27 | + * @subpackage UnitTests | |
28 | + * @since Arquivo disponível desde a versão 1.2.0 | |
29 | + * @version $Id$ | |
30 | + */ | |
31 | + | |
32 | +/** | |
33 | + * App_Date_AllTests class. | |
34 | + * | |
35 | + * Arquivo de definição de suíte para o pacote App_Date. | |
36 | + * | |
37 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
38 | + * @category i-Educar | |
39 | + * @license @@license@@ | |
40 | + * @package App_Date | |
41 | + * @subpackage UnitTests | |
42 | + * @since Classe disponível desde a versão 1.2.0 | |
43 | + * @version @@package_version@@ | |
44 | + */ | |
45 | +class App_Date_AllTests extends TestCollector | |
46 | +{ | |
47 | + protected $_name = 'Suíte de testes unitários de App_Date'; | |
48 | + protected $_file = __FILE__; | |
49 | + | |
50 | + public static function suite() | |
51 | + { | |
52 | + $instance = new self(); | |
53 | + return $instance->addDirectoryTests(); | |
54 | + } | |
55 | +} | |
0 | 56 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,71 @@ |
1 | +<?php | |
2 | + | |
3 | +/** | |
4 | + * i-Educar - Sistema de gestão escolar | |
5 | + * | |
6 | + * Copyright (C) 2006 Prefeitura Municipal de Itajaí | |
7 | + * <ctima@itajai.sc.gov.br> | |
8 | + * | |
9 | + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo | |
10 | + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free | |
11 | + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) | |
12 | + * qualquer versão posterior. | |
13 | + * | |
14 | + * Este programa é distribuído na expectativa de que seja útil, porém, SEM | |
15 | + * NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU | |
16 | + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral | |
17 | + * do GNU para mais detalhes. | |
18 | + * | |
19 | + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto | |
20 | + * com este programa; se não, escreva para a Free Software Foundation, Inc., no | |
21 | + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. | |
22 | + * | |
23 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
24 | + * @category i-Educar | |
25 | + * @license @@license@@ | |
26 | + * @package App_Date | |
27 | + * @subpackage UnitTests | |
28 | + * @since Arquivo disponível desde a versão 1.2.0 | |
29 | + * @version $Id$ | |
30 | + */ | |
31 | + | |
32 | +require_once 'App/Date/Utils.php'; | |
33 | + | |
34 | +/** | |
35 | + * App_Date_UtilsTest class. | |
36 | + * | |
37 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
38 | + * @category i-Educar | |
39 | + * @license @@license@@ | |
40 | + * @package App_Date | |
41 | + * @subpackage UnitTests | |
42 | + * @since Classe disponível desde a versão 1.2.0 | |
43 | + * @version @@package_version@@ | |
44 | + */ | |
45 | +class App_Date_UtilsTest extends UnitBaseTest | |
46 | +{ | |
47 | + public function testDatesYearAtLeast() | |
48 | + { | |
49 | + $dates = array( | |
50 | + '01/01/2000', | |
51 | + '01/02/2000' | |
52 | + ); | |
53 | + | |
54 | + try { | |
55 | + App_Date_Utils::datesYearAtLeast($dates, 2001, 1); | |
56 | + $this->fail('::datesYearAtLeast() deveria lançar App_Date_Exception.'); | |
57 | + } | |
58 | + catch (App_Date_Exception $e) { | |
59 | + $this->assertEquals( | |
60 | + 'Ao menos "1" das datas informadas deve ser do ano "2001". Datas: "01/01/2000", "01/02/2000".', | |
61 | + $e->getMessage(), | |
62 | + '' | |
63 | + ); | |
64 | + } | |
65 | + | |
66 | + $this->assertTrue( | |
67 | + App_Date_Utils::datesYearAtLeast($dates, 2000, 2), | |
68 | + '::datesYearAtLeast() retorna "TRUE" quando uma das datas é do ano esperado.' | |
69 | + ); | |
70 | + } | |
71 | +} | |
0 | 72 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,64 @@ |
1 | +<?php | |
2 | + | |
3 | +/** | |
4 | + * i-Educar - Sistema de gestão escolar | |
5 | + * | |
6 | + * Copyright (C) 2006 Prefeitura Municipal de Itajaí | |
7 | + * <ctima@itajai.sc.gov.br> | |
8 | + * | |
9 | + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo | |
10 | + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free | |
11 | + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) | |
12 | + * qualquer versão posterior. | |
13 | + * | |
14 | + * Este programa é distribuído na expectativa de que seja útil, porém, SEM | |
15 | + * NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU | |
16 | + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral | |
17 | + * do GNU para mais detalhes. | |
18 | + * | |
19 | + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto | |
20 | + * com este programa; se não, escreva para a Free Software Foundation, Inc., no | |
21 | + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. | |
22 | + * | |
23 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
24 | + * @category i-Educar | |
25 | + * @license @@license@@ | |
26 | + * @package Core | |
27 | + * @subpackage UnitTests | |
28 | + * @since Arquivo disponível desde a versão 1.2.0 | |
29 | + * @version $Id$ | |
30 | + */ | |
31 | + | |
32 | +require_once 'clsCalendario.inc.php'; | |
33 | + | |
34 | +/** | |
35 | + * ClsCalendarioTest class. | |
36 | + * | |
37 | + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
38 | + * @category i-Educar | |
39 | + * @license @@license@@ | |
40 | + * @package Ied_Include | |
41 | + * @subpackage UnitTests | |
42 | + * @since Classe disponível desde a versão 1.2.0 | |
43 | + * @todo Mover para diretório Ied | |
44 | + * @version @@package_version@@ | |
45 | + */ | |
46 | +class ClsCalendarioTest extends UnitBaseTest | |
47 | +{ | |
48 | + public function testGenerateFormValues() | |
49 | + { | |
50 | + $formValues = array( | |
51 | + 'formFieldKey' => 'formFieldValue' | |
52 | + ); | |
53 | + | |
54 | + $calendario = new clsCalendario(); | |
55 | + | |
56 | + // Teste sem permissão de troca de ano | |
57 | + $html = $calendario->getCalendario(1, 2000, 'testGenerateFormValues', array(), $formValues); | |
58 | + | |
59 | + $this->assertRegExp( | |
60 | + '/<input id="cal_formFieldKey" name="formFieldKey" type="hidden" value="formFieldValue" \/>/', | |
61 | + $html, '->getCalendario() gera campos extras de formulário.' | |
62 | + ); | |
63 | + } | |
64 | +} | |
0 | 65 | \ No newline at end of file | ... | ... |