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,10 +297,11 @@ class clsCalendario
297 * @todo Substituir código de geração de calendário por uma biblioteca 297 * @todo Substituir código de geração de calendário por uma biblioteca
298 * com licença compatível com GPL2 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 if ( 306 if (
306 isset($mixVariaveisMantidas["{$nome}_mes"]) && 307 isset($mixVariaveisMantidas["{$nome}_mes"]) &&
@@ -354,7 +355,7 @@ class clsCalendario @@ -354,7 +355,7 @@ class clsCalendario
354 355
355 // Create the table tag opener and day headers 356 // Create the table tag opener and day headers
356 // GET 357 // GET
357 - $linkFixo = $strUrl . "?"; 358 + $linkFixo = '?';
358 if (is_array($mixVariaveisMantidas)) { 359 if (is_array($mixVariaveisMantidas)) {
359 foreach ($mixVariaveisMantidas as $key => $value) { 360 foreach ($mixVariaveisMantidas as $key => $value) {
360 if ($key != "{$nome}_mes" && $key != "{$nome}_ano") { 361 if ($key != "{$nome}_mes" && $key != "{$nome}_ano") {
@@ -427,11 +428,15 @@ class clsCalendario @@ -427,11 +428,15 @@ class clsCalendario
427 428
428 $form = sprintf(' 429 $form = sprintf('
429 <form id="form_calendario" name="form_calendario" method="post" action="%s"> 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 if ($this->permite_trocar_ano == TRUE) { 441 if ($this->permite_trocar_ano == TRUE) {
437 $select = sprintf( 442 $select = sprintf(
@@ -467,8 +472,8 @@ class clsCalendario @@ -467,8 +472,8 @@ class clsCalendario
467 <a href="#" onclick="acaoCalendario(\'%s\', \'\', \'%s\', \'%s\')"> 472 <a href="#" onclick="acaoCalendario(\'%s\', \'\', \'%s\', \'%s\')">
468 <img src="/intranet/imagens/i-educar/seta_esq.gif" border="0" style="margin-right: 5px;" alt="Mês Anterior"> 473 <img src="/intranet/imagens/i-educar/seta_esq.gif" border="0" style="margin-right: 5px;" alt="Mês Anterior">
469 </a> 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 $cab[] = sprintf(' 478 $cab[] = sprintf('
474 <a href="#" onclick="acaoCalendario(\'%s\', \'\', \'%s\', \'%s\')"> 479 <a href="#" onclick="acaoCalendario(\'%s\', \'\', \'%s\', \'%s\')">
@@ -568,7 +573,7 @@ class clsCalendario @@ -568,7 +573,7 @@ class clsCalendario
568 573
569 $style_dia = sprintf('background-color: %s;', $this->array_cor[0]); 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 $style_dia = sprintf('background-color: %s;', $this->array_cor_dia_padrao[$DiaSemana]); 577 $style_dia = sprintf('background-color: %s;', $this->array_cor_dia_padrao[$DiaSemana]);
573 578
574 if (key_exists($diaCorrente,$this->array_dias)) { 579 if (key_exists($diaCorrente,$this->array_dias)) {
@@ -607,7 +612,7 @@ class clsCalendario @@ -607,7 +612,7 @@ class clsCalendario
607 $diaCorrente_ = strlen($diaCorrente) == 1 ? '0' . $diaCorrente : $diaCorrente; 612 $diaCorrente_ = strlen($diaCorrente) == 1 ? '0' . $diaCorrente : $diaCorrente;
608 $NomeMes = strtolower($NomeMes); 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 $message = "onmouseover=\"ShowContent('{$diaCorrente}','{$mes}','{$ano}','{$nome}'); return true;\""; 616 $message = "onmouseover=\"ShowContent('{$diaCorrente}','{$mes}','{$ano}','{$nome}'); return true;\"";
612 $mouseout = "onmouseout=\"HideContent(event,'{$diaCorrente}','{$mes}','{$ano}','{$nome}')\" "; 617 $mouseout = "onmouseout=\"HideContent(event,'{$diaCorrente}','{$mes}','{$ano}','{$nome}')\" ";
613 $mensagens .= " 618 $mensagens .= "
@@ -713,8 +718,53 @@ class clsCalendario @@ -713,8 +718,53 @@ class clsCalendario
713 $calendario .= '</td></tr>'; 718 $calendario .= '</td></tr>';
714 $calendario .= '</table></div>'; 719 $calendario .= '</table></div>';
715 720
716 - $calendario .= $mensagens; 721 + if (isset($mensagens)) {
  722 + $calendario .= $mensagens;
  723 + }
717 724
718 return $calendario; 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 \ No newline at end of file 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,6 +33,8 @@ require_once &#39;include/clsCadastro.inc.php&#39;;
33 require_once 'include/clsBanco.inc.php'; 33 require_once 'include/clsBanco.inc.php';
34 require_once 'include/pmieducar/geral.inc.php'; 34 require_once 'include/pmieducar/geral.inc.php';
35 35
  36 +require_once 'App/Date/Utils.php';
  37 +
36 /** 38 /**
37 * clsIndexBase class. 39 * clsIndexBase class.
38 * 40 *
@@ -280,12 +282,16 @@ class indice extends clsCadastro @@ -280,12 +282,16 @@ class indice extends clsCadastro
280 282
281 if ($this->ano_letivo_modulo) { 283 if ($this->ano_letivo_modulo) {
282 $obj = new clsPmieducarEscolaAnoLetivo($this->ref_ref_cod_escola, 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 $cadastrou = $obj->cadastra(); 288 $cadastrou = $obj->cadastra();
287 289
288 if ($cadastrou) { 290 if ($cadastrou) {
  291 + if (FALSE == $this->_verificaModuloDatas($this->ano_letivo_modulo)) {
  292 + return FALSE;
  293 + }
  294 +
289 foreach ($this->ano_letivo_modulo as $campo) { 295 foreach ($this->ano_letivo_modulo as $campo) {
290 $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']); 296 $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']);
291 $campo['data_fim_'] = dataToBanco($campo['data_fim_']); 297 $campo['data_fim_'] = dataToBanco($campo['data_fim_']);
@@ -336,6 +342,10 @@ class indice extends clsCadastro @@ -336,6 +342,10 @@ class indice extends clsCadastro
336 $excluiu = $obj->excluirTodos(); 342 $excluiu = $obj->excluirTodos();
337 343
338 if ($excluiu) { 344 if ($excluiu) {
  345 + if (FALSE == $this->_verificaModuloDatas($this->ano_letivo_modulo)) {
  346 + return FALSE;
  347 + }
  348 +
339 foreach ($this->ano_letivo_modulo as $campo) { 349 foreach ($this->ano_letivo_modulo as $campo) {
340 $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']); 350 $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']);
341 $campo['data_fim_'] = dataToBanco($campo['data_fim_']); 351 $campo['data_fim_'] = dataToBanco($campo['data_fim_']);
@@ -397,6 +407,33 @@ class indice extends clsCadastro @@ -397,6 +407,33 @@ class indice extends clsCadastro
397 $this->mensagem = 'Exclusão não realizada.<br />'; 407 $this->mensagem = 'Exclusão não realizada.<br />';
398 return FALSE; 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 // Instancia objeto de página 439 // Instancia objeto de página
@@ -412,37 +449,43 @@ $pagina-&gt;addForm($miolo); @@ -412,37 +449,43 @@ $pagina-&gt;addForm($miolo);
412 $pagina->MakeAll(); 449 $pagina->MakeAll();
413 ?> 450 ?>
414 <script type="text/javascript"> 451 <script type="text/javascript">
  452 +/**
  453 + * Realiza validação client-side do formulário.
  454 + */
415 function incluir() 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 document.getElementById('data_inicio').className = 'formdestaque'; 470 document.getElementById('data_inicio').className = 'formdestaque';
422 alert('Preencha o campo "Data Início" corretamente!'); 471 alert('Preencha o campo "Data Início" corretamente!');
423 -  
424 document.getElementById('data_inicio').focus(); 472 document.getElementById('data_inicio').focus();
425 return false; 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 document.getElementById('data_fim').className = 'formdestaque'; 477 document.getElementById('data_fim').className = 'formdestaque';
431 alert('Preencha o campo "Data Fim" corretamente!'); 478 alert('Preencha o campo "Data Fim" corretamente!');
432 -  
433 document.getElementById('data_fim').focus(); 479 document.getElementById('data_fim').focus();
434 return false; 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 document.getElementById('incluir_modulo').value = 'S'; 491 document.getElementById('incluir_modulo').value = 'S';
ieducar/intranet/educar_calendario_ano_letivo_lst.php
@@ -118,11 +118,11 @@ class indice extends clsConfig @@ -118,11 +118,11 @@ class indice extends clsConfig
118 <tbody>'; 118 <tbody>';
119 119
120 if ($_POST) { 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 if ($_POST['mes']) { 127 if ($_POST['mes']) {
128 $this->mes = $_POST['mes']; 128 $this->mes = $_POST['mes'];
@@ -131,19 +131,15 @@ class indice extends clsConfig @@ -131,19 +131,15 @@ class indice extends clsConfig
131 if ($_POST['ano']) { 131 if ($_POST['ano']) {
132 $this->ano = $_POST['ano']; 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,49 +155,6 @@ class indice extends clsConfig
159 $this->ano = date('Y'); 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 $nivel_usuario = $obj_permissoes->nivel_acesso($this->pessoa_logada); 158 $nivel_usuario = $obj_permissoes->nivel_acesso($this->pessoa_logada);
206 159
207 if (! $this->ref_cod_escola) { 160 if (! $this->ref_cod_escola) {
@@ -234,22 +187,14 @@ class indice extends clsConfig @@ -234,22 +187,14 @@ class indice extends clsConfig
234 } 187 }
235 188
236 $lista = $obj_calendario_ano_letivo->lista( 189 $lista = $obj_calendario_ano_letivo->lista(
237 - NULL, 190 + $this->cod_calendario_ano_letivo,
238 $this->ref_cod_escola, 191 $this->ref_cod_escola,
239 NULL, 192 NULL,
240 NULL, 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 NULL, 195 NULL,
248 NULL, 196 NULL,
249 - NULL,  
250 - NULL,  
251 - NULL,  
252 - NULL 197 + 1
253 ); 198 );
254 break; 199 break;
255 } 200 }
@@ -270,33 +215,32 @@ class indice extends clsConfig @@ -270,33 +215,32 @@ class indice extends clsConfig
270 } 215 }
271 } 216 }
272 217
273 -  
274 // Monta a lista 218 // Monta a lista
275 if (is_array($lista) && count($lista)) { 219 if (is_array($lista) && count($lista)) {
276 foreach ($lista as $key => $registro) { 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 $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo(); 236 $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo();
293 237
294 $inicio_ano = $obj_ano_letivo_modulo->menorData( 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 $fim_ano = $obj_ano_letivo_modulo->maiorData( 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 $inicio_ano = explode('/', dataFromPgToBr($inicio_ano)); 246 $inicio_ano = explode('/', dataFromPgToBr($inicio_ano));
@@ -391,12 +335,12 @@ class indice extends clsConfig @@ -391,12 +335,12 @@ class indice extends clsConfig
391 } 335 }
392 336
393 if ($this->mes <= (int) $inicio_ano[1] && $this->ano == (int) $inicio_ano[2]) { 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 $obj_calendario->adicionarLegenda('Início Ano Letivo', 'AMARELO'); 339 $obj_calendario->adicionarLegenda('Início Ano Letivo', 'AMARELO');
396 $obj_calendario->adicionarArrayDias('Início Ano Letivo', array($inicio_ano[0])); 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 $dias = array(); 344 $dias = array();
401 345
402 if ($this->mes < (int) $inicio_ano[1]) { 346 if ($this->mes < (int) $inicio_ano[1]) {
@@ -414,6 +358,7 @@ class indice extends clsConfig @@ -414,6 +358,7 @@ class indice extends clsConfig
414 } 358 }
415 else { 359 else {
416 $dia_inicio; 360 $dia_inicio;
  361 +
417 for ($d = 1 ; $d < $dia_inicio ; $d++) { 362 for ($d = 1 ; $d < $dia_inicio ; $d++) {
418 $dias[] = $d; 363 $dias[] = $d;
419 } 364 }
@@ -470,7 +415,7 @@ class indice extends clsConfig @@ -470,7 +415,7 @@ class indice extends clsConfig
470 415
471 $obj_anotacao = new clsPmieducarCalendarioDiaAnotacao(); 416 $obj_anotacao = new clsPmieducarCalendarioDiaAnotacao();
472 $lista_anotacoes = $obj_anotacao->lista( 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 if ($lista_anotacoes) { 421 if ($lista_anotacoes) {
@@ -489,8 +434,10 @@ class indice extends clsConfig @@ -489,8 +434,10 @@ class indice extends clsConfig
489 $registro['cod_calendario_ano_letivo'] 434 $registro['cod_calendario_ano_letivo']
490 ); 435 );
491 436
  437 + // Gera código HTML do calendário
492 $calendario = $obj_calendario->getCalendario( 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 $retorno .= sprintf( 443 $retorno .= sprintf(
ieducar/intranet/scripts/calendario.js
@@ -278,10 +278,10 @@ function tamanhoTela() @@ -278,10 +278,10 @@ function tamanhoTela()
278 278
279 function acaoCalendario(nome, dia, mes, ano) 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 \ No newline at end of file 288 \ No newline at end of file
ieducar/lib/App/Date/Exception.php 0 → 100644
@@ -0,0 +1,45 @@ @@ -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 \ No newline at end of file 46 \ No newline at end of file
ieducar/lib/App/Date/Utils.php 0 → 100644
@@ -0,0 +1,92 @@ @@ -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 \ No newline at end of file 93 \ No newline at end of file
ieducar/tests/unit/App/AllTests.php
@@ -29,6 +29,7 @@ @@ -29,6 +29,7 @@
29 * @version $Id$ 29 * @version $Id$
30 */ 30 */
31 31
  32 +require_once 'App/Date/AllTests.php';
32 require_once 'App/Model/AllTests.php'; 33 require_once 'App/Model/AllTests.php';
33 require_once 'App/Service/AllTests.php'; 34 require_once 'App/Service/AllTests.php';
34 35
@@ -50,6 +51,7 @@ class App_AllTests @@ -50,6 +51,7 @@ class App_AllTests
50 public static function suite() 51 public static function suite()
51 { 52 {
52 $suite = new PHPUnit_Framework_TestSuite('Suíte de testes unitários de App'); 53 $suite = new PHPUnit_Framework_TestSuite('Suíte de testes unitários de App');
  54 + $suite->addTest(App_Date_AllTests::suite());
53 $suite->addTest(App_Model_AllTests::suite()); 55 $suite->addTest(App_Model_AllTests::suite());
54 $suite->addTest(App_Service_AllTests::suite()); 56 $suite->addTest(App_Service_AllTests::suite());
55 return $suite; 57 return $suite;
ieducar/tests/unit/App/Date/AllTests.php 0 → 100644
@@ -0,0 +1,55 @@ @@ -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 \ No newline at end of file 56 \ No newline at end of file
ieducar/tests/unit/App/Date/UtilsTest.php 0 → 100644
@@ -0,0 +1,71 @@ @@ -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 \ No newline at end of file 72 \ No newline at end of file
ieducar/tests/unit/Core/Include/ClsCalendarioTest.php 0 → 100644
@@ -0,0 +1,64 @@ @@ -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 \ No newline at end of file 65 \ No newline at end of file