Commit fe9bb20e7b33e727c0ab4f2836e3c97ce9968e91

Authored by Eriksen Costa Paixão
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
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 &#39;include/clsCadastro.inc.php&#39;;
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-&gt;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
... ...
ieducar/lib/App/Date/Exception.php 0 → 100644
... ... @@ -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
... ...
ieducar/lib/App/Date/Utils.php 0 → 100644
... ... @@ -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;
... ...
ieducar/tests/unit/App/Date/AllTests.php 0 → 100644
... ... @@ -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
... ...
ieducar/tests/unit/App/Date/UtilsTest.php 0 → 100644
... ... @@ -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
... ...
ieducar/tests/unit/Core/Include/ClsCalendarioTest.php 0 → 100644
... ... @@ -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
... ...