From fe9bb20e7b33e727c0ab4f2836e3c97ce9968e91 Mon Sep 17 00:00:00 2001 From: Eriksen Costa Paixão Date: Wed, 7 Jul 2010 10:50:07 +0000 Subject: [PATCH] #76 by Eriksen Costa: Melhorias no calendário de ano letivo, permitindo que o ano letivo termine em anos posteriores --- ieducar/intranet/clsCalendario.inc.php | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------- ieducar/intranet/educar_ano_letivo_modulo_cad.php | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------- ieducar/intranet/educar_calendario_ano_letivo_lst.php | 129 ++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------- ieducar/intranet/scripts/calendario.js | 10 +++++----- ieducar/lib/App/Date/Exception.php | 45 +++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/App/Date/Utils.php | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/tests/unit/App/AllTests.php | 2 ++ ieducar/tests/unit/App/Date/AllTests.php | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/tests/unit/App/Date/UtilsTest.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/tests/unit/Core/Include/ClsCalendarioTest.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 495 insertions(+), 126 deletions(-) create mode 100644 ieducar/lib/App/Date/Exception.php create mode 100644 ieducar/lib/App/Date/Utils.php create mode 100644 ieducar/tests/unit/App/Date/AllTests.php create mode 100644 ieducar/tests/unit/App/Date/UtilsTest.php create mode 100644 ieducar/tests/unit/Core/Include/ClsCalendarioTest.php diff --git a/ieducar/intranet/clsCalendario.inc.php b/ieducar/intranet/clsCalendario.inc.php index bddc701..5487a42 100644 --- a/ieducar/intranet/clsCalendario.inc.php +++ b/ieducar/intranet/clsCalendario.inc.php @@ -297,10 +297,11 @@ class clsCalendario * @todo Substituir código de geração de calendário por uma biblioteca * com licença compatível com GPL2 */ - function getCalendario($mes, $ano, $nome, $mixVariaveisMantidas) + function getCalendario($mes, $ano, $nome, $mixVariaveisMantidas, + array $formValues = array()) { - $array_color = $array_color; - $array_legenda = $array_legenda; + $array_color = $this->array_cor; + $array_legenda = $this->array_legenda; if ( isset($mixVariaveisMantidas["{$nome}_mes"]) && @@ -354,7 +355,7 @@ class clsCalendario // Create the table tag opener and day headers // GET - $linkFixo = $strUrl . "?"; + $linkFixo = '?'; if (is_array($mixVariaveisMantidas)) { foreach ($mixVariaveisMantidas as $key => $value) { if ($key != "{$nome}_mes" && $key != "{$nome}_ano") { @@ -427,11 +428,15 @@ class clsCalendario $form = sprintf('
- - - - -
', $linkFixo); + + + + + %s + ', + $linkFixo, + $this->_generateFormValues($formValues, array('nome', 'ano', 'mes', 'dia')) + ); if ($this->permite_trocar_ano == TRUE) { $select = sprintf( @@ -467,8 +472,8 @@ class clsCalendario Mês Anterior - %s - ', $nome, $mes_ano, $ano_anterior_ano, $ano); + %s', + $nome, $mes_ano, $ano_anterior_ano, $ano); $cab[] = sprintf(' @@ -568,7 +573,7 @@ class clsCalendario $style_dia = sprintf('background-color: %s;', $this->array_cor[0]); - if ($this->array_cor_dia_padrao[$DiaSemana]) + if (isset($this->array_cor_dia_padrao[$DiaSemana])) $style_dia = sprintf('background-color: %s;', $this->array_cor_dia_padrao[$DiaSemana]); if (key_exists($diaCorrente,$this->array_dias)) { @@ -607,7 +612,7 @@ class clsCalendario $diaCorrente_ = strlen($diaCorrente) == 1 ? '0' . $diaCorrente : $diaCorrente; $NomeMes = strtolower($NomeMes); - if (key_exists($diaCorrente,$this->array_div_flutuante_dias)) { + if (key_exists($diaCorrente, $this->array_div_flutuante_dias)) { $message = "onmouseover=\"ShowContent('{$diaCorrente}','{$mes}','{$ano}','{$nome}'); return true;\""; $mouseout = "onmouseout=\"HideContent(event,'{$diaCorrente}','{$mes}','{$ano}','{$nome}')\" "; $mensagens .= " @@ -713,8 +718,53 @@ class clsCalendario $calendario .= ''; $calendario .= ''; - $calendario .= $mensagens; + if (isset($mensagens)) { + $calendario .= $mensagens; + } return $calendario; } + + /** + * Gera campos hidden para o formulário do calendário. + * + * Exemplo de uso: + * + * + * 'formFieldValue' + * ); + * print $this->_generateFormValues($formValues); + * // + * + * + * @access protected + * @param array $formValues Array associativo onde a chave torna-se o + * o valor dos atributos id e name do campo hidden. + * @param array $invalidNames Array com nomes inválidos para campos. Útil + * para evitar que sejam criados campos duplicados. + * @return string String com o HTML dos campos hidden gerados. + * @since Método disponível desde a versão 1.2.0 + * @todo Refatorar código de geração de html para uma classe externa. + */ + function _generateFormValues($formValues = array(), $invalidNames = array()) + { + $ret = ''; + + if (is_array($formValues) && 0 < count($formValues)) { + foreach ($formValues as $name => $value) { + if (in_array($name, $invalidNames)) { + continue; + } + + $ret .= sprintf( + '', + $name, $name, $value + ); + } + } + + return $ret; + } } \ No newline at end of file diff --git a/ieducar/intranet/educar_ano_letivo_modulo_cad.php b/ieducar/intranet/educar_ano_letivo_modulo_cad.php index ae1eb7c..ec6f11a 100644 --- a/ieducar/intranet/educar_ano_letivo_modulo_cad.php +++ b/ieducar/intranet/educar_ano_letivo_modulo_cad.php @@ -33,6 +33,8 @@ require_once 'include/clsCadastro.inc.php'; require_once 'include/clsBanco.inc.php'; require_once 'include/pmieducar/geral.inc.php'; +require_once 'App/Date/Utils.php'; + /** * clsIndexBase class. * @@ -280,12 +282,16 @@ class indice extends clsCadastro if ($this->ano_letivo_modulo) { $obj = new clsPmieducarEscolaAnoLetivo($this->ref_ref_cod_escola, - $this->ref_ano, $this->pessoa_logada, NULL, 0, NULL, NULL, 1 + $this->ref_ano, $this->pessoa_logada, NULL, 0, NULL, NULL, 1 ); $cadastrou = $obj->cadastra(); if ($cadastrou) { + if (FALSE == $this->_verificaModuloDatas($this->ano_letivo_modulo)) { + return FALSE; + } + foreach ($this->ano_letivo_modulo as $campo) { $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']); $campo['data_fim_'] = dataToBanco($campo['data_fim_']); @@ -336,6 +342,10 @@ class indice extends clsCadastro $excluiu = $obj->excluirTodos(); if ($excluiu) { + if (FALSE == $this->_verificaModuloDatas($this->ano_letivo_modulo)) { + return FALSE; + } + foreach ($this->ano_letivo_modulo as $campo) { $campo['data_inicio_'] = dataToBanco($campo['data_inicio_']); $campo['data_fim_'] = dataToBanco($campo['data_fim_']); @@ -397,6 +407,33 @@ class indice extends clsCadastro $this->mensagem = 'Exclusão não realizada.
'; return FALSE; } + + /** + * Verifica se ao menos uma das datas as datas de início dos módulos é do + * mesmo ano letivo da escola. Em caso de erro, configura a mensagem de + * erro que é retornado pelo formulário. + * + * @access private + * @param array $modulos O array associativo recebido via POST pelo formulário. + * @return bool FALSE caso nenhuma das datas esteja no mesmo ano letivo da escola. + */ + function _verificaModuloDatas(array $modulos) + { + $dates = array(); + foreach ($modulos as $modulo) { + $dates[] = $modulo['data_inicio_']; + } + + try { + App_Date_Utils::datesYearAtLeast($dates, $this->ref_ano, 1); + } + catch (App_Date_Exception $e) { + $this->mensagem = $e->getMessage(); + return FALSE; + } + + return TRUE; + } } // Instancia objeto de página @@ -412,37 +449,43 @@ $pagina->addForm($miolo); $pagina->MakeAll(); ?>