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 | ... | ... |