From 74b2dc5666203d82fb188d5268e80fdc3016fade Mon Sep 17 00:00:00 2001 From: Lucas D'Avila Date: Thu, 31 Jan 2013 19:53:39 -0200 Subject: [PATCH] Adicionado bibliotecas Portabilis --- ieducar/lib/Portabilis/Array/Utils.php | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Business/Professor.php | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Controller/ApiCoreController.php | 572 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Controller/ErrorCoreController.php | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Controller/Page/EditController.php | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Controller/Page/ListController.php | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Controller/ReportCoreController.php | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/DataMapper/Utils.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Date/Utils.php | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Mailer.php | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Messenger.php | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Model/Report/TipoBoletim.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Object/Utils.php | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Report/ReportCore.php | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Report/ReportFactory.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Report/ReportFactoryPHPJasperXML.php | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/String/Utils.php | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Utils/Database.php | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Utils/Float.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Utils/ReCaptcha.php | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Utils/User.php | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/Validator.php | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Application.php | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Ano.php | 19 +++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/AnoLetivo.php | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Biblioteca.php | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaFonte.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaCliente.php | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaObra.php | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaSituacao.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoCliente.php | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoExemplar.php | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/ComponenteCurricular.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Core.php | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Curso.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/DataFinal.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/DataInicial.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Escola.php | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Etapa.php | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Instituicao.php | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Matricula.php | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/PesquisaAluno.php | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Serie.php | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/DynamicInput/Turma.php | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Ano.php | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Checkbox.php | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Core.php | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/CoreSelect.php | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Hidden.php | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/MultipleSearch.php | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/MultipleSearchAjax.php | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Numeric.php | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/Beneficio.php | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/EstadoCivil.php | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchAjaxDeficiencias.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchDeficiencias.php | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/Religiao.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchAluno.php | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMatricula.php | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMunicipio.php | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPais.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPessoa.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Resource/TurmaTurno.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Select.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/SimpleSearch.php | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Input/Text.php | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/lib/Portabilis/View/Helper/Inputs.php | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 68 files changed, 7105 insertions(+), 0 deletions(-) create mode 100644 ieducar/lib/Portabilis/Array/Utils.php create mode 100644 ieducar/lib/Portabilis/Business/Professor.php create mode 100644 ieducar/lib/Portabilis/Controller/ApiCoreController.php create mode 100644 ieducar/lib/Portabilis/Controller/ErrorCoreController.php create mode 100644 ieducar/lib/Portabilis/Controller/Page/EditController.php create mode 100644 ieducar/lib/Portabilis/Controller/Page/ListController.php create mode 100644 ieducar/lib/Portabilis/Controller/ReportCoreController.php create mode 100644 ieducar/lib/Portabilis/DataMapper/Utils.php create mode 100644 ieducar/lib/Portabilis/Date/Utils.php create mode 100644 ieducar/lib/Portabilis/Mailer.php create mode 100644 ieducar/lib/Portabilis/Messenger.php create mode 100644 ieducar/lib/Portabilis/Model/Report/TipoBoletim.php create mode 100644 ieducar/lib/Portabilis/Object/Utils.php create mode 100644 ieducar/lib/Portabilis/Report/ReportCore.php create mode 100644 ieducar/lib/Portabilis/Report/ReportFactory.php create mode 100644 ieducar/lib/Portabilis/Report/ReportFactoryPHPJasperXML.php create mode 100644 ieducar/lib/Portabilis/String/Utils.php create mode 100644 ieducar/lib/Portabilis/Utils/Database.php create mode 100644 ieducar/lib/Portabilis/Utils/Float.php create mode 100644 ieducar/lib/Portabilis/Utils/ReCaptcha.php create mode 100644 ieducar/lib/Portabilis/Utils/User.php create mode 100644 ieducar/lib/Portabilis/Validator.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Application.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Ano.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/AnoLetivo.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Biblioteca.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaFonte.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaCliente.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaObra.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaSituacao.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoCliente.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoExemplar.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/ComponenteCurricular.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Core.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Curso.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/DataFinal.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/DataInicial.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Escola.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Etapa.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Instituicao.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Matricula.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/PesquisaAluno.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Serie.php create mode 100644 ieducar/lib/Portabilis/View/Helper/DynamicInput/Turma.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Ano.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Checkbox.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Core.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/CoreSelect.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Hidden.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/MultipleSearch.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/MultipleSearchAjax.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Numeric.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/Beneficio.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/EstadoCivil.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchAjaxDeficiencias.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchDeficiencias.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/Religiao.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchAluno.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMatricula.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMunicipio.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPais.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPessoa.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Resource/TurmaTurno.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Select.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/SimpleSearch.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Input/Text.php create mode 100644 ieducar/lib/Portabilis/View/Helper/Inputs.php diff --git a/ieducar/lib/Portabilis/Array/Utils.php b/ieducar/lib/Portabilis/Array/Utils.php new file mode 100644 index 0000000..df3984d --- /dev/null +++ b/ieducar/lib/Portabilis/Array/Utils.php @@ -0,0 +1,187 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +/** + * Portabilis_Array_Utils class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Array_Utils { + + /* Mescla $defaultArray com $array, + preservando os valores de $array nos casos em que ambos tem a mesma chave. */ + public static function merge($array, $defaultArray) { + foreach($array as $key => $value) { + $defaultArray[$key] = $value; + } + + return $defaultArray; + } + + + /* Mescla os valores de diferentes arrays, onde no array mesclado, cada valor (unico), + passa a ser a chave do array. + ex: mergeValues(array(array(1,2), array(2,3,4)) resulta em array(1=>1, 2=>2, 3=>3, 4=>4) */ + public function mergeValues($arrays) { + if (! is_array($arrays)) + $arrays = array($arrays); + + $merge = array(); + + foreach($arrays as $array) { + foreach($array as $value) { + if (! in_array($value, $merge)) + $merge[$value] = $value; + } + } + + return $merge; + } + + + /* Insere uma chave => valor no inicio do $array, + preservando os indices inteiros dos arrays (sem reiniciar) */ + public static function insertIn($key, $value, $array) { + $newArray = array($key => $value); + + foreach($array as $key => $value) { + $newArray[$key] = $value; + } + + return $newArray; + } + + + public static function filterSet($arrays, $attrs = array()){ + if (empty($arrays)) + return array(); + + if (! is_array($arrays)) + $arrays = array($arrays); + + $arraysFiltered = array(); + + foreach($arrays as $array) + $arraysFiltered[] = self::filter($array, $attrs); + + return $arraysFiltered; + } + + + /* Retorna um array {key => value, key => value} + de atributos filtrados de um outro array, podendo renomear nome dos attrs, + util para filtrar um array a ser retornado por uma api + + $arrays - array a ser(em) filtrado(s) + $attrs - atributo ou array de atributos para filtrar objeto, + ex: $attrs = array('cod_escola' => 'id', 'nome') + */ + public static function filter($array, $attrs = array()){ + if (! is_array($attrs)) + $attrs = array($attrs); + + $arrayFiltered = array(); + + // apply filter + foreach($attrs as $attrName => $attrValueName) { + if (! is_string($attrName)) + $attrName = $attrValueName; + + $arrayFiltered[$attrValueName] = $array[$attrName]; + } + + return $arrayFiltered; + } + + + /* transforma um conjunto de arrays "chave => valor, chave => valor" em um array "id => value", + ex: (('id' => 1, 'nome' => 'lucas'), ('id' => 2, 'nome' => 'davila')) + é transformado em (1 => 'lucas', 2 => davila), caso uma mesma chave se repita em mais de um array, + será mantido a chave => valor do ultimo array que a contem. + */ + public static function setAsIdValue($arrays, $keyAttr, $valueAtt) { + if (empty($arrays)) + return array(); + + if (! is_array($arrays)) + $arrays = array($arrays); + + $idValueArray = array(); + + foreach ($arrays as $array) + $idValueArray = self::merge($idValueArray, self::asIdValue($array, $keyAttr, $valueAtt)); + + return $idValueArray; + } + + + /* transforma um array "chave => valor, chave => valor" em um array "id => value", + ex: ('id' => 1, 'nome' => 'lucas') é transformado em (1 => 'lucas') */ + public static function asIdValue($array, $keyAttr, $valueAtt) { + return array($array[$keyAttr] => $array[$valueAtt]); + } + + + /* ordena array por uma chave usando função php usort, ex: + $ordenedResources = Portabilis_Array_Utils::sortByKey($resources, 'resource_att_name'); */ + public static function sortByKey($key, $array) { + usort($array, function ($a, $b) use ($key) { + return Portabilis_Array_Utils::_keySorter($key, $a, $b); + }); + + return $array; + } + + + public static function _keySorter($key, $array, $otherArray) { + $a = $array[$key]; + $b = $otherArray[$key]; + + if ($a == $b) + return 0; + + return ($a < $b) ? -1 : 1; + } + + + /* trim values for a given array */ + public static function trim($array) { + + foreach ($array as $i => $v) + $array[$i] = trim($v); + + return $array; + } +} diff --git a/ieducar/lib/Portabilis/Business/Professor.php b/ieducar/lib/Portabilis/Business/Professor.php new file mode 100644 index 0000000..314c875 --- /dev/null +++ b/ieducar/lib/Portabilis/Business/Professor.php @@ -0,0 +1,145 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'include/pmieducar/clsPmieducarServidorAlocacao.inc.php'; + +/** + * Portabilis_Business_Professor class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Business_Professor { + + public static function isProfessor($instituicaoId, $userId) { + $sql = "select funcao.professor from pmieducar.servidor_funcao, pmieducar.funcao + where funcao.cod_funcao = servidor_funcao.ref_cod_funcao and funcao.professor = 1 and + servidor_funcao.ref_ref_cod_instituicao = $1 and servidor_funcao.ref_cod_servidor = $2"; + + $options = array('params' => array($instituicaoId, $userId), 'return_only' => 'first-field'); + return self::fetchPreparedQuery($sql, $options) == '1'; + } + + + public static function escolasAlocado($instituicaoId, $userId) { + $sql = "select ref_cod_escola as id, ref_cod_servidor as servidor_id, ref_ref_cod_instituicao as + instituicao_id, (select juridica.fantasia from escola, cadastro.juridica + where cod_escola = ref_cod_escola and escola.ref_idpes = juridica.idpes limit 1 + ) as nome, carga_horaria, periodo, hora_final, hora_inicial, dia_semana + from pmieducar.servidor_alocacao where ref_ref_cod_instituicao = $1 and ref_cod_servidor = $2 + and ativo = 1"; + + $options = array('params' => array($instituicaoId, $userId)); + return self::fetchPreparedQuery($sql, $options); + } + + + public static function cursosAlocado($instituicaoId, $escolaId, $userId){ + $sql = "select cod_curso as id, nm_curso as nome from pmieducar.servidor_curso_ministra, + pmieducar.curso, pmieducar.escola_curso, pmieducar.escola + where escola.ref_cod_instituicao = $1 and escola.cod_escola = $2 + and escola_curso.ref_cod_curso = cod_curso and escola_curso.ref_cod_escola = cod_escola + and servidor_curso_ministra.ref_cod_curso = curso.cod_curso and ref_cod_servidor = $3"; + + $options = array('params' => array($instituicaoId, $escolaId, $userId)); + return self::fetchPreparedQuery($sql, $options); + } + + /* public function seriesAlocado() { + + }*/ + + public static function turmasAlocado($escolaId, $serieId, $userId) { + $sql = "select cod_turma as id, nm_turma as nome from pmieducar.turma where ref_ref_cod_escola = $1 + and (ref_ref_cod_serie = $2 or ref_ref_cod_serie_mult = $2) and ativo = 1 and + visivel != 'f' and turma_turno_id in ( select periodo from servidor_alocacao where + ref_cod_escola = ref_ref_cod_escola and ref_cod_servidor = $3 and ativo = 1 limit 1) + order by nm_turma asc"; + + return self::fetchPreparedQuery($sql, array('params' => array($escolaId, $serieId, $userId))); + } + + + public static function componentesCurricularesAlocado($turmaId, $anoLetivo, $userId) { + $componentes = self::componentesCurricularesTurmaAlocado($turmaId, $anoLetivo, $userId); + + if (empty($componentes)) + $componentes = self::componentesCurricularesCursoAlocado($turmaId, $anoLetivo, $userId); + + return $componentes; + } + + + protected static function componentesCurricularesTurmaAlocado($turmaId, $anoLetivo, $userId) { + $sql = "select cc.id, cc.nome + from modules.componente_curricular_turma as cct, pmieducar.turma, modules.componente_curricular as cc, + pmieducar.escola_ano_letivo as al, pmieducar.servidor_disciplina as scc + where turma.cod_turma = $1 and cct.turma_id = turma.cod_turma and cct.escola_id = turma.ref_ref_cod_escola + and cct.componente_curricular_id = cc.id and al.ano = $2 and cct.escola_id = al.ref_cod_escola and + scc.ref_ref_cod_instituicao = turma.ref_cod_instituicao and scc.ref_cod_servidor = $3 and + scc.ref_cod_curso = turma.ref_cod_curso and scc.ref_cod_disciplina = cc.id"; + + $options = array('params' => array($turmaId, $anoLetivo, $userId)); + + return self::fetchPreparedQuery($sql, $options); + } + + + protected static function componentesCurricularesCursoAlocado($turmaId, $anoLetivo, $userId) { + $sql = "select cc.id as id, cc.nome as nome from pmieducar.serie, pmieducar.escola_serie_disciplina as esd, + pmieducar.turma, modules.componente_curricular as cc, pmieducar.escola_ano_letivo as al, + pmieducar.servidor_disciplina as scc where turma.cod_turma = $1 and serie.cod_serie = + turma.ref_ref_cod_serie and esd.ref_ref_cod_escola = turma.ref_ref_cod_escola and esd.ref_ref_cod_serie = + serie.cod_serie and esd.ref_cod_disciplina = cc.id and al.ano = $2 and esd.ref_ref_cod_escola = + al.ref_cod_escola and serie.ativo = 1 and esd.ativo = 1 and al.ativo = 1 and scc.ref_ref_cod_instituicao = + turma.ref_cod_instituicao and scc.ref_cod_servidor = $3 and scc.ref_cod_curso = serie.ref_cod_curso and + scc.ref_cod_disciplina = cc.id"; + + $options = array('params' => array($turmaId, $anoLetivo, $userId)); + + return self::fetchPreparedQuery($sql, $options); + } + + + /*public static function alocacoes($instituicaoId, $escolaId, $userId) { + $alocacoes = new ClsPmieducarServidorAlocacao(); + return $alocacoes->lista(null, $instituicaoId, null, null, $escolaId, $userId); + }*/ + + // wrappers for Portabilis*Utils* + + protected static function fetchPreparedQuery($sql, $options = array()) { + return Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Controller/ApiCoreController.php b/ieducar/lib/Portabilis/Controller/ApiCoreController.php new file mode 100644 index 0000000..edae3c5 --- /dev/null +++ b/ieducar/lib/Portabilis/Controller/ApiCoreController.php @@ -0,0 +1,572 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @subpackage lib + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'include/clsBanco.inc.php'; + +require_once 'Core/Controller/Page/EditController.php'; +require_once 'CoreExt/Exception.php'; + +require_once 'lib/Portabilis/Messenger.php'; +require_once 'lib/Portabilis/Validator.php'; +require_once 'lib/Portabilis/DataMapper/Utils.php'; +require_once 'lib/Portabilis/Array/Utils.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/String/Utils.php'; +require_once 'lib/Portabilis/Utils/User.php'; + +class ApiCoreController extends Core_Controller_Page_EditController +{ + + // variaveis usadas apenas em formulários, desnecesário subescrever nos filhos. + + protected $_saveOption = FALSE; + protected $_deleteOption = FALSE; + protected $_titulo = ''; + + + // adicionar classe do data mapper que se deseja usar, em tais casos. + protected $_dataMapper = null; + + + /* Variaveis utilizadas pelos validadores validatesAuthorizationToDestroy e validatesAuthorizationToChange. + Notar que todos usuários tem autorização para o processo 0, + nos controladores em que se deseja verificar permissões, adicionar o processo AP da funcionalidade. + */ + protected $_processoAp = 0; + protected $_nivelAcessoOption = App_Model_NivelAcesso::INSTITUCIONAL; + + + public function __construct() { + $this->messenger = new Portabilis_Messenger(); + $this->validator = new Portabilis_Validator($this->messenger); + $this->response = array(); + } + + protected function currentUser() { + return Portabilis_Utils_User::load($this->getSession()->id_pessoa); + } + + + // validators + + protected function validatesAccessKey() { + $valid = false; + + if (! is_null($this->getRequest()->access_key)) { + $accessKey = $GLOBALS['coreExt']['Config']->apis->access_key; + $valid = $accessKey == $this->getRequest()->access_key; + + if (! $valid) + $this->messenger->append('Chave de acesso inválida!'); + } + + return $valid; + } + + protected function validatesSignature() { + // #TODO implementar validação urls assinadas + return true; + } + + protected function validatesUserIsLoggedIn(){ + $canAccess = is_numeric($this->getSession()->id_pessoa); + + if (! $canAccess) + $canAccess = ($this->validatesAccessKey() && $this->validatesSignature()); + + if (! $canAccess) { + $msg = 'Usuário deve estar logado ou a chave de acesso deve ser enviada!'; + $this->messenger->append($msg, 'error', $encodeToUtf8 = false, $ignoreIfHasMsgWithType = 'error'); + } + + return $canAccess; + } + + + protected function validatesUserIsAdmin() { + $user = $this->currentUser(); + + if(! $user['super']) { + $this->messenger->append("O usuário logado deve ser o admin"); + return false; + } + + return true; + } + + protected function validatesId($resourceName, $options = array()) { + $attrName = $resourceName . ($resourceName ? '_id' : 'id'); + + return $this->validatesPresenceOf($attrName) && + $this->validatesExistenceOf($resourceName, $this->getRequest()->$attrName, $options); + } + + // subescrever nos controladores cujo recurso difere do padrao (schema pmieducar, tabela , pk cod_) + protected function validatesResourceId() { + return $this->validatesPresenceOf('id') && + $this->validatesExistenceOf($this->getRequest()->resource, $this->getRequest()->id); + } + + protected function validatesAuthorizationToDestroy() { + $can = $this->getClsPermissoes()->permissao_excluir($this->getBaseProcessoAp(), + $this->getSession()->id_pessoa, + $this->_nivelAcessoOption); + + if (! $can) + $this->messenger->append("Usuário sem permissão para excluir '{$this->getRequest()->resource}'."); + + return $can; + } + + protected function validatesAuthorizationToChange() { + $can = $this->getClsPermissoes()->permissao_cadastra($this->getBaseProcessoAp(), + $this->getSession()->id_pessoa, + $this->_nivelAcessoOption); + + if (! $can) + $this->messenger->append("Usuário sem permissão para cadastrar '{$this->getRequest()->resource}'."); + + return $can; + } + + + // validation + + protected function canAcceptRequest() { + return $this->validatesUserIsLoggedIn() && + $this->validatesPresenceOf(array('oper', 'resource')); + } + + + protected function canGet() { + return $this->validatesResourceId(); + } + + + protected function canChange() { + throw new Exception('canChange must be overwritten!'); + } + + + protected function canPost() { + return $this->canChange() && + $this->validatesAuthorizationToChange(); + } + + + protected function canPut() { + return $this->canChange() && + $this->validatesResourceId() && + $this->validatesAuthorizationToChange(); + } + + + protected function canSearch() { + return $this->validatesPresenceOf('query'); + } + + + protected function canDelete() { + return $this->validatesResourceId() && + $this->validatesAuthorizationToDestroy(); + } + + + protected function canEnable() { + return $this->validatesResourceId() && + $this->validatesAuthorizationToChange(); + } + + + // api + + protected function notImplementedOperationError() { + $this->messenger->append("Operação '{$this->getRequest()->oper}' não implementada para o recurso '{$this->getRequest()->resource}'"); + } + + + protected function appendResponse($name, $value = '') { + if (is_array($name)) { + foreach($name as $k => $v) { + $this->response[$k] = $v; + } + } + elseif (! is_null($name)) + $this->response[$name] = $value; + } + + + // subscrever nas classes filhas sentando os recursos disponibilizados e operacoes permitidas, ex: + // return array('resources1' => array('get'), 'resouce2' => array('post', 'delete')); + protected function getAvailableOperationsForResources() { + throw new CoreExt_Exception('É necessário sobrescrever o método "getExpectedOperationsForResources()" de ApiCoreController.'); + } + + + protected function isRequestFor($oper, $resource) { + return $this->getRequest()->resource == $resource && + $this->getRequest()->oper == $oper; + } + + + protected function prepareResponse(){ + try { + if (isset($this->getRequest()->oper)) + $this->appendResponse('oper', $this->getRequest()->oper); + + if (isset($this->getRequest()->resource)) + $this->appendResponse('resource', $this->getRequest()->resource); + + $this->appendResponse('msgs', $this->messenger->getMsgs()); + $this->appendResponse('any_error_msg', $this->messenger->hasMsgWithType('error')); + + $response = json_encode($this->response); + } + catch (Exception $e){ + error_log("Erro inesperado no metodo prepareResponse da classe ApiCoreController: {$e->getMessage()}"); + $response = array('msgs' => array('msg' => 'Erro inesperado no servidor. Por favor, tente novamente.', + 'type' => 'error')); + + $response = json_encode($response); + } + + echo $response; + } + + + public function generate(CoreExt_Controller_Page_Interface $instance){ + header('Content-type: application/json; charset=UTF-8'); + + try { + if ($this->canAcceptRequest()) + $instance->Gerar(); + } + catch (Exception $e){ + $this->messenger->append('Exception: ' . $e->getMessage(), 'error', $encodeToUtf8 = true); + } + + echo $this->prepareResponse(); + } + + + /* subescrever nas classes filhas setando as verificações desejadas e retornando a resposta, + conforme recurso e operação recebida ex: get, post ou delete, ex: + + if ($this->getRequest()->oper == 'get') + { + // caso retorne apenas um recurso + $this->appendResponse('matriculas', $matriculas); + + // ou para multiplos recursos, pode-se usar o argumento resource + if ($this->getRequest()->resource == 'matriculas') + $this->appendResponse('matriculas', $this->getMatriculas()); + elseif ($this->getRequest()->resource == 'alunos') + $this->appendResponse('alunos', $this->getAlunos); + else + $this->notImplementedError(); + } + elseif ($this->getRequest()->oper == 'post') + $this->postMatricula(); + else + $this->notImplementedError(); + */ + public function Gerar(){ + throw new CoreExt_Exception("The method 'Gerar' must be overwritten!"); + } + + + // #TODO mover validadores para classe lib/Portabilis/Validator.php / adicionar wrapper para tais + + protected function validatesPresenceOf($requiredParamNames) { + if (! is_array($requiredParamNames)) + $requiredParamNames = array($requiredParamNames); + + $valid = true; + + foreach($requiredParamNames as $param) { + if (! $this->validator->validatesPresenceOf($this->getRequest()->$param, $param) and $valid) { + $valid = false; + } + } + + return $valid; + } + + + protected function validatesExistenceOf($resourceName, $value, $options = array()) { + $defaultOptions = array('schema_name' => 'pmieducar', + 'field_name' => "cod_{$resourceName}", + 'add_msg_on_error' => true); + + $options = $this->mergeOptions($options, $defaultOptions); + + return $this->validator->validatesValueIsInBd($options['field_name'], + $value, + $options['schema_name'], + $resourceName, + $raiseExceptionOnFail = false, + $addMsgOnError = $options['add_msg_on_error']); + } + + protected function validatesUniquenessOf($resourceName, $value, $options = array()) { + $defaultOptions = array('schema_name' => 'pmieducar', + 'field_name' => "cod_{$resourceName}", + 'add_msg_on_error' => true); + + $options = $this->mergeOptions($options, $defaultOptions); + + return $this->validator->validatesValueNotInBd($options['field_name'], + $value, + $options['schema_name'], + $resourceName, + $raiseExceptionOnFail = false, + $addMsgOnError = $options['add_msg_on_error']); + } + + + protected function validatesIsNumeric($expectedNumericParamNames) { + if (! is_array($expectedNumericParamNames)) + $expectedNumericParamNames = array($expectedNumericParamNames); + + $valid = true; + + foreach($requiredParamNames as $param) { + if (! $this->validator->validatesValueIsNumeric($this->getRequest()->$param, $param) and $valid) { + $valid = false; + } + } + + return $valid; + } + + + // wrappers for Portabilis_*Utils* + + + // DEPRECADO + // #TODO nas classes filhas, migrar chamadas de fetchPreparedQuery para usar novo padrao com array de options + protected function fetchPreparedQuery($sql, $params = array(), $hideExceptions = true, $returnOnly = '') { + $options = array('params' => $params, + 'show_errors' => ! $hideExceptions, + 'return_only' => $returnOnly, + 'messenger' => $this->messenger); + + return Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + } + + protected function getDataMapperFor($packageName, $modelName){ + return Portabilis_DataMapper_Utils::getDataMapperFor($packageName, $modelName); + } + + protected function getEntityOf($dataMapper, $id) { + return $dataMapper->find($id); + } + + protected function tryGetEntityOf($dataMapper, $id) { + try { + $entity = $this->getEntityOf($dataMapper, $id); + } + catch(Exception $e) { + $entity = null; + } + + return $entity; + } + + protected function createEntityOf($dataMapper, $data = array()) { + return $dataMapper->createNewEntityInstance($data); + } + + protected function getOrCreateEntityOf($dataMapper, $id) { + $entity = $this->tryGetEntityOf($dataMapper, $id); + return (is_null($entity) ? $this->createEntityOf($dataMapper) : $entity); + } + + protected function deleteEntityOf($dataMapper, $id) { + $entity = $this->tryGetEntityOf($dataMapper, $id); + return (is_null($entity) ? true : $dataMapper->delete($entity)); + } + + protected function saveEntity($dataMapper, $entity) { + if ($entity->isValid()) + $dataMapper->save($entity); + + else { + $errors = $entity->getErrors(); + $msgs = array(); + + foreach ($errors as $attr => $msg) { + if (! is_null($msg)) + $msgs[] = "$attr => $msg"; + } + + //$msgs transporte_aluno + $msg = 'Erro ao salvar o recurso ' . $dataMapper->resourceName() . ': ' . join(', ', $msgs); + $this->messenger->append($msg, 'error', true); + } + } + + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + protected function toUtf8($str, $options = array()) { + return Portabilis_String_Utils::toUtf8($str, $options); + } + + protected function toLatin1($str, $options = array()) { + return Portabilis_String_Utils::toLatin1($str, $options); + } + + // DEPRECADO #TODO nas classe filhas migrar de safeString => toUtf8 + protected function safeString($str, $transform = true) { + return $this->toUtf8($str, array('transform' => $transform)); + } + + // DEPRECADO #TODO nas classe filhas migrar de safeStringForDb => toLatin1 + protected function safeStringForDb($str) { + return $this->toLatin1($str); + } + + + // search + + protected function defaultSearchOptions() { + $resourceName = Portabilis_String_Utils::underscore($this->getDispatcher()->getActionName()); + + return array('namespace' => 'pmieducar', + 'table' => $resourceName, + 'idAttr' => "cod_$resourceName", + 'labelAttr' => 'nome', + 'selectFields' => array(), + 'sqlParams' => array()); + } + + // overwrite in subclass to chande search options + protected function searchOptions() { + return array(); + } + + protected function sqlsForNumericSearch() { + $searchOptions = $this->mergeOptions($this->searchOptions(), $this->defaultSearchOptions()); + + $namespace = $searchOptions['namespace']; + $table = $searchOptions['table']; + $idAttr = $searchOptions['idAttr']; + $labelAttr = $searchOptions['labelAttr']; + + $searchOptions['selectFields'][] = "$idAttr as id, $labelAttr as name"; + $selectFields = join(', ', $searchOptions['selectFields']); + + return "select distinct $selectFields from $namespace.$table + where $idAttr like $1||'%' order by $idAttr limit 15"; + } + + + protected function sqlsForStringSearch() { + $searchOptions = $this->mergeOptions($this->searchOptions(), $this->defaultSearchOptions()); + + $namespace = $searchOptions['namespace']; + $table = $searchOptions['table']; + $idAttr = $searchOptions['idAttr']; + $labelAttr = $searchOptions['labelAttr']; + + $searchOptions['selectFields'][] = "$idAttr as id, $labelAttr as name"; + $selectFields = join(', ', $searchOptions['selectFields']); + + return "select distinct $selectFields from $namespace.$table + where lower(to_ascii($labelAttr)) like lower(to_ascii($1))||'%' order by $labelAttr limit 15"; + } + + protected function sqlParams($query) { + $searchOptions = $this->mergeOptions($this->searchOptions(), $this->defaultSearchOptions()); + $params = array($query); + + foreach($searchOptions['sqlParams'] as $param) + $params[] = $param; + + return $params; + } + + protected function loadResourcesBySearchQuery($query) { + $results = array(); + $numericQuery = preg_replace("/[^0-9]/", "", $query); + + if (! empty($numericQuery)) { + $sqls = $this->sqlsForNumericSearch(); + $params = $this->sqlParams($numericQuery); + } + else { + + // convertido query para latin1, para que pesquisas com acentuação funcionem. + $query = Portabilis_String_Utils::toLatin1($query, array('escape' => false)); + + $sqls = $this->sqlsForStringSearch(); + $params = $this->sqlParams($query); + } + + if (! is_array($sqls)) + $sqls = array($sqls); + + foreach($sqls as $sql) { + $_results = $this->fetchPreparedQuery($sql, $params, false); + + foreach($_results as $result) { + if (! isset($results[$result['id']])) + $results[$result['id']] = $this->formatResourceValue($result); + } + } + + return $results; + } + + // formats the value of each resource, that will be returned in api as a label. + + protected function formatResourceValue($resource) { + return $resource['id'] . ' - ' . $this->toUtf8($resource['name'], array('transform' => true)); + } + + + // default api responders + + protected function search() { + if ($this->canSearch()) + $resources = $this->loadResourcesBySearchQuery($this->getRequest()->query); + + if (empty($resources)) + $resources = array('' => 'Sem resultados.'); + + return array('result' => $resources); + } +} diff --git a/ieducar/lib/Portabilis/Controller/ErrorCoreController.php b/ieducar/lib/Portabilis/Controller/ErrorCoreController.php new file mode 100644 index 0000000..3410b40 --- /dev/null +++ b/ieducar/lib/Portabilis/Controller/ErrorCoreController.php @@ -0,0 +1,89 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @subpackage lib + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Core/View.php'; +require_once 'Core/Controller/Page/ViewController.php'; +require_once 'lib/Portabilis/View/Helper/Application.php'; + +class Portabilis_Controller_ErrorCoreController extends Core_Controller_Page_ViewController +{ + protected $_titulo = 'Error'; + + public function __construct() { + parent::__construct(); + $this->loadAssets(); + } + + /* overwrite Core/Controller/Page/Abstract.php para renderizar html + sem necessidade de usuário estar logado */ + public function generate(CoreExt_Controller_Page_Interface $instance) + { + $this->setHeader(); + + $viewBase = new Core_View($instance); + $viewBase->titulo = $this->_titulo; + $viewBase->addForm($instance); + + $html = $viewBase->MakeHeadHtml(); + + foreach ($viewBase->clsForm as $form) { + $html .= $form->Gerar(); + } + + $html .= $form->getAppendedOutput(); + $html .= $viewBase->MakeFootHtml(); + + echo $html; + } + + protected function loadAssets() { + $styles = array( + 'styles/reset.css', + 'styles/portabilis.css', + 'styles/min-portabilis.css', + '/modules/Error/Assets/Stylesheets/Error.css' + ); + + Portabilis_View_Helper_Application::loadStylesheet($this, $styles); + } + + + protected function setHeader() { + die('setHeader must be overwritten!'); + } + + public function Gerar() { + die('Gerar must be overwritten!'); + } +} diff --git a/ieducar/lib/Portabilis/Controller/Page/EditController.php b/ieducar/lib/Portabilis/Controller/Page/EditController.php new file mode 100644 index 0000000..5c3dcb0 --- /dev/null +++ b/ieducar/lib/Portabilis/Controller/Page/EditController.php @@ -0,0 +1,215 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @subpackage lib + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Core/Controller/Page/EditController.php'; + +require_once 'lib/Portabilis/Messenger.php'; +require_once 'lib/Portabilis/Validator.php'; +require_once 'lib/Portabilis/Array/Utils.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/DataMapper/Utils.php'; + +require_once 'lib/Portabilis/View/Helper/Application.php'; + +// Resource controller +class Portabilis_Controller_Page_EditController extends Core_Controller_Page_EditController +{ + + protected $_dataMapper = null; + + # vars that must be overwritten in subclasses + # protected $_processoAp = 0; + # protected $_nivelAcessoOption = App_Model_NivelAcesso::SOMENTE_ESCOLA; + + # vars that can be overwritten + # protected $_dataMapper = 'Avaliacao_Model_NotaComponenteDataMapper'; + # protected $_saveOption = FALSE; + # protected $_deleteOption = FALSE; + # protected $_titulo = 'Cadastro de aluno'; + + protected $_nivelAcessoInsuficiente = "/module/Error/unauthorized"; + + + protected $_titulo = ''; + protected $backwardCompatibility = false; + + public function __construct(){ + parent::__construct(); + $this->loadAssets(); + } + + // methods that can be overwritten + + protected function canSave() + { + return true; + } + + + // methods that must be overwritten + + function Gerar() + { + throw new Exception("The method 'Gerar' must be overwritten!"); + } + + + protected function save() + { + throw new Exception("The method 'save' must be overwritten!"); + } + + + // methods that cannot be overwritten + + protected function _save() + { + $result = false; + + // try set or load entity before validation or save + if (! $this->_initNovo()) + $this->_initEditar(); + + if (! $this->messenger()->hasMsgWithType('error') && $this->canSave()) { + try { + $result = $this->save(); + + if (is_null($result)) + $result = ! $this->messenger()->hasMsgWithType('error'); + elseif(! is_bool($result)) + throw new Exception("Invalid value returned from '_save' method: '$result', please return null, true or false!"); + } + catch (Exception $e) { + $this->messenger()->append('Erro ao gravar alterações, por favor, tente novamente.', 'error'); + error_log("Erro ao gravar alteracoes: " . $e->getMessage()); + + $result = false; + } + + $result = $result && ! $this->messenger()->hasMsgWithType('error'); + + if ($result) + $this->messenger()->append('Alterações gravadas com sucesso.', 'success', false, 'success'); + } + + return $result; + } + + + protected function flashMessage() + { + if (! $this->hasErrors()) + return $this->messenger()->toHtml(); + + return ''; + } + + + // helpers + + protected function validator() { + if (! isset($this->_validator)) + $this->_validator = new Portabilis_Validator(); + + return $this->_validator; + } + + + protected function messenger() { + if (! isset($this->_messenger)) + $this->_messenger = new Portabilis_Messenger(); + + return $this->_messenger; + } + + + protected function mailer() { + if (! isset($this->_mailer)) + $this->_mailer = new Portabilis_Mailer(); + + return $this->_mailer; + } + + + protected function loadResourceAssets($dispatcher){ + $rootPath = $_SERVER['DOCUMENT_ROOT']; + $controllerName = ucwords($dispatcher->getControllerName()); + $actionName = ucwords($dispatcher->getActionName()); + + $style = "/modules/$controllerName/Assets/Stylesheets/$actionName.css"; + $script = "/modules/$controllerName/Assets/Javascripts/$actionName.js"; + + if (file_exists($rootPath . $style)) + Portabilis_View_Helper_Application::loadStylesheet($this, $style); + + if (file_exists($rootPath . $script)) + Portabilis_View_Helper_Application::loadJavascript($this, $script); + } + + protected function loadAssets(){ + Portabilis_View_Helper_Application::loadJQueryLib($this); + Portabilis_View_Helper_Application::loadJQueryFormLib($this); + + $styles = array('/modules/Portabilis/Assets/Stylesheets/Frontend.css', + '/modules/Portabilis/Assets/Stylesheets/Frontend/Resource.css'); + Portabilis_View_Helper_Application::loadStylesheet($this, $styles); + + + $scripts = array('/modules/Portabilis/Assets/Javascripts/ClientApi.js', + '/modules/Portabilis/Assets/Javascripts/Validator.js', + '/modules/Portabilis/Assets/Javascripts/Utils.js'); + + if (! $this->backwardCompatibility) + $scripts[] = '/modules/Portabilis/Assets/Javascripts/Frontend/Resource.js'; + + Portabilis_View_Helper_Application::loadJavascript($this, $scripts); + } + + + // wrappers for Portabilis_*Utils* + + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + + protected function fetchPreparedQuery($sql, $options = array()) { + return Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + } + + + protected function getDataMapperFor($packageName, $modelName){ + return Portabilis_DataMapper_Utils::getDataMapperFor($packageName, $modelName); + } +} diff --git a/ieducar/lib/Portabilis/Controller/Page/ListController.php b/ieducar/lib/Portabilis/Controller/Page/ListController.php new file mode 100644 index 0000000..7fe8e73 --- /dev/null +++ b/ieducar/lib/Portabilis/Controller/Page/ListController.php @@ -0,0 +1,94 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Avaliacao + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Core/Controller/Page/ListController.php'; +require_once 'lib/Portabilis/View/Helper/Application.php'; +require_once "lib/Portabilis/View/Helper/Inputs.php"; + +// Process controller +class Portabilis_Controller_Page_ListController extends Core_Controller_Page_ListController +{ + + protected $backwardCompatibility = false; + + public function __construct() { + $this->rodape = ""; + $this->largura = '100%'; + + $this->loadAssets(); + parent::__construct(); + } + + protected function inputsHelper() { + if (! isset($this->_inputsHelper)) + $this->_inputsHelper = new Portabilis_View_Helper_Inputs($this); + + return $this->_inputsHelper; + } + + protected function loadResourceAssets($dispatcher){ + $rootPath = $_SERVER['DOCUMENT_ROOT']; + $controllerName = ucwords($dispatcher->getControllerName()); + $actionName = ucwords($dispatcher->getActionName()); + + $style = "/modules/$controllerName/Assets/Stylesheets/$actionName.css"; + $script = "/modules/$controllerName/Assets/Javascripts/$actionName.js"; + + if (file_exists($rootPath . $style)) + Portabilis_View_Helper_Application::loadStylesheet($this, $style); + + if (file_exists($rootPath . $script)) + Portabilis_View_Helper_Application::loadJavascript($this, $script); + } + + protected function loadAssets(){ + Portabilis_View_Helper_Application::loadJQueryLib($this); + Portabilis_View_Helper_Application::loadJQueryFormLib($this); + + $styles = array('/modules/Portabilis/Assets/Stylesheets/Frontend.css', + '/modules/Portabilis/Assets/Stylesheets/Frontend/Process.css'); + Portabilis_View_Helper_Application::loadStylesheet($this, $styles); + + $scripts = array( + '/modules/Portabilis/Assets/Javascripts/ClientApi.js', + '/modules/Portabilis/Assets/Javascripts/Validator.js', + '/modules/Portabilis/Assets/Javascripts/Utils.js' + ); + + if (! $this->backwardCompatibility) + $scripts[] = '/modules/Portabilis/Assets/Javascripts/Frontend/Process.js'; + + Portabilis_View_Helper_Application::loadJavascript($this, $scripts); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Controller/ReportCoreController.php b/ieducar/lib/Portabilis/Controller/ReportCoreController.php new file mode 100644 index 0000000..46c34a6 --- /dev/null +++ b/ieducar/lib/Portabilis/Controller/ReportCoreController.php @@ -0,0 +1,232 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Controller + * @subpackage Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'Core/Controller/Page/EditController.php'; +require_once 'lib/Portabilis/View/Helper/Inputs.php'; +require_once 'Avaliacao/Model/NotaComponenteDataMapper.php'; +require_once 'lib/Portabilis/String/Utils.php'; + +//require_once 'include/pmieducar/clsPermissoes.inc.php'; + +/** + * Portabilis_Controller_ReportCoreController class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Controller + * @subpackage Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Controller_ReportCoreController extends Core_Controller_Page_EditController +{ + + // setado qualquer dataMapper pois é obrigatório. + protected $_dataMapper = 'Avaliacao_Model_NotaComponenteDataMapper'; + + # 624 código permissão página index, por padrão todos usuários tem permissão. + protected $_processoAp = 624; + + protected $_titulo = 'Relatório'; + + public function __construct() { + $this->validatesIfUserIsLoggedIn(); + + $this->validationErrors = array(); + + // clsCadastro settings + $this->acao_executa_submit = false; + $this->acao_enviar = 'printReport()'; + + parent::__construct(); + } + + + public function Gerar() { + if (count($_POST) < 1) { + $this->appendFixups(); + $this->renderForm(); + } + else { + $this->report = $this->report(); + + $this->beforeValidation(); + $this->validatesPresenseOfRequiredArgsInReport(); + $this->aftervalidation(); + + if (count($this->validationErrors) > 0) + $this->onValidationError(); + else + $this->renderReport(); + + } + } + + + function headers($result) { + header('Content-type: application/pdf'); + header('Content-Length: ' . strlen($result)); + header('Content-Disposition: inline; filename=report.pdf'); + } + + + function renderForm() { + $this->form(); + $this->nome_url_sucesso = "Exibir"; + } + + + function renderReport() { + try { + $result = $this->report->dumps(); + + if (! $result) + throw new Exception('No report result to render!'); + + $this->headers($result); + echo $result; + } + catch (Exception $e) { + if ($GLOBALS['coreExt']['Config']->report->show_error_details == true) + $details = 'Detalhes: ' . $e->getMessage(); + else + $details = "Visualização dos detalhes sobre o erro desativada."; + + $this->renderError($details); + } + } + + + // methods that must be overridden + + function form() { + throw new Exception("The method 'form' must be overridden!"); + } + + + // metodo executado após validação com sucesso (antes de imprimir) , como os argumentos ex: $this->addArg('id', 1); $this->addArg('id_2', 2); + function beforeValidation() { + throw new Exception("The method 'beforeValidation' must be overridden!"); + } + + + // methods that can be overridden + + function afterValidation() { + //colocar aqui as validacoes serverside, exemplo se histórico possui todos os campos... + //retornar dict msgs, se nenhuma msg entao esta validado ex: $this->addValidationError('O cadastro x esta em y status'); + } + + + + protected function validatesIfUserIsLoggedIn() { + if (! $this->getSession()->id_pessoa) + header('Location: logof.php'); + } + + + function addValidationError($message) { + $this->validationErrors[] = array('message' => utf8_encode($message)); + } + + + function validatesPresenseOfRequiredArgsInReport() { + foreach($this->report->requiredArgs as $requiredArg) { + + if (! isset($this->report->args[$requiredArg]) || empty($this->report->args[$requiredArg])) + $this->addValidationError('Informe um valor no campo "' . $requiredArg . '"'); + } + } + + + function onValidationError() { + $msg = Portabilis_String_Utils::toLatin1('O relatório não pode ser emitido, dica(s):\n\n'); + + foreach ($this->validationErrors as $e) { + $error = Portabilis_String_Utils::escape($e['message']); + $msg .= '- ' . $error . '\n'; + } + + $msg .= '\nPor favor, verifique esta(s) situação(s) e tente novamente.'; + + $msg = Portabilis_String_Utils::toLatin1($msg, array('escape' => false)); + echo " "; + } + + + function renderError($details = "") { + $details = Portabilis_String_Utils::escape($details); + $msg = Portabilis_String_Utils::toLatin1('Ocorreu um erro ao emitir o relatório.') . '\n\n' . $details; + + $msg = Portabilis_String_Utils::toLatin1($msg, array('escape' => false)); + $msg = ""; + + echo $msg; + } + + protected function loadResourceAssets($dispatcher) { + $rootPath = $_SERVER['DOCUMENT_ROOT']; + $controllerName = ucwords($dispatcher->getControllerName()); + $actionName = ucwords($dispatcher->getActionName()); + + $style = "/modules/$controllerName/Assets/Stylesheets/$actionName.css"; + $script = "/modules/$controllerName/Assets/Javascripts/$actionName.js"; + + if (file_exists($rootPath . $style)) + Portabilis_View_Helper_Application::loadStylesheet($this, $style); + + if (file_exists($rootPath . $script)) + Portabilis_View_Helper_Application::loadJavascript($this, $script); + } + + + function appendFixups() { + $js = << + function printReport() { + if (validatesPresenseOfValueInRequiredFields()) { + document.formcadastro.target = '_blank'; + document.formcadastro.submit(); + } + + document.getElementById( 'btn_enviar' ).disabled = false; + } + + +EOT; + $this->appendOutput($js); + } +} diff --git a/ieducar/lib/Portabilis/DataMapper/Utils.php b/ieducar/lib/Portabilis/DataMapper/Utils.php new file mode 100644 index 0000000..8965c72 --- /dev/null +++ b/ieducar/lib/Portabilis/DataMapper/Utils.php @@ -0,0 +1,67 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +/** + * Portabilis_DataMapper_Utils class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_DataMapper_Utils { + + /* + this method returns a data mapper loaded by module_package and model_name, eg: + + $resourceDataMapper = $this->getDataMapperFor('module_package', 'model_name'); + $columns = array('col_1', 'col_2'); + $where = array('col_3' => 'val_1', 'ativo' => '1'); + $orderBy = array('col_4' => 'ASC'); + + $resources = $resourceDataMapper->findAll($columns, $where, $orderBy, $addColumnIdIfNotSet = false); + + */ + public function getDataMapperFor($packageName, $modelName){ + $dataMapperClassName = ucfirst($packageName) . "_Model_" . ucfirst($modelName) . "DataMapper"; + $classPath = str_replace('_', '/', $dataMapperClassName) . '.php'; + + // don't raise any error if the file to be included not exists or it already included. + include_once $classPath; + + if (! class_exists($dataMapperClassName)) + throw new CoreExt_Exception("Class '$dataMapperClassName' not found in path $classPath."); + + return new $dataMapperClassName(); + } + +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Date/Utils.php b/ieducar/lib/Portabilis/Date/Utils.php new file mode 100644 index 0000000..bc1aed5 --- /dev/null +++ b/ieducar/lib/Portabilis/Date/Utils.php @@ -0,0 +1,70 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis_Date + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +/** + * Portabilis_Date_Utils class. + * + * Possui métodos + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package App_Date + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_Date_Utils +{ + /** + * Recebe uma data no formato dd/mm/yyyy e retorna no formato postgres yyyy-mm-dd. + * @param string $date + */ + public static function brToPgSQL($date) { + // #TODO usar classe nativa datetime http://www.phptherightway.com/#date_and_time ? + list($dia, $mes, $ano) = explode("/", $date); + return "$ano-$mes-$dia"; + } + + /** + * Recebe uma data no formato postgres yyyy-mm-dd hh:mm:ss.uuuu e retorna no formato br dd/mm/yyyy hh:mm:ss. + * @param string $timestamp + */ + public static function pgSQLToBr($timestamp) { + $format = 'Y-m-d H:i:s'; + $hasMicroseconds = strpos($timestamp, '.') > -1; + + if ($hasMicroseconds) + $format .= '.u'; + + $d = DateTime::createFromFormat($format, $timestamp); + return ($d ? $d->format('d/m/Y H:i:s') : null); + } +} diff --git a/ieducar/lib/Portabilis/Mailer.php b/ieducar/lib/Portabilis/Mailer.php new file mode 100644 index 0000000..ee8736c --- /dev/null +++ b/ieducar/lib/Portabilis/Mailer.php @@ -0,0 +1,105 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + + +/** + * Portabilis_Mailer class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +// requer bibliotecas Mail e Net_SMTP, ver /scripts/install_pear_packages.sh +require_once 'Mail.php'; + +class Portabilis_Mailer { + + static $selfMailer; + + // #TODO refatorar classe para ser singleton ? + + public function __construct() { + /* Configurações podem ser alteradas em tempo de execução, ex: + $mailerInstance->configs->smtp->username = 'new_username'; */ + + $this->configs = $GLOBALS['coreExt']['Config']->app->mailer; + } + + + public function sendMail($to, $subject, $message) { + $from = "{$this->configs->smtp->from_name} <{$this->configs->smtp->from_email}>"; + $headers = array ('From' => $from, + 'To' => $to, + 'Subject' => $subject); + + $smtp = Mail::factory('smtp', array ('host' => $this->configs->smtp->host, + 'port' => $this->configs->smtp->port, + 'auth' => $this->configs->smtp->auth == '1', + 'username' => $this->configs->smtp->username, + 'password' => $this->configs->smtp->password, + 'debug' => $this->configs->debug == '1', + 'persist' => false)); + + // if defined some allowed domain defined in config, check if $to is allowed + + if (! is_null($this->configs->allowed_domains)) { + foreach ($this->configs->allowed_domains as $domain) { + if (strpos($to, "@$domain") != false) { + $sendResult = ! PEAR::isError($smtp->send($to, $headers, $message)); + break; + } + } + } + else + $sendResult = ! PEAR::isError($smtp->send($to, $headers, $message)); + + error_log("** Sending email from: $from, to: $to, subject: $subject, message: $message"); + error_log("sendResult: $sendResult"); + + return $sendResult; + } + + + static function mail($to, $subject, $message) { + if (! isset(self::$selfMailer)) + self::$selfMailer = new Portabilis_Mailer(); + + return self::$selfMailer->sendMail($to, $subject, $message); + } + + + static protected function host() { + return $_SERVER['HTTP_HOST']; + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Messenger.php b/ieducar/lib/Portabilis/Messenger.php new file mode 100644 index 0000000..4b67902 --- /dev/null +++ b/ieducar/lib/Portabilis/Messenger.php @@ -0,0 +1,102 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + + +/** + * Portabilis_Messenger class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_Messenger { + + public function __construct() { + $this->_msgs = array(); + } + + + public function append($msg, $type="error", $encodeToUtf8 = false, $ignoreIfHasMsgWithType = '') { + if (empty($ignoreIfHasMsgWithType) || ! $this->hasMsgWithType($ignoreIfHasMsgWithType)) { + + if ($encodeToUtf8) + $msg = utf8_encode($msg); + + $this->_msgs[] = array('msg' => $msg, 'type' => $type); + } + } + + + public function hasMsgWithType($type) { + $hasMsg = false; + + foreach ($this->_msgs as $m){ + if ($m['type'] == $type) { + $hasMsg = true; + break; + } + } + + return $hasMsg; + } + + + public function toHtml($tag = 'p') { + $msgs = ''; + + foreach($this->getMsgs() as $m) + $msgs .= "<$tag class='{$m['type']}'>{$m['msg']}"; + + return $msgs; + } + + + public function getMsgs() { + $msgs = array(); + + // expoe explicitamente apenas as chaves 'msg' e 'type', evitando exposição + // indesejada de chaves adicionadas futuramente ao array $this->_msgs + foreach($this->_msgs as $m) + $msgs[] = array('msg' => $m['msg'], 'type' => $m['type']); + + return $msgs; + } + + // merge messages from another messenger with it self + public function merge($anotherMessenger) { + foreach($anotherMessenger->getMsgs() as $msg) { + $this->append($msg['msg'], $msg['type']); + } + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Model/Report/TipoBoletim.php b/ieducar/lib/Portabilis/Model/Report/TipoBoletim.php new file mode 100644 index 0000000..f5ea3e3 --- /dev/null +++ b/ieducar/lib/Portabilis/Model/Report/TipoBoletim.php @@ -0,0 +1,71 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Report + * @subpackage Model + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'CoreExt/Enum.php'; + +/** + * RegraAvaliacao_Model_TipoParecerDescritivo class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Report + * @subpackage Model + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Model_Report_TipoBoletim extends CoreExt_Enum +{ + const BIMESTRAL = 1; + const TRIMESTRAL = 2; + const TRIMESTRAL_CONCEITUAL = 3; + const SEMESTRAL = 4; + const SEMESTRAL_CONCEITUAL = 5; + const SEMESTRAL_EDUCACAO_INFANTIL = 6; + const PARECER_DESCRITIVO_COMPONENTE = 7; + const PARECER_DESCRITIVO_GERAL = 8; + + protected $_data = array( + self::BIMESTRAL => 'Bimestral', + self::TRIMESTRAL => 'Trimestral', + self::TRIMESTRAL_CONCEITUAL => 'Trimestral conceitual', + self::SEMESTRAL => 'Semestral', + self::SEMESTRAL_CONCEITUAL => 'Semestral conceitual', + self::SEMESTRAL_EDUCACAO_INFANTIL => 'Semestral educação infantil', + self::PARECER_DESCRITIVO_COMPONENTE => 'Parecer descritivo por componente curricular', + self::PARECER_DESCRITIVO_GERAL => 'Parecer descritivo geral' + ); + + public static function getInstance() + { + return self::_getInstance(__CLASS__); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Object/Utils.php b/ieducar/lib/Portabilis/Object/Utils.php new file mode 100644 index 0000000..44c8e92 --- /dev/null +++ b/ieducar/lib/Portabilis/Object/Utils.php @@ -0,0 +1,100 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +/** + * Portabilis_Object_Utils class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Object_Utils { + + public static function filterSet($objects, $attrs = array()){ + if (! is_array($objects)) + $objects = array($objects); + + $objectsFiltered = array(); + + foreach($objects as $object) + $objectsFiltered[] = self::filter($object, $attrs); + + return $objectsFiltered; + } + + + /* Retorna um array {key => value, key => value} + de atributos filtrados de um objeto, podendo renomear nome dos attrs, + util para filtrar um objetos a ser retornado por uma api + + $objects - objeto ou array de objetos a ser(em) filtrado(s) + $attrs - atributo ou array de atributos para filtrar objeto, + ex: $attrs = array('cod_escola' => 'id', 'nome') + */ + public static function filter($object, $attrs = array()){ + if (! is_array($attrs)) + $attrs = array($attrs); + + $objectFiltered = array(); + + // apply filter + foreach($attrs as $keyAttr => $valueAtt) { + if (! is_string($keyAttr)) + $keyAttr = $valueAtt; + + $objectFiltered[$valueAtt] = $object->$keyAttr; + } + + return $objectFiltered; + } + + + /* Retorna um array { key => value, key2 => value2 }, filtrados de um array (lista) de objetos, + util para filtar uma lista de objetos a ser usado para criar um input select. + $objects - objeto ou array de objetos a ser(em) filtrado(s) + $keyAttr - nome do atributo respectivo a chave, a filtrar no objeto, + $valueAtt - nome do atributo respectivo ao valor a filtrar no objeto, + */ + public static function asIdValue($objects, $keyAttr, $valueAtt){ + $objectsFiltered = array(); + + if (! is_array($objects)) + $objects = array($objects); + + // apply filter + foreach($objects as $object) + $objectsFiltered[$object->$keyAttr] = $object->$valueAtt; + + return $objectsFiltered; + } +} diff --git a/ieducar/lib/Portabilis/Report/ReportCore.php b/ieducar/lib/Portabilis/Report/ReportCore.php new file mode 100644 index 0000000..c8cca47 --- /dev/null +++ b/ieducar/lib/Portabilis/Report/ReportCore.php @@ -0,0 +1,116 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/Report/ReportFactoryRemote.php'; +require_once 'lib/Portabilis/Array/Utils.php'; + +/** + * Portabilis_Report_ReportCore class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_Report_ReportCore +{ + + function __construct() { + $this->requiredArgs = array(); + $this->args = array(); + + // set required args on construct, because ReportCoreController access it args before call dumps + $this->requiredArgs(); + } + + // wrapper for Portabilis_Array_Utils::merge + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + function addArg($name, $value) { + if (is_string($value)) + $value = utf8_encode($value); + + $this->args[$name] = $value; + } + + function addRequiredArg($name) { + $this->requiredArgs[] = $name; + } + + function validatesPresenseOfRequiredArgs() { + foreach($this->requiredArgs as $requiredArg) { + + if (! isset($this->args[$requiredArg]) || empty($this->args[$requiredArg])) + throw new Exception("The required arg '{$requiredArg}' wasn't set or is empty!"); + } + } + + function dumps($options = array()) { + $defaultOptions = array('report_factory' => null, 'options' => array()); + $options = self::mergeOptions($options, $defaultOptions); + + $this->validatesPresenseOfRequiredArgs(); + + $reportFactory = ! is_null($options['report_factory']) ? $options['report_factory'] : $this->reportFactory(); + + return $reportFactory->dumps($this, $options['options']); + } + + function reportFactory() { + $factoryClassName = $GLOBALS['coreExt']['Config']->report->default_factory; + $factoryClassPath = str_replace('_', '/', $factoryClassName) . '.php'; + + if (! $factoryClassName) + throw new CoreExt_Exception("No report.default_factory defined in configurations!"); + + // don't fail if path not exists. + include_once $factoryClassPath; + + if (! class_exists($factoryClassName)) + throw new CoreExt_Exception("Class '$factoryClassName' not found in path '$factoryClassPath'"); + + return new $factoryClassName(); + } + + // methods that must be overridden + + function templateName() { + throw new Exception("The method 'templateName' must be overridden!"); + } + + function requiredArgs() { + throw new Exception("The method 'requiredArgs' must be overridden!"); + } +} diff --git a/ieducar/lib/Portabilis/Report/ReportFactory.php b/ieducar/lib/Portabilis/Report/ReportFactory.php new file mode 100644 index 0000000..74a3da9 --- /dev/null +++ b/ieducar/lib/Portabilis/Report/ReportFactory.php @@ -0,0 +1,66 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/Array/Utils.php'; + +/** + * Portabilis_Report_ReportFactory class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_Report_ReportFactory +{ + + function __construct() { + $this->config = $GLOBALS['coreExt']['Config']; + $this->settings = array(); + + $this->setSettings($this->config); + } + + // wrapper for Portabilis_Array_Utils::merge + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + function setSettings($config) { + throw new Exception("The method 'setSettings' from class Portabilis_Report_ReportFactory must be overridden!"); + } + + function dumps($report, $options = array()) { + throw new Exception("The method 'dumps' from class Portabilis_Report_ReportFactory must be overridden!"); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Report/ReportFactoryPHPJasperXML.php b/ieducar/lib/Portabilis/Report/ReportFactoryPHPJasperXML.php new file mode 100644 index 0000000..24488a1 --- /dev/null +++ b/ieducar/lib/Portabilis/Report/ReportFactoryPHPJasperXML.php @@ -0,0 +1,108 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/Report/ReportFactory.php'; + +require_once 'relatorios/phpjasperxml/class/fpdf/fpdf.php'; +require_once 'relatorios/phpjasperxml/class/PHPJasperXML.inc'; + +//set_include_path(get_include_path() . PATH_SEPARATOR . 'include/portabilis/libs'); +//require_once 'include/portabilis/libs/XML/RPC2/Client.php'; + +/** + * Portabilis_Report_ReportFactoryPHPJasperXML class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_Report_ReportFactoryPHPJasperXML extends Portabilis_Report_ReportFactory +{ + function setSettings($config) { + $this->settings['db'] = $config->app->database; + $this->settings['logo_file_name'] = $config->report->logo_file_name; + } + + + function loadReportSource($templateName) { + $rootPath = dirname(dirname(dirname(dirname(__FILE__)))); + $fileName = "$templateName.jrxml"; + $filePath = $rootPath . "/modules/Reports/ReportSources/$fileName"; + + if (! file_exists($filePath)) + throw new CoreExt_Exception("Report source '$fileName' not found in path '$filePath'"); + + return simplexml_load_file($filePath); + } + + + function logoPath() { + if (! $this->settings['logo_file_name']) + throw new Exception("No report.logo_file_name defined in configurations!"); + + $rootPath = dirname(dirname(dirname(dirname(__FILE__)))); + $filePath = $rootPath . "/modules/Reports/ReportLogos/{$this->settings['logo_file_name']}"; + + if (! file_exists($filePath)) + throw new CoreExt_Exception("Report logo '{$this->settings['logo_file_name']}' not found in path '$filePath'"); + + return $filePath; + } + + + function dumps($report, $options = array()) { + $defaultOptions = array('add_logo_arg' => true); + $options = self::mergeOptions($options, $defaultOptions); + + if ($options['add_logo_arg']) + $report->addArg('logo', $this->logoPath()); + + $xml = $this->loadReportSource($report->templateName()); + + $builder = new PHPJasperXML(); + $builder->debugsql = false; + $builder->arrayParameter = $report->args; + + $builder->xml_dismantle($xml); + + $builder->transferDBtoArray($this->settings['db']->hostname, + $this->settings['db']->username, + $this->settings['db']->password, + $this->settings['db']->dbname, + $this->settings['db']->port); + + // I: standard output, D: Download file, F: file + $builder->outpage('I'); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/String/Utils.php b/ieducar/lib/Portabilis/String/Utils.php new file mode 100644 index 0000000..32d8220 --- /dev/null +++ b/ieducar/lib/Portabilis/String/Utils.php @@ -0,0 +1,146 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/Array/Utils.php'; + +/** + * Portabilis_String_Utils class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_String_Utils { + + // wrapper for Portabilis_Array_Utils::merge + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + /* splits a string in a array, eg: + + $divisors = array('-', ' '); // or $divisors = '-'; + $options = array('limit' => 2, 'trim' => true); + + Portabilis_String_Utils::split($divisors, '123 - Some value', $options); + => array([0] => '123', [1] => 'Some value'); + */ + public static function split($divisors, $string, $options = array()) { + $result = array($string); + + $defaultOptions = array('limit' => -1, 'trim' => true); + $options = self::mergeOptions($options, $defaultOptions); + + if (! is_array($divisors)) + $divisors = array($divisors); + + foreach ($divisors as $divisor) { + if (is_numeric(strpos($string, $divisor))) { + $result = split($divisor, $string, $options['limit']); + break; + } + } + + if ($options['trim']) + $result = Portabilis_Array_Utils::trim($result); + + return $result; + } + + /* scapes a string, adding backslashes before characters that need to be quoted, + this method is useful to scape values to be inserted via database queries. */ + public static function escape($str) { + return addslashes($str); + } + + /* encodes latin1 strings to utf-8, + this method is useful to return latin1 strings (with accents) stored in db, in json api's. + */ + public static function toUtf8($str, $options = array()) { + $defaultOptions = array('transform' => false, 'escape' => false, 'convert_html_special_chars' => false); + $options = self::mergeOptions($options, $defaultOptions); + + if ($options['escape']) + $str = self::escape($str); + + if ($options['transform']) + $str = ucwords(mb_strtolower($str)); + + $str = utf8_encode($str); + + if ($options['convert_html_special_chars']) + $str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); + + return $str; + } + + /* encodes utf-8 strings to latin1, + this method is useful to store utf-8 string (with accents) get from json api's, in latin1 db's. + */ + public static function toLatin1($str, $options = array()) { + $defaultOptions = array('transform' => false, 'escape' => true, 'convert_html_special_chars' => false); + $options = self::mergeOptions($options, $defaultOptions); + + if ($options['escape']) + $str = self::escape($str); + + if ($options['transform']) + $str = ucwords(mb_strtolower($str)); + + if (mb_detect_encoding($str, 'utf-8, iso-8859-1') == 'UTF-8') + $str = utf8_decode($str); + + if ($options['convert_html_special_chars']) + $str = htmlspecialchars($str, ENT_QUOTES, 'ISO-8859-1'); + + return $str; + } + + public static function camelize($str) { + return str_replace(' ', '', ucwords(str_replace('_', ' ', $str))); + } + + public static function underscore($str) { + $words = preg_split('/(?=[A-Z])/', $str, -1, PREG_SPLIT_NO_EMPTY); + return strtolower(implode('_', $words)); + } + + public static function humanize($str) { + $robotWords = array('_id', 'ref_cod_', 'ref_ref_cod_'); + + foreach ($robotWords as $word) + $str = str_replace($word, '', $str); + + return str_replace('_', ' ', ucwords($str)); + } +} diff --git a/ieducar/lib/Portabilis/Utils/Database.php b/ieducar/lib/Portabilis/Utils/Database.php new file mode 100644 index 0000000..7cd12df --- /dev/null +++ b/ieducar/lib/Portabilis/Utils/Database.php @@ -0,0 +1,123 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/Array/Utils.php'; + +/** + * Portabilis_Utils_Database class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Utils_Database { + + static $_db; + + // wrapper for Portabilis_Array_Utils::merge + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + public static function db() { + if (! isset(self::$_db)) + self::$_db = new clsBanco(); + + return self::$_db; + } + + public static function fetchPreparedQuery($sql, $options = array()) { + $result = array(); + + $defaultOptions = array('params' => array(), + 'show_errors' => true, + 'return_only' => '', + 'messenger' => null); + + $options = self::mergeOptions($options, $defaultOptions); + + // options validations + //if ($options['show_errors'] and is_null($options['messenger'])) + // throw new Exception("When 'show_errors' is true you must pass the option messenger too."); + + + try { + if (self::db()->execPreparedQuery($sql, $options['params']) != false) { + while (self::db()->ProximoRegistro()) + $result[] = self::db()->Tupla(); + + if (in_array($options['return_only'], array('first-line', 'first-row', 'first-record')) and count($result) > 0) + $result = $result[0]; + elseif ($options['return_only'] == 'first-field' and count($result) > 0 and count($result[0]) > 0) + $result = $result[0][0]; + } + } + catch(Exception $e) { + if ($options['show_errors'] and ! is_null($options['messenger'])) + $options['messenger']->append($e->getMessage(), 'error'); + else + throw $e; + } + + return $result; + } + + // helper para consultas que buscam apenas o primeiro campo, + // considera o segundo argumento o array de options esperado por fetchPreparedQuery + // a menos que este não possua um chave params ou não seja um array, + // neste caso o considera como params + public static function selectField($sql, $paramsOrOptions = array()) { + + if (! is_array($paramsOrOptions) || ! isset($paramsOrOptions['params'])) + $paramsOrOptions = array('params' => $paramsOrOptions); + + $paramsOrOptions['return_only'] = 'first-field'; + return self::fetchPreparedQuery($sql, $paramsOrOptions); + } + + // helper para consultas que buscam apenas a primeira linha + // considera o segundo argumento o array de options esperado por fetchPreparedQuery + // a menos que este não possua um chave params ou não seja um array, + // neste caso o considera como params + public static function selectRow($sql, $paramsOrOptions = array()) { + + if (! is_array($paramsOrOptions) || ! isset($paramsOrOptions['params'])) + $paramsOrOptions = array('params' => $paramsOrOptions); + + $paramsOrOptions['return_only'] = 'first-row'; + return self::fetchPreparedQuery($sql, $paramsOrOptions); + } +} diff --git a/ieducar/lib/Portabilis/Utils/Float.php b/ieducar/lib/Portabilis/Utils/Float.php new file mode 100644 index 0000000..5e3a830 --- /dev/null +++ b/ieducar/lib/Portabilis/Utils/Float.php @@ -0,0 +1,77 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/Array/Utils.php'; + +/** + * Portabilis_Utils_Float class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Utils_Float { + + // wrapper for Portabilis_Array_Utils::merge + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + + /* Limita as casas decimais de um numero float, SEM arredonda-lo, + ex: para 4.96, usando limit = 1, retornará 4.9 e não 5. */ + public static function limitDecimal($value, $options = array()) { + if (! is_numeric($value)) + throw new Exception("Value must be numeric!"); + elseif(is_integer($value)) + return (float)$value; + + $locale = localeconv(); + + $defaultOptions = array('limit' => 2, + 'decimal_point' => $locale['decimal_point'], + 'thousands_sep' => $locale['thousands_sep']); + + $options = self::mergeOptions($options, $defaultOptions); + + + // split the values after and before the decimal point. + $digits = explode($options['decimal_point'], (string)$value); + + // limit the decimal using the limit option (defaults to 2), eg: .96789 will be limited to .96 + $digits[1] = substr($digits[1], 0, $options['limit']); + + // join the the digits and convert it to float, eg: '4' and '96', will be '4.96' + return (float)($digits[0] . '.' . $digits[1]); + } +} diff --git a/ieducar/lib/Portabilis/Utils/ReCaptcha.php b/ieducar/lib/Portabilis/Utils/ReCaptcha.php new file mode 100644 index 0000000..f649af9 --- /dev/null +++ b/ieducar/lib/Portabilis/Utils/ReCaptcha.php @@ -0,0 +1,57 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +// requer a biblioteca Services_ReCaptcha, ver /scripts/install_pear_packages.sh +require_once 'Services/ReCaptcha.php'; + +/** + * Portabilis_Utils_ReCaptcha class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_Utils_ReCaptcha { + + static function getWidget() { + $recaptchaConfigs = $GLOBALS['coreExt']['Config']->app->recaptcha; + $recaptcha = new Services_ReCaptcha($recaptchaConfigs->public_key, + $recaptchaConfigs->private_key, + array('lang' => $recaptchaConfigs->options->lang, + 'theme' => $recaptchaConfigs->options->theme, + 'secure' => $recaptchaConfigs->options->secure == '1')); + return $recaptcha; + } + +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Utils/User.php b/ieducar/lib/Portabilis/Utils/User.php new file mode 100644 index 0000000..a68731d --- /dev/null +++ b/ieducar/lib/Portabilis/Utils/User.php @@ -0,0 +1,189 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +/** + * Portabilis_Utils_User class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Utils_User { + + static $_currentUserId; + static $_nivelAcesso; + static $_permissoes; + + static function currentUserId() { + if (! isset(self::$_currentUserId)) { + @session_start(); + self::$_currentUserId = $_SESSION['id_pessoa']; + session_write_close(); + } + + return self::$_currentUserId; + } + + static function redirectToLogoff() { + header('Location: /intranet/logof.php'); + } + + + static function loggedIn(){ + return is_numeric(self::currentUserId()); + } + + // database helpers + + static function loadUsingCredentials($username, $password) { + $sql = "SELECT ref_cod_pessoa_fj FROM portal.funcionario WHERE matricula = $1 and senha = $2"; + $options = array('params' => array($username, $password), 'show_errors' => false, 'return_only' => 'first-field'); + $userId = self::fetchPreparedQuery($sql, $options); + + if (is_numeric($userId)) + return self::load($userId); + + return null; + } + + // TODO usar modules/Usuario/Model/Funcionario ao invés de executar select + static function load($id) { + if ($id == 'current_user') + $id = self::currentUserId(); + elseif (! is_numeric($id)) + throw new Exception("'$id' is not a valid id, please send a numeric value or a string 'current_user'"); + + $sql = "SELECT ref_cod_pessoa_fj as id, opcao_menu, ref_cod_setor_new, tipo_menu, matricula, email, status_token, + ativo, proibido, tempo_expira_conta, data_reativa_conta, tempo_expira_senha, data_troca_senha, + ip_logado as ip_ultimo_acesso, data_login FROM portal.funcionario WHERE ref_cod_pessoa_fj = $1"; + + $options = array('params' => array($id), 'show_errors' => false, 'return_only' => 'first-line'); + $user = self::fetchPreparedQuery($sql, $options); + $user['super'] = $GLOBALS['coreExt']['Config']->app->superuser == $user['matricula']; + + + /* considera como expirado caso usuario não admin e data_reativa_conta + tempo_expira_conta <= now + obs: ao salvar drh > cadastro funcionario, seta data_reativa_conta = now */ + $user['expired_account'] = ! $user['super'] && ! empty($user['tempo_expira_conta']) && + ! empty($user['data_reativa_conta']) && + time() - strtotime($user['data_reativa_conta']) > $user['tempo_expira_conta'] * 60 * 60 * 24; + + + // considera o periodo para expiração de senha definido nas configs, caso o tenha sido feito. + $tempoExpiraSenha = $GLOBALS['coreExt']['Config']->app->user_accounts->default_password_expiration_period; + + if (! is_numeric($tempoExpiraSenha)) + $tempoExpiraSenha = $user['tempo_expira_senha']; + + /* considera como expirado caso data_troca_senha + tempo_expira_senha <= now */ + $user['expired_password'] = ! empty($user['data_troca_senha']) && ! empty($tempoExpiraSenha) && + time() - strtotime($user['data_troca_senha']) > $tempoExpiraSenha * 60 * 60 * 24; + + return $user; + } + + + static function disableAccount($userId) { + $sql = "UPDATE portal.funcionario SET ativo = 0 WHERE ref_cod_pessoa_fj = $1"; + $options = array('params' => array($userId), 'show_errors' => false); + + self::fetchPreparedQuery($sql, $options); + } + + + /* + Destroi determinado tipo de status_token de um usuário, como ocorre por exemplo após fazer login, + onde solicitações de redefinição de senha em aberto são destruidas. + */ + static function destroyStatusTokenFor($userId, $withType) { + $sql = "UPDATE portal.funcionario set status_token = '' WHERE ref_cod_pessoa_fj = $1 and status_token like $2"; + $options = array('params' => array($userId, "$withType-%"), 'show_errors' => false); + + self::fetchPreparedQuery($sql, $options); + } + + + static function logAccessFor($userId, $clientIP) { + $sql = "UPDATE portal.funcionario SET ip_logado = '$clientIP', data_login = NOW() WHERE ref_cod_pessoa_fj = $1"; + $options = array('params' => array($userId), 'show_errors' => false); + + self::fetchPreparedQuery($sql, $options); + } + + + + // permissões + + static function getClsPermissoes() { + if (! isset(self::$_permissoes)) + self::$_permissoes = new clsPermissoes(); + + return self::$_permissoes; + } + + + static function getNivelAcesso() { + if (! isset(self::$_nivelAcesso)) + self::$_nivelAcesso = self::getClsPermissoes()->nivel_acesso(self::currentUserId()); + + return self::$_nivelAcesso; + } + + + # TODO verificar se é possivel usar a logica de App_Model_NivelAcesso + static function hasNivelAcesso($nivelAcessoType) { + $niveisAcesso = array('POLI_INSTITUCIONAL' => 1, + 'INSTITUCIONAL' => 2, + 'SOMENTE_ESCOLA' => 4, + 'SOMENTE_BIBLIOTECA' => 8); + + if (! isset($niveisAcesso[$nivelAcessoType])) + throw new CoreExt_Exception("Nivel acesso '$nivelAcessoType' não definido."); + + return self::getNivelAcesso() == $niveisAcesso[$nivelAcessoType]; + } + + + static function canAccessEscola($id) { + return (self::hasNivelAcesso('POLI_INSTITUCIONAL') || + self::hasNivelAcesso('INSTITUCIONAL') || + self::getClsPermissoes()->getEscola(self::currentUserId()) == $id); + } + + + // wrappers for Portabilis*Utils* + + protected static function fetchPreparedQuery($sql, $options = array()) { + return Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/Validator.php b/ieducar/lib/Portabilis/Validator.php new file mode 100644 index 0000000..12330c0 --- /dev/null +++ b/ieducar/lib/Portabilis/Validator.php @@ -0,0 +1,157 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'include/clsBanco.inc.php'; +require_once 'CoreExt/Exception.php'; +require_once 'lib/Portabilis/Utils/Database.php'; + +/** + * Portabilis_Validator class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_Validator { + + public function __construct(&$messenger) { + $this->messenger = $messenger; + } + + + // TODO refatorar todos metodos, para não receber mais argumento $raiseException* + + /* TODO refatorar todos metodos, para não receber mais argumento $addMsg* + caso $msg falso pode-se disparar erro */ + + public function validatesPresenceOf(&$value, $name, $raiseExceptionOnFail = false, $msg = '', $addMsgOnEmpty = true){ + if (! isset($value) || (empty($value) && !is_numeric($value))){ + if ($addMsgOnEmpty) + { + $msg = empty($msg) ? "É necessário receber uma variavel '$name'" : $msg; + $this->messenger->append($msg); + } + + if ($raiseExceptionOnFail) + throw new CoreExt_Exception($msg); + + return false; + } + return true; + } + + + public function validatesValueIsNumeric(&$value, $name, $raiseExceptionOnFail = false, $msg = '', $addMsgOnError = true){ + if (! is_numeric($value)){ + if ($addMsgOnError) + { + $msg = empty($msg) ? "O valor recebido para variavel '$name' deve ser numerico" : $msg; + $this->messenger->append($msg); + } + + if ($raiseExceptionOnFail) + throw new CoreExt_Exception($msg); + + return false; + } + return true; + } + + + public function validatesValueIsArray(&$value, $name, $raiseExceptionOnFail = false, $msg = '', $addMsgOnError = true){ + + if (! is_array($value)){ + if ($addMsgOnError) { + $msg = empty($msg) ? "Deve ser recebido uma lista de '$name'" : $msg; + $this->messenger->append($msg); + } + + if ($raiseExceptionOnFail) + throw new CoreExt_Exception($msg); + + return false; + } + return true; + } + + + public function validatesValueInSetOf(&$value, $setExpectedValues, $name, $raiseExceptionOnFail = false, $msg = ''){ + if (! empty($setExpectedValues) && ! in_array($value, $setExpectedValues)){ + $msg = empty($msg) ? "Valor recebido na variavel '$name' é invalido" : $msg; + $this->messenger->append($msg); + + if ($raiseExceptionOnFail) + throw new CoreExt_Exception($msg); + + return false; + } + + return true; + } + + public function validatesValueIsInBd($fieldName, &$value, $schemaName, $tableName, $raiseExceptionOnFail = true, $addMsgOnError = true){ + $sql = "select 1 from $schemaName.$tableName where $fieldName = $1 limit 1"; + + if (Portabilis_Utils_Database::selectField($sql, $value) != 1){ + if ($addMsgOnError) { + $msg = "O valor informado {$value} para $tableName, não esta presente no banco de dados."; + $this->messenger->append($msg); + } + + if ($raiseExceptionOnFail) + throw new CoreExt_Exception($msg); + + return false; + } + + return true; + } + + public function validatesValueNotInBd($fieldName, &$value, $schemaName, $tableName, $raiseExceptionOnFail = true, $addMsgOnError = true){ + $sql = "select 1 from $schemaName.$tableName where $fieldName = $1 limit 1"; + + if (Portabilis_Utils_Database::selectField($sql, $value) == 1) { + if ($addMsgOnError) { + $msg = "O valor informado {$value} para $tableName já existe no banco de dados."; + $this->messenger->append($msg); + } + + if ($raiseExceptionOnFail) + throw new CoreExt_Exception($msg); + + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Application.php b/ieducar/lib/Portabilis/View/Helper/Application.php new file mode 100644 index 0000000..113b432 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Application.php @@ -0,0 +1,186 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'CoreExt/View/Helper/Abstract.php'; +require_once 'Portabilis/Assets/Version.php'; + +/** + * ApplicationHelper class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_View_Helper_Application extends CoreExt_View_Helper_Abstract { + + // previne carregar mais de uma vez o mesmo asset js ou css + protected static $javascriptsLoaded = array(); + protected static $stylesheetsLoaded = array(); + + + /** + * Construtor singleton. + */ + protected function __construct() + { + } + + + /** + * Retorna uma instância singleton. + * @return CoreExt_View_Helper_Abstract + */ + public static function getInstance() + { + return self::_getInstance(__CLASS__); + } + + + + /** + * Adiciona elementos chamadas scripts javascript para instancia da view recebida, exemplo: + * + * + * $applicationHelper->javascript($viewInstance, array('/modules/ModuleName/Assets/Javascripts/ScriptName.js', '...')); + * + * + * @param object $viewInstance Istancia da view a ser carregado os scripts. + * @param array ou string $files Lista de scripts a serem carregados. + * @return null + */ + public static function loadJavascript($viewInstance, $files, $expireCacheDateFormat = 'dmY') { + if (! is_array($files)) + $files = array($files); + + foreach ($files as $file) { + // somente carrega o asset uma vez + if (! in_array($file, self::$javascriptsLoaded)) { + self::$javascriptsLoaded[] = $file; + + // cache controll + $file .= '?assets_version=' . Portabilis_Assets_Version::VERSION; + $file .= $expireCacheDateFormat ? '×tamp=' . date($expireCacheDateFormat) : ''; + + $viewInstance->appendOutput(""); + } + } + } + + + /** + * Adiciona links css para instancia da view recebida, exemplo: + * + * + * $applicationHelper->stylesheet($viewInstance, array('/modules/ModuleName/Assets/Stylesheets/StyleName.css', '...')); + * + * + * @param object $viewInstance1 Istancia da view a ser adicionado os links para os estilos. + * @param array ou string $files Lista de estilos a serem carregados. + * @return null + */ + public static function loadStylesheet($viewInstance, $files, $expireCacheDateFormat = 'dmY') { + if (! is_array($files)) + $files = array($files); + + foreach ($files as $file) { + // somente carrega o asset uma vez + if (! in_array($file, self::$stylesheetsLoaded)) { + self::$stylesheetsLoaded[] = $file; + + // cache controll + $file .= '?assets_version=' . Portabilis_Assets_Version::VERSION; + $file .= $expireCacheDateFormat ? '×tamp=' . date($expireCacheDateFormat) : ''; + + $viewInstance->appendOutput(""); + } + } + } + + + public static function embedJavascript($viewInstance, $script, $afterReady = false) { + if ($afterReady) { + self::loadJQueryLib($viewInstance); + + $script = "(function($){ + $(document).ready(function(){ + $script + }); + })(jQuery);"; + } + + $viewInstance->appendOutput(""); + } + + + public static function embedStylesheet($viewInstance, $css) { + $viewInstance->appendOutput(""); + } + + public static function embedJavascriptToFixupFieldsWidth($viewInstance) { + Portabilis_View_Helper_Application::loadJQueryLib($viewInstance); + + Portabilis_View_Helper_Application::loadJavascript( + $viewInstance, '/modules/Portabilis/Assets/Javascripts/Utils.js' + ); + + Portabilis_View_Helper_Application::embedJavascript( + $viewInstance, 'fixupFieldsWidth();', $afterReady = true + ); + + } + + // load lib helpers + + public static function loadJQueryLib($viewInstance) { + self::loadJavascript($viewInstance, '//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', false); + self::embedJavascript($viewInstance, "if (typeof(\$j) == 'undefined') { var \$j = jQuery.noConflict(); }"); + } + + + public static function loadJQueryFormLib($viewInstance) { + self::loadJavascript($viewInstance, 'scripts/jquery/jquery.form.js', false); + } + + + public static function loadJQueryUiLib($viewInstance) { + self::loadJavascript($viewInstance, '//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js', false); + self::loadStylesheet($viewInstance, '//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/themes/ui-lightness/jquery-ui.css', false); + + // ui-autocomplete fixup + self::embedStylesheet($viewInstance, ".ui-autocomplete { font-size: 11px; }"); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Ano.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Ano.php new file mode 100644 index 0000000..f91897f --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Ano.php @@ -0,0 +1,19 @@ +inputsHelper()->dynamic('ano'); + para $this->inputsHelper()->input('ano'); + +*/ + +if (strpos($_SERVER['HTTP_HOST'], 'local') > -1) + echo "Helper DynamicInput_Ano DEPRECADO"; + +class Portabilis_View_Helper_DynamicInput_Ano extends Portabilis_View_Helper_Input_Ano { +} diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/AnoLetivo.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/AnoLetivo.php new file mode 100644 index 0000000..663c203 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/AnoLetivo.php @@ -0,0 +1,89 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; +require_once 'lib/Portabilis/Utils/Database.php'; + +/** + * Portabilis_View_Helper_DynamicInput_AnoLetivo class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_AnoLetivo extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + // subscreve para não acrescentar '_id' no final + protected function inputName() { + return 'ano'; + } + + protected function filtroSituacao() { + $tiposSituacao = array('nao_iniciado' => 0, 'em_andamento' => 1, 'finalizado' => 2); + $situacaoIn = array(); + + foreach ($tiposSituacao as $nome => $flag) { + if (in_array("$nome", $this->options['situacoes'])) + $situacaoIn[] = $flag; + } + + return (empty($situacaoIn) ? '' : 'and andamento in ('. implode(',', $situacaoIn) . ')'); + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $escolaId = $this->getEscolaId($options['escolaId']); + + if ($escolaId && empty($resources)) { + $sql = "select ano from pmieducar.escola_ano_letivo as al where ref_cod_escola = $1 + and ativo = 1 {$this->filtroSituacao()} order by ano desc"; + + $resources = Portabilis_Utils_Database::fetchPreparedQuery($sql, array('params' => $escolaId)); + $resources = Portabilis_Array_Utils::setAsIdValue($resources, 'ano', 'ano'); + } + + return $this->insertOption(null, "Selecione um ano letivo", $resources); + } + + protected function defaultOptions() { + return array('escolaId' => null, 'situacoes' => array('em_andamento', 'nao_iniciado', 'finalizado')); + } + + public function anoLetivo($options = array()) { + parent::select($options); + + foreach ($this->options['situacoes'] as $situacao) + $this->viewInstance->appendOutput(""); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Biblioteca.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Biblioteca.php new file mode 100644 index 0000000..069394e --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Biblioteca.php @@ -0,0 +1,113 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + +/** + * Portabilis_View_Helper_DynamicInput_Biblioteca class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Biblioteca extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputValue($value = null) { + return $this->getBibliotecaId($value); + } + + + protected function inputName() { + return 'ref_cod_biblioteca'; + } + + + protected function inputOptions($options) { + $resources = $options['resources']; + $instituicaoId = $this->getInstituicaoId(); + $escolaId = $this->getEscolaId(); + + if ($instituicaoId and $escolaId and empty($resources)) { + // se possui id escola então filtra bibliotecas pelo id desta escola + $resources = App_Model_IedFinder::getBibliotecas($instituicaoId, $escolaId); + } + + return $this->insertOption(null, "Selecione uma biblioteca", $resources); + } + + + public function selectInput($options = array()) { + parent::select($options); + } + + + public function stringInput($options = array()) { + $defaultOptions = array('options' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + // subescreve $options['options']['value'] com nome escola + if (isset($options['options']['value']) && $options['options']['value']) + $bibliotecaId = $options['options']['value']; + else + $bibliotecaId = $this->getBibliotecaId($options['id']); + + $biblioteca = App_Model_IedFinder::getBiblioteca($bibliotecaId); + $options['options']['value'] = $biblioteca['nm_biblioteca']; + + $defaultInputOptions = array('id' => 'ref_cod_biblioteca', + 'label' => 'Biblioteca', + 'value' => '', + 'inline' => false, + 'descricao' => '', + 'separador' => ':'); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + + $this->viewInstance->campoOculto($inputOptions['id'], $bibliotecaId); + + $inputOptions['id'] = 'biblioteca_nome'; + call_user_func_array(array($this->viewInstance, 'campoRotulo'), $inputOptions); + } + + + public function biblioteca($options = array()) { + if ($this->hasNivelAcesso('POLI_INSTITUCIONAL') || $this->hasNivelAcesso('INSTITUCIONAL')) + $this->selectInput($options); + + elseif($this->hasNivelAcesso('SOMENTE_ESCOLA') || $this->hasNivelAcesso('SOMENTE_BIBLIOTECA')) + $this->stringInput($options); + + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, '/modules/DynamicInput/Assets/Javascripts/Biblioteca.js'); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaFonte.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaFonte.php new file mode 100644 index 0000000..38dfdf7 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaFonte.php @@ -0,0 +1,64 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_BibliotecaFonte class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_BibliotecaFonte extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_fonte'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $bibliotecaId = $this->getBibliotecaId(); + + if ($bibliotecaId and empty($resources)) + $resources = App_Model_IedFinder::getBibliotecaFontes($bibliotecaId); + + return $this->insertOption(null, "Selecione uma fonte", $resources); + } + + public function bibliotecaFonte($options = array()) { + parent::select($options); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaCliente.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaCliente.php new file mode 100644 index 0000000..82b44ac --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaCliente.php @@ -0,0 +1,110 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_BibliotecaPesquisaCliente class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_BibliotecaPesquisaCliente extends Portabilis_View_Helper_DynamicInput_Core { + + + protected function getResourceId($id = null) { + if (! $id && $this->viewInstance->ref_cod_cliente) + $id = $this->viewInstance->ref_cod_cliente; + + return $id; + } + + + public function bibliotecaPesquisaCliente($options = array()) { + $defaultOptions = array('id' => null, 'options' => array(), 'hiddenInputOptions' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $inputHint = ""; + + // input + $defaultInputOptions = array('id' => 'nome_cliente', + 'label' => 'Cliente', + 'value' => '', + 'size' => '30', + 'max_length' => '255', + 'required' => true, + 'expressao' => false, + 'inline' => false, + 'label_hint' => '', + 'input_hint' => $inputHint, + 'callback' => '', + 'event' => 'onKeyUp', + 'disabled' => true); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoTexto'), $inputOptions); + + // hidden input + $defaultHiddenInputOptions = array('id' => 'ref_cod_cliente', + 'value' => $this->getResourceId($options['id'])); + + $hiddenInputOptions = $this->mergeOptions($options['hiddenInputOptions'], $defaultHiddenInputOptions); + call_user_func_array(array($this->viewInstance, 'campoOculto'), $hiddenInputOptions); + + // js + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, ' + var resetCliente = function(){ + $("#ref_cod_cliente").val(""); + $("#nome_cliente").val(""); + } + + $("#ref_cod_biblioteca").change(resetCliente);', true); + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, " + function pesquisaCliente() { + var additionalFields = getElementFor('biblioteca'); + var exceptFields = getElementFor('nome_cliente'); + + if (validatesPresenseOfValueInRequiredFields(additionalFields, exceptFields)) { + var bibliotecaId = getElementFor('biblioteca').val(); + var attrIdName = getElementFor('cliente').attr('id'); + + pesquisa_valores_popless('educar_pesquisa_cliente_lst.php?campo1='+attrIdName+'&campo2=nome_cliente&ref_cod_biblioteca='+bibliotecaId); + } + } + "); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaObra.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaObra.php new file mode 100644 index 0000000..616955e --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaPesquisaObra.php @@ -0,0 +1,124 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_BibliotecaPesquisaObra class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_BibliotecaPesquisaObra extends Portabilis_View_Helper_DynamicInput_Core { + + protected function getAcervoId($id = null) { + if (! $id && $this->viewInstance->ref_cod_acervo) + $id = $this->viewInstance->ref_cod_acervo; + + return $id; + } + + + protected function getObra($id) { + if (! $id) + $id = $this->getAcervoId($id); + + // chama finder somente se possuir id, senão ocorrerá exception + $obra = empty($id) ? null : App_Model_IedFinder::getBibliotecaObra($this->getBibliotecaId(), $id); + + return $obra; + } + + + public function bibliotecaPesquisaObra($options = array()) { + $defaultOptions = array('id' => null, 'options' => array(), 'hiddenInputOptions' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $inputHint = ""; + + // se não recuperar obra, deixa titulo em branco + $obra = $this->getObra($options['id']); + $tituloObra = $obra ? $obra['titulo'] : ''; + + $defaultInputOptions = array('id' => 'titulo_obra', + 'label' => 'Obra', + 'value' => $tituloObra, + 'size' => '30', + 'max_length' => '255', + 'required' => true, + 'expressao' => false, + 'inline' => false, + 'label_hint' => '', + 'input_hint' => $inputHint, + 'callback' => '', + 'event' => 'onKeyUp', + 'disabled' => true); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoTexto'), $inputOptions); + + // hidden input + $defaultHiddenInputOptions = array('id' => 'ref_cod_acervo', + 'value' => $this->getAcervoId($options['id'])); + + $hiddenInputOptions = $this->mergeOptions($options['hiddenInputOptions'], $defaultHiddenInputOptions); + call_user_func_array(array($this->viewInstance, 'campoOculto'), $hiddenInputOptions); + + // Ao selecionar obra, na pesquisa de obra é setado o value deste elemento + $this->viewInstance->campoOculto("cod_biblioteca", ""); + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, ' + var resetObra = function(){ + $("#ref_cod_acervo").val(""); + $("#titulo_obra").val(""); + } + + $("#ref_cod_biblioteca").change(resetObra);', true); + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, ' + function pesquisaObra() { + + var additionalFields = getElementFor("biblioteca"); + var exceptFields = getElementFor("titulo_obra"); + + if (validatesPresenseOfValueInRequiredFields(additionalFields, exceptFields)) { + var bibliotecaId = getElementFor("biblioteca").val(); + + pesquisa_valores_popless("educar_pesquisa_obra_lst.php?campo1=ref_cod_acervo&campo2=titulo_obra&campo3="+bibliotecaId) + } + }'); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaSituacao.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaSituacao.php new file mode 100644 index 0000000..62ea026 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaSituacao.php @@ -0,0 +1,64 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_BibliotecaSituacao class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_BibliotecaSituacao extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_situacao'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $bibliotecaId = $this->getBibliotecaId(); + + if ($bibliotecaId and empty($resources)) + $resources = App_Model_IedFinder::getBibliotecaSituacoes($bibliotecaId); + + return $this->insertOption(null, "Selecione uma situação", $resources); + } + + public function bibliotecaSituacao($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoCliente.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoCliente.php new file mode 100644 index 0000000..46feabf --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoCliente.php @@ -0,0 +1,68 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_BibliotecaTipoCliente class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_BibliotecaTipoCliente extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_cliente_tipo'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $bibliotecaId = $this->getBibliotecaId(); + + if ($bibliotecaId and empty($resources)) + $resources = App_Model_IedFinder::getBibliotecaTiposCliente($bibliotecaId); + + return $this->insertOption(null, "Selecione um tipo de cliente", $resources); + } + + protected function defaultOptions(){ + return array('options' => array('label' => 'Tipo cliente')); + } + + public function bibliotecaTipoCliente($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoExemplar.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoExemplar.php new file mode 100644 index 0000000..626a33e --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/BibliotecaTipoExemplar.php @@ -0,0 +1,79 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_BibliotecaTipoExemplar class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_BibliotecaTipoExemplar extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_exemplar_tipo'; + } + + protected function inputOptions($options) { + $bibliotecaId = $this->getBibliotecaId($bibliotecaId); + $resources = $options['resources']; + + if (empty($resources) && $bibliotecaId) { + $columns = array('cod_exemplar_tipo', 'nm_tipo'); + $where = array('ref_cod_biblioteca' => $bibliotecaId, 'ativo' => '1'); + $orderBy = array('nm_tipo' => 'ASC'); + + $resources = $this->getDataMapperFor('biblioteca', 'tipoExemplar')->findAll($columns, + $where, + $orderBy, + $addColumnIdIfNotSet = false); + + $resources = Portabilis_Object_Utils::asIdValue($resources, 'cod_exemplar_tipo', 'nm_tipo'); + } + + return $this->insertOption(null, "Selecione um tipo de exemplar", $resources); + } + + protected function defaultOptions(){ + return array('options' => array('label' => 'Tipo exemplar')); + } + + public function bibliotecaTipoExemplar($options = array()) { + parent::select($options); + } + +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/ComponenteCurricular.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/ComponenteCurricular.php new file mode 100644 index 0000000..3b4df4f --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/ComponenteCurricular.php @@ -0,0 +1,82 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_ComponenteCurricular class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_ComponenteCurricular extends Portabilis_View_Helper_DynamicInput_Core { + + protected function getResourceId($id = null) { + if (! $id && $this->viewInstance->ref_cod_componente_curricular) + $id = $this->viewInstance->ref_cod_componente_curricular; + + return $id; + } + + protected function getOptions($turmaId, $resources) { + return $this->insertOption(null, "Selecione um componente curricular", array()); + } + + public function componenteCurricular($options = array()) { + $defaultOptions = array('id' => null, + 'turmaId' => null, + 'options' => array(), + 'resources' => array()); + + $options = $this->mergeOptions($options, $defaultOptions); + $resources = $this->getOptions($options['turmaId'], $options['resources']); + + $defaultSelectOptions = array('id' => 'ref_cod_componente_curricular', + 'label' => 'Componente Curricular', + 'componentes_curriculares' => $resources, + 'value' => $this->getResourceId($options['id']), + 'callback' => '', + 'inline' => false, + 'label_hint' => '', + 'input_hint' => '', + 'disabled' => false, + 'required' => true, + 'multiple' => false); + + $selectOptions = $this->mergeOptions($options['options'], $defaultSelectOptions); + call_user_func_array(array($this->viewInstance, 'campoLista'), $selectOptions); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Core.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Core.php new file mode 100644 index 0000000..1121c5a --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Core.php @@ -0,0 +1,52 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + +/** + * Portabilis_View_Helper_DynamicInput_Core class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Core extends Portabilis_View_Helper_Input_Core { + + protected function loadCoreAssets() { + parent::loadCoreAssets(); + + $dependencies = array('/modules/DynamicInput/Assets/Javascripts/DynamicInput.js'); + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $dependencies); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php new file mode 100644 index 0000000..abaca57 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php @@ -0,0 +1,52 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/CoreSelect.php'; + +/** + * Portabilis_View_Helper_DynamicInput_CoreSelect class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_CoreSelect extends Portabilis_View_Helper_Input_CoreSelect { + + protected function loadCoreAssets() { + parent::loadCoreAssets(); + + $dependencies = array('/modules/DynamicInput/Assets/Javascripts/DynamicInput.js'); + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $dependencies); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Curso.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Curso.php new file mode 100644 index 0000000..8a1ca8c --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Curso.php @@ -0,0 +1,71 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; +require_once 'Portabilis/Business/Professor.php'; + +/** + * Portabilis_View_Helper_DynamicInput_Curso class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Curso extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_curso'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $instituicaoId = $this->getInstituicaoId($options['instituicaoId']); + $escolaId = $this->getEscolaId($options['escolaId']); + $userId = $this->getCurrentUserId(); + $isProfessor = Portabilis_Business_Professor::isProfessor($instituicaoId, $userId); + + if ($instituicaoId and $escolaId and empty($resources) and $isProfessor) { + $cursos = Portabilis_Business_Professor::cursosAlocado($instituicaoId, $escolaId, $userId); + $resources = Portabilis_Array_Utils::setAsIdValue($cursos, 'id', 'nome'); + } + elseif ($escolaId && empty($resources)) + $resources = App_Model_IedFinder::getCursos($escolaId); + + return $this->insertOption(null, "Selecione um curso", $resources); + } + + public function curso($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/DataFinal.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/DataFinal.php new file mode 100644 index 0000000..a172997 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/DataFinal.php @@ -0,0 +1,71 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_DataFinal class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_DataFinal extends Portabilis_View_Helper_DynamicInput_Core { + protected function inputValue($value = null) { + if (! $value && $this->viewInstance->data_final) + $value = $this->viewInstance->data_final; + else + $value = date('t/m/Y'); + + return $value; + } + + public function dataFinal($options = array()) { + $defaultOptions = array('options' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $defaultInputOptions = array('id' => 'data_final', + 'label' => 'Data final', + 'value' => $this->inputValue($options['options']['value']), + 'required' => true, + 'label_hint' => '', + 'inline' => false, + 'callback' => false, + 'disabled' => false); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoData'), $inputOptions); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/DataInicial.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/DataInicial.php new file mode 100644 index 0000000..e362a05 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/DataInicial.php @@ -0,0 +1,71 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_DataInicial class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_DataInicial extends Portabilis_View_Helper_DynamicInput_Core { + protected function inputValue($value = null) { + if (! $value && $this->viewInstance->data_inicial) + $value = $this->viewInstance->data_inicial; + else + $value = date('01/m/Y'); + + return $value; + } + + public function dataInicial($options = array()) { + $defaultOptions = array('options' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $defaultInputOptions = array('id' => 'data_inicial', + 'label' => 'Data inicial', + 'value' => $this->inputValue($options['options']['value']), + 'required' => true, + 'label_hint' => '', + 'inline' => false, + 'callback' => false, + 'disabled' => false); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoData'), $inputOptions); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Escola.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Escola.php new file mode 100644 index 0000000..bb227d4 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Escola.php @@ -0,0 +1,121 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; +require_once 'Portabilis/Business/Professor.php'; + +/** + * Portabilis_View_Helper_DynamicInput_Escola class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Escola extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputValue($value = null) { + return $this->getEscolaId($value); + } + + + protected function inputName() { + return 'ref_cod_escola'; + } + + + protected function inputOptions($options) { + $resources = $options['resources']; + $instituicaoId = $this->getInstituicaoId($options['instituicaoId']); + $userId = $this->getCurrentUserId(); + $isProfessor = Portabilis_Business_Professor::isProfessor($instituicaoId, $userId); + + if ($instituicaoId and empty($resources) and $isProfessor) { + $escolas = Portabilis_Business_Professor::escolasAlocado($instituicaoId, $userId); + $resources = Portabilis_Array_Utils::setAsIdValue($escolas, 'id', 'nome'); + } + elseif ($instituicaoId and empty($resources)) + $resources = App_Model_IedFinder::getEscolas($instituicaoId); + + + return $this->insertOption(null, "Selecione uma escola", $resources); + } + + + public function selectInput($options = array()) { + parent::select($options); + } + + + public function stringInput($options = array()) { + $defaultOptions = array('options' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + // subescreve $options['options']['value'] com nome escola + if (isset($options['options']['value']) && $options['options']['value']) + $escolaId = $options['options']['value']; + else + $escolaId = $this->getEscolaId($options['id']); + + $escola = App_Model_IedFinder::getEscola($escolaId); + $options['options']['value'] = $escola['nome']; + + $defaultInputOptions = array('id' => 'ref_cod_escola', + 'label' => 'Escola', + 'value' => '', + 'inline' => false, + 'descricao' => '', + 'separador' => ':'); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + + $this->viewInstance->campoOculto($inputOptions['id'], $escolaId); + + $inputOptions['id'] = 'escola_nome'; + call_user_func_array(array($this->viewInstance, 'campoRotulo'), $inputOptions); + } + + + public function escola($options = array()) { + $isProfessor = Portabilis_Business_Professor::isProfessor($this->getInstituicaoId($options['instituicaoId']), + $this->getCurrentUserId()); + + if ($this->hasNivelAcesso('POLI_INSTITUCIONAL') || $this->hasNivelAcesso('INSTITUCIONAL') || $isProfessor) + $this->selectInput($options); + + elseif($this->hasNivelAcesso('SOMENTE_ESCOLA') || $this->hasNivelAcesso('SOMENTE_BIBLIOTECA')) + $this->stringInput($options); + + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, '/modules/DynamicInput/Assets/Javascripts/Escola.js'); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Etapa.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Etapa.php new file mode 100644 index 0000000..b09332e --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Etapa.php @@ -0,0 +1,60 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_Etapa class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Etapa extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + // subscreve para não acrescentar '_id' no final + protected function inputName() { + return 'etapa'; + } + + protected function inputOptions($options) { + // não implementado load resources ainda, por enquanto busca somente com ajax. + return $this->insertOption(null, "Selecione uma etapa", $resources); + } + + public function etapa($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Instituicao.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Instituicao.php new file mode 100644 index 0000000..c2475c2 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Instituicao.php @@ -0,0 +1,93 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_Instituicao class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Instituicao extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputValue($value = null) { + return $this->getInstituicaoId($value); + } + + protected function inputName() { + return 'ref_cod_instituicao'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + + if (empty($resources)) + $resources = App_Model_IedFinder::getInstituicoes(); + + return $this->insertOption(null, "Selecione uma instituição", $resources); + } + + + protected function defaultOptions(){ + return array('options' => array('label' => 'Instituição')); + } + + + public function selectInput($options = array()) { + parent::select($options); + } + + + public function hiddenInput($options = array()) { + $defaultOptions = array('id' => null, 'options' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $defaultInputOptions = array('id' => 'ref_cod_instituicao', + 'value' => $this->getInstituicaoId($options['id'])); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoOculto'), $inputOptions); + } + + + public function instituicao($options = array()) { + if ($this->hasNivelAcesso('POLI_INSTITUCIONAL')) + $this->selectInput($options); + else + $this->hiddenInput($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Matricula.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Matricula.php new file mode 100644 index 0000000..e2c24b6 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Matricula.php @@ -0,0 +1,59 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_Matricula class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Matricula extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_matricula'; + } + + protected function inputOptions($options) { + // não implementado load resources ainda, por enquanto busca somente com ajax. + return $this->insertOption(null, "Selecione uma matricula", $resources); + } + + public function matricula($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/PesquisaAluno.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/PesquisaAluno.php new file mode 100644 index 0000000..ef43dcb --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/PesquisaAluno.php @@ -0,0 +1,128 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_PesquisaAluno class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_PesquisaAluno extends Portabilis_View_Helper_DynamicInput_Core { + + protected function inputValue($id = null) { + if (! $id && $this->viewInstance->ref_cod_aluno) + $id = $this->viewInstance->ref_cod_aluno; + + return $id; + } + + + protected function getResource($id) { + if (! $id) + $id = $this->inputValue($id); + + // chama finder somente se possuir id, senão ocorrerá exception + $resource = empty($id) ? null : App_Model_IedFinder::getAluno($this->getEscolaId(), $id); + + return $resource; + } + + + public function pesquisaAluno($options = array()) { + $defaultOptions = array('id' => null, 'options' => array(), 'filterByEscola' => false); + $options = $this->mergeOptions($options, $defaultOptions); + + $inputHint = ""; + + // se não recuperar recurso, deixa resourceLabel em branco + $resource = $this->getResource($options['id']); + $resourceLabel = $resource ? $resource['nome_aluno'] : ''; + + $defaultInputOptions = array('id' => 'nm_aluno', + 'label' => 'Aluno', + 'value' => $resourceLabel, + 'size' => '30', + 'max_length' => '255', + 'required' => true, + 'expressao' => false, + 'inline' => false, + 'label_hint' => '', + 'input_hint' => $inputHint, + 'callback' => '', + 'event' => 'onKeyUp', + 'disabled' => true); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoTexto'), $inputOptions); + + $this->viewInstance->campoOculto("ref_cod_aluno", $this->inputValue($options['id'])); + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, ' + var resetAluno = function(){ + $("#ref_cod_aluno").val(""); + $("#nm_aluno").val(""); + } + + $("#ref_cod_escola").change(resetAluno);', true); + + if ($options['filterByEscola']) { + $js = 'function pesquisaAluno() { + var additionalFields = [document.getElementById("ref_cod_escola")]; + var exceptFields = [document.getElementById("nm_aluno")]; + + if (validatesPresenseOfValueInRequiredFields(additionalFields, exceptFields)) { + + var escolaId = document.getElementById("ref_cod_escola").value; + pesquisa_valores_popless("/intranet/educar_pesquisa_aluno.php?ref_cod_escola="+escolaId); + } + }'; + } + + else { + $js = 'function pesquisaAluno() { + var exceptFields = [document.getElementById("nm_aluno")]; + + if (validatesPresenseOfValueInRequiredFields([], exceptFields)) { + pesquisa_valores_popless("/intranet/educar_pesquisa_aluno.php"); + } + }'; + } + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Serie.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Serie.php new file mode 100644 index 0000000..7cac445 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Serie.php @@ -0,0 +1,65 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_Serie class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Serie extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_serie'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $escolaId = $this->getEscolaId($options['escolaId']); + $cursoId = $this->getCursoId($options['cursoId']); + + if ($escolaId && $cursoId && empty($resources)) + $resources = App_Model_IedFinder::getSeries($instituicaoId = null, $escolaId, $cursoId); + + return $this->insertOption(null, "Selecione uma série", $resources); + } + + public function serie($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/DynamicInput/Turma.php b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Turma.php new file mode 100644 index 0000000..d02405b --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/DynamicInput/Turma.php @@ -0,0 +1,73 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/DynamicInput/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_Turma class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_DynamicInput_Turma extends Portabilis_View_Helper_DynamicInput_CoreSelect { + + protected function inputName() { + return 'ref_cod_turma'; + } + + protected function inputOptions($options) { + $resources = $options['resources']; + $instituicaoId = $this->getInstituicaoId($options['instituicaoId']); + $escolaId = $this->getEscolaId($options['escolaId']); + $serieId = $this->getSerieId($options['serieId']); + //$cursoId = $this->getCursoId($options['cursoId']); + $userId = $this->getCurrentUserId(); + $isProfessor = Portabilis_Business_Professor::isProfessor($instituicaoId, $userId); + + if ($escolaId and $serieId and empty($resources) and $isProfessor) { + $turmas = Portabilis_Business_Professor::turmasAlocado($escolaId, $serieId, $userId); + $resources = Portabilis_Array_Utils::setAsIdValue($turmas, 'id', 'nome'); + } + elseif ($escolaId && $serieId && empty($resources)) + $resources = App_Model_IedFinder::getTurmas($escolaId, $serieId); + + return $this->insertOption(null, "Selecione uma turma", $resources); + } + + public function turma($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Ano.php b/ieducar/lib/Portabilis/View/Helper/Input/Ano.php new file mode 100644 index 0000000..f3e8174 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Ano.php @@ -0,0 +1,75 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_DynamicInput_Ano class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Ano extends Portabilis_View_Helper_Input_Core { + protected function inputValue($value = null) { + if (! $value && $this->viewInstance->ano) + $value = $this->viewInstance->ano; + else + $value = date('Y'); + + return $value; + } + + public function ano($options = array()) { + $defaultOptions = array('options' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $defaultInputOptions = array('id' => 'ano', + 'label' => 'Ano', + 'value' => $this->inputValue($options['options']['value']), + 'size' => 4, + 'max_length' => 4, + 'required' => true, + 'label_hint' => '', + 'input_hint' => '', + 'script' => false, + 'callback' => false, + 'inline' => false, + 'disabled' => false); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoNumero'), $inputOptions); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Checkbox.php b/ieducar/lib/Portabilis/View/Helper/Input/Checkbox.php new file mode 100644 index 0000000..c21a986 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Checkbox.php @@ -0,0 +1,74 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_Checkbox class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Checkbox extends Portabilis_View_Helper_Input_Core { + + public function checkbox($attrName, $options = array()) { + $defaultOptions = array('options' => array(), 'objectName' => ''); + $options = $this->mergeOptions($options, $defaultOptions); + + $spacer = ! empty($options['objectName']) && ! empty($attrName) ? '_' : ''; + + $defaultInputOptions = array( + 'id' => $options['objectName'] . $spacer . $attrName, + 'label' => ucwords($attrName), + 'value' => '', + 'label_hint' => '', + 'inline' => false, + 'script' => 'fixupCheckboxValue(this)', + 'disabled' => false + ); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + + // fixup para enviar um valor, junto ao param do checkbox. + $js = "var fixupCheckboxValue = function(input) { + var \$this = \$j(input); + \$this.val(\$this.is(':checked') ? 'on' : ''); + }"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = false); + call_user_func_array(array($this->viewInstance, 'campoCheck'), $inputOptions); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Core.php b/ieducar/lib/Portabilis/View/Helper/Input/Core.php new file mode 100644 index 0000000..68cd496 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Core.php @@ -0,0 +1,200 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'include/pmieducar/clsPermissoes.inc.php'; +require_once 'App/Model/IedFinder.php'; +require_once 'lib/Portabilis/View/Helper/Application.php'; +require_once 'lib/Portabilis/Array/Utils.php'; +require_once 'lib/Portabilis/String/Utils.php'; +require_once 'lib/Portabilis/Object/Utils.php'; +require_once 'lib/Portabilis/DataMapper/Utils.php'; + +/** + * Portabilis_View_Helper_Input_Core class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Core { + + public function __construct($viewInstance, $inputsHelper) { + $this->viewInstance = $viewInstance; + $this->_inputsHelper = $inputsHelper; + + $this->loadCoreAssets(); + $this->loadAssets(); + } + + + protected function inputsHelper() { + return $this->_inputsHelper; + } + + + protected function helperName() { + return end(explode('_', get_class($this))); + } + + + protected function inputName() { + return Portabilis_String_Utils::underscore($this->helperName()); + } + + + protected function inputValue($value = null) { + if (! $value && $this->viewInstance->{$this->inputName()}) + $value = $this->viewInstance->{$this->inputName()}; + + return $value; + } + + + protected function loadCoreAssets() { + Portabilis_View_Helper_Application::loadJQueryLib($this->viewInstance); + Portabilis_View_Helper_Application::loadJQueryUiLib($this->viewInstance); + + $dependencies = array('/modules/Portabilis/Assets/Javascripts/Utils.js', + '/modules/Portabilis/Assets/Javascripts/ClientApi.js', + '/modules/Portabilis/Assets/Javascripts/Validator.js'); + + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $dependencies); + } + + + protected function loadAssets() { + $rootPath = $_SERVER['DOCUMENT_ROOT']; + $style = "/modules/DynamicInput/Assets/Stylesheets/{$this->helperName()}.css"; + $script = "/modules/DynamicInput/Assets/Javascripts/{$this->helperName()}.js"; + + if (file_exists($rootPath . $style)) + Portabilis_View_Helper_Application::loadStylesheet($this->viewInstance, $style); + + if (file_exists($rootPath . $script)) + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $script); + } + + // wrappers + + protected function getCurrentUserId() { + return Portabilis_Utils_User::currentUserId(); + } + + protected function getPermissoes() { + return Portabilis_Utils_User::getClsPermissoes(); + } + + protected function hasNivelAcesso($nivelAcessoType) { + return Portabilis_Utils_User::hasNivelAcesso($nivelAcessoType); + } + + protected function getDataMapperFor($packageName, $modelName){ + return Portabilis_DataMapper_Utils::getDataMapperFor($packageName, $modelName); + } + + protected static function mergeOptions($options, $defaultOptions) { + return Portabilis_Array_Utils::merge($options, $defaultOptions); + } + + protected static function insertOption($key, $value, $array) { + return Portabilis_Array_Utils::insertIn($key, $value, $array); + } + + // ieducar helpers + + protected function getInstituicaoId($instituicaoId = null) { + if (! $instituicaoId && is_numeric($this->viewInstance->ref_cod_instituicao)) + $instituicaoId = $this->viewInstance->ref_cod_instituicao; + + elseif (! $instituicaoId && is_numeric($this->viewInstance->ref_cod_escola)) { + $escola = App_Model_IedFinder::getEscola($this->viewInstance->ref_cod_escola); + $instituicaoId = $escola['ref_cod_instituicao']; + } + + elseif (! $instituicaoId && is_numeric($this->viewInstance->ref_cod_biblioteca)) { + $biblioteca = App_Model_IedFinder::getBiblioteca($this->viewInstance->ref_cod_biblioteca); + $instituicaoId = $biblioteca['ref_cod_instituicao']; + } + + elseif (! $instituicaoId) + $instituicaoId = $this->getPermissoes()->getInstituicao($this->getCurrentUserId()); + + return $instituicaoId; + } + + + protected function getEscolaId($escolaId = null) { + if (! $escolaId && $this->viewInstance->ref_cod_escola) + $escolaId = $this->viewInstance->ref_cod_escola; + + elseif (! $escolaId && is_numeric($this->viewInstance->ref_cod_biblioteca)) { + $biblioteca = App_Model_IedFinder::getBiblioteca($this->viewInstance->ref_cod_biblioteca); + $escolaId = $biblioteca['ref_cod_escola']; + } + + elseif (! $escolaId) + $escolaId = $this->getPermissoes()->getEscola($this->getCurrentUserId()); + + return $escolaId; + } + + + protected function getBibliotecaId($bibliotecaId = null) { + if (! $bibliotecaId && ! $this->viewInstance->ref_cod_biblioteca) { + $biblioteca = $this->getPermissoes()->getBiblioteca($this->getCurrentUserId()); + + if (is_array($biblioteca) && count($biblioteca) > 0) + $bibliotecaId = $biblioteca[0]['ref_cod_biblioteca']; + } + + elseif (! $bibliotecaId) + $bibliotecaId = $this->viewInstance->ref_cod_biblioteca; + + return $bibliotecaId; + } + + protected function getCursoId($cursoId = null) { + if (! $cursoId && $this->viewInstance->ref_cod_curso) + $cursoId = $this->viewInstance->ref_cod_curso; + + return $cursoId; + } + + protected function getSerieId($serieId = null) { + if (! $serieId && $this->viewInstance->ref_cod_serie) + $serieId = $this->viewInstance->ref_cod_serie; + + return $serieId; + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/CoreSelect.php b/ieducar/lib/Portabilis/View/Helper/Input/CoreSelect.php new file mode 100644 index 0000000..dfd5a54 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/CoreSelect.php @@ -0,0 +1,88 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + +/** + * Portabilis_View_Helper_DynamicInput_CoreSelect class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_CoreSelect extends Portabilis_View_Helper_Input_Core { + + protected function inputName() { + return parent::inputName() . '_id'; + } + + public function select($options = array()) { + // this helper options + $defaultOptions = array('id' => null, + 'objectName' => '', + 'attrName' => $this->inputName(), + 'resources' => array(), + 'options' => array()); + + $defaultOptions = $this->mergeOptions($this->defaultOptions(), $defaultOptions); + $this->options = $this->mergeOptions($options, $defaultOptions); + $this->options['options'] = $this->mergeOptions($this->options['options'], $defaultOptions['options']); + + // select options + + $defaultInputOptions = array('label' => Portabilis_String_Utils::humanize($this->inputName()), + 'value' => $this->inputValue($this->options['id']), + 'resources' => $this->inputOptions($this->options)); + + $inputOptions = $this->mergeOptions($this->options['options'], $defaultInputOptions); + $helperOptions = array('objectName' => $this->options['objectName']); + + // input + $this->inputsHelper()->select($this->options['attrName'], $inputOptions, $helperOptions); + } + + // subscrever no child caso deseje carregar mais opções do banco de dados antes de carregar a página, + // ou deixar apenas com a opção padrão e carregar via ajax + protected function inputOptions($options) { + return $this->insertOption(null, + "Selecione um(a) " . Portabilis_String_Utils::humanize($this->inputName()), + $resources); + } + + // overwrite this method in childrens to set additional default options, to be merged with received options, + // and pass to select helper + protected function defaultOptions() { + return array(); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Hidden.php b/ieducar/lib/Portabilis/View/Helper/Input/Hidden.php new file mode 100644 index 0000000..7fbad67 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Hidden.php @@ -0,0 +1,59 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_Hidden class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Hidden extends Portabilis_View_Helper_Input_Core { + + public function hidden($attrName, $options = array()) { + $defaultOptions = array('options' => array(), 'objectName' => ''); + $options = $this->mergeOptions($options, $defaultOptions); + $spacer = ! empty($options['objectName']) && ! empty($attrName) ? '_' : ''; + + $defaultInputOptions = array('id' => $options['objectName'] . $spacer . $attrName, + 'value' => ''); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + + call_user_func_array(array($this->viewInstance, 'campoOculto'), $inputOptions); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/MultipleSearch.php b/ieducar/lib/Portabilis/View/Helper/Input/MultipleSearch.php new file mode 100644 index 0000000..a07a8eb --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/MultipleSearch.php @@ -0,0 +1,110 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_MultipleSearch class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_MultipleSearch extends Portabilis_View_Helper_Input_Core { + + public function multipleSearch($objectName, $attrName, $options = array()) { + $defaultOptions = array('options' => array(), + 'apiModule' => 'Api', + 'apiController' => ucwords($objectName), + 'apiResource' => $objectName . '-search', + 'searchPath' => ''); + + $options = $this->mergeOptions($options, $defaultOptions); + + if (empty($options['searchPath'])) + $options['searchPath'] = "/module/" . $options['apiModule'] . "/" . $options['apiController'] . + "?oper=get&resource=" . $options['apiResource']; + + // #TODO load resources value? + + /* + // load value if received an resource id + $resourceId = $options['hiddenInputOptions']['options']['value']; + + if ($resourceId && ! $options['options']['value']) + $options['options']['value'] = $resourceId . " - ". $this->resourcesValue($resourceId); + */ + + $this->selectInput($objectName, $attrName, $options); + + $this->loadAssets(); + $this->js($objectName, $attrName, $options); + } + + protected function selectInput($objectName, $attrName, $options) { + $textHelperOptions = array('objectName' => $objectName); + + $this->inputsHelper()->select($attrName, $options['options'], $textHelperOptions); + } + + + protected function loadAssets() { + $cssFile = '/modules/Portabilis/Assets/Plugins/Chosen/chosen.css'; + Portabilis_View_Helper_Application::loadStylesheet($this->viewInstance, $cssFile); + + $jsFiles = array('/modules/Portabilis/Assets/Plugins/Chosen/chosen.jquery.min.js', + '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/MultipleSearch.js'); + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $jsFiles); + } + + + protected function js($objectName, $attrName, $options) { + // setup multiple search + + /* + all search options (including the option chosenOptions, that is passed for chosen plugin), + can be overwritten adding "var = multipleSearchOptions = { 'options' : 'val', option2 : '_' };" + in the script file for the resource controller. + */ + + $resourceOptions = "multipleSearch" . Portabilis_String_Utils::camelize($objectName) . "Options"; + + $js = "$resourceOptions = typeof $resourceOptions == 'undefined' ? {} : $resourceOptions; + multipleSearchHelper.setup('$objectName', '$attrName', '" . $options['searchPath'] . "', $resourceOptions);"; + + // this script will be executed after the script for the current controller (if it was loaded in the view); + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/MultipleSearchAjax.php b/ieducar/lib/Portabilis/View/Helper/Input/MultipleSearchAjax.php new file mode 100644 index 0000000..b4d54e6 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/MultipleSearchAjax.php @@ -0,0 +1,116 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_MultipleSearchAjax class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_MultipleSearchAjax extends Portabilis_View_Helper_Input_Core { + + public function multipleSearchAjax($objectName, $attrName, $options = array()) { + $defaultOptions = array('options' => array(), + 'apiModule' => 'Api', + 'apiController' => ucwords($objectName), + 'apiResource' => $objectName . '-search', + 'searchPath' => ''); + + $options = $this->mergeOptions($options, $defaultOptions); + + if (empty($options['searchPath'])) + $options['searchPath'] = "/module/" . $options['apiModule'] . "/" . $options['apiController'] . + "?oper=get&resource=" . $options['apiResource']; + + // #TODO load resources value? + + /* + // load value if received an resource id + $resourceId = $options['hiddenInputOptions']['options']['value']; + + if ($resourceId && ! $options['options']['value']) + $options['options']['value'] = $resourceId . " - ". $this->resourcesValue($resourceId); + */ + + $this->selectInput($objectName, $attrName, $options); + + $this->loadAssets(); + $this->js($objectName, $attrName, $options); + } + + protected function selectInput($objectName, $attrName, $options) { + $textHelperOptions = array('objectName' => $objectName); + + $this->inputsHelper()->select($attrName, $options['options'], $textHelperOptions); + } + + + protected function loadAssets() { + $cssFile = '/modules/Portabilis/Assets/Plugins/Chosen/chosen.css'; + Portabilis_View_Helper_Application::loadStylesheet($this->viewInstance, $cssFile); + + // AjaxChosen requires this fixup, see https://github.com/meltingice/ajax-chosen + $fixupCss = ".chzn-container .chzn-results .group-result { display: list-item; }"; + Portabilis_View_Helper_Application::embedStylesheet($this->viewInstance, $fixupCss); + + + $jsFiles = array('/modules/Portabilis/Assets/Plugins/Chosen/chosen.jquery.min.js', + '/modules/Portabilis/Assets/Plugins/AjaxChosen/ajax-chosen.min.js', + '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/MultipleSearchAjax.js'); + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $jsFiles); + } + + + protected function js($objectName, $attrName, $options) { + // setup multiple search + + /* + all search options (including the option ajaxChosenOptions, that is passed for ajaxChosen plugin), + can be overwritten adding "var = multipleSearchAjaxOptions = { 'options' : 'val', option2 : '_' };" + in the script file for the resource controller. + */ + + $resourceOptions = "multipleSearchAjax" . Portabilis_String_Utils::camelize($objectName) . "Options"; + + $js = "$resourceOptions = typeof $resourceOptions == 'undefined' ? {} : $resourceOptions; + multipleSearchAjaxHelper.setup('$objectName', '$attrName', '" . $options['searchPath'] . "', $resourceOptions);"; + + // this script will be executed after the script for the current controller (if it was loaded in the view); + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Numeric.php b/ieducar/lib/Portabilis/View/Helper/Input/Numeric.php new file mode 100644 index 0000000..650a6a6 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Numeric.php @@ -0,0 +1,73 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_Numeric class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Numeric extends Portabilis_View_Helper_Input_Core { + + public function numeric($attrName, $options = array()) { + $defaultOptions = array('options' => array(), 'objectName' => ''); + + $options = $this->mergeOptions($options, $defaultOptions); + $spacer = ! empty($options['objectName']) && ! empty($attrName) ? '_' : ''; + + $label = ! empty($attrName) ? $attrName : $options['objectName']; + $label = str_replace('_id', '', $label); + + $defaultInputOptions = array('id' => $options['objectName'] . $spacer . $attrName, + 'label' => ucwords($label), + 'value' => null, + 'size' => 15, + 'max_length' => 15, + 'required' => true, + 'label_hint' => '', + 'input_hint' => '', + 'script' => false, + 'event' => 'onKeyUp', + 'inline' => false, + 'disabled' => false); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + + call_user_func_array(array($this->viewInstance, 'campoNumero'), $inputOptions); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/Beneficio.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/Beneficio.php new file mode 100644 index 0000000..64e29d9 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/Beneficio.php @@ -0,0 +1,62 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_Input_Resource_Beneficio class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_Beneficio extends Portabilis_View_Helper_Input_CoreSelect { + + protected function inputOptions($options) { + $resources = $options['resources']; + + if (empty($resources)) { + $resources = new clsPmieducarAlunoBeneficio(); + $resources = $resources->lista(null, null, null, null, null, null, null, null, null, 1); + $resources = Portabilis_Array_Utils::setAsIdValue($resources, 'cod_aluno_beneficio', 'nm_beneficio'); + } + + return $this->insertOption(null, "Selecione", $resources); + } + + public function beneficio($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/EstadoCivil.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/EstadoCivil.php new file mode 100644 index 0000000..53847ce --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/EstadoCivil.php @@ -0,0 +1,62 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_Input_Resource_EstadoCivil class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_EstadoCivil extends Portabilis_View_Helper_Input_CoreSelect { + + protected function inputOptions($options) { + $resources = $options['resources']; + + if (empty($resources)) { + $resources = new clsEstadoCivil(); + $resources = $resources->lista(); + $resources = Portabilis_Array_Utils::setAsIdValue($resources, 'ideciv', 'descricao'); + } + + return $this->insertOption(null, "Selecione", $resources); + } + + public function estadoCivil($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchAjaxDeficiencias.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchAjaxDeficiencias.php new file mode 100644 index 0000000..0d52b4c --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchAjaxDeficiencias.php @@ -0,0 +1,77 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/MultipleSearchAjax.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/String/Utils.php'; + +/** + * Portabilis_View_Helper_Input_MultipleSearchDeficiencias class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + + +/* + + Classe de modelo para MultipleSearchAjax + + // para usar tal helper, adicionar a view: + + $helperOptions = array('objectName' => 'deficiencias'); + $options = array('label' => 'Deficiencias'); + + $this->inputsHelper()->multipleSearchDeficiencias('', $options, $helperOptions); + + // Esta classe assim com o javascript ainda não está concluida, + // pois o valor não é recuperado para exibição. + +*/ + +class Portabilis_View_Helper_Input_Resource_MultipleSearchDeficiencias extends Portabilis_View_Helper_Input_MultipleSearchAjax { + + public function multipleSearchDeficiencias($attrName, $options = array()) { + $defaultOptions = array('objectName' => 'deficiencias', + 'apiController' => 'Deficiencia', + 'apiResource' => 'deficiencia-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + + parent::multipleSearchAjax($options['objectName'], $attrName, $options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchDeficiencias.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchDeficiencias.php new file mode 100644 index 0000000..4e286d5 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/MultipleSearchDeficiencias.php @@ -0,0 +1,90 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/MultipleSearch.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/String/Utils.php'; + +/** + * Portabilis_View_Helper_Input_MultipleSearchDeficiencias class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_MultipleSearchDeficiencias extends Portabilis_View_Helper_Input_MultipleSearch { + + /*protected function resourceValue($id) { + if ($id) { + $sql = "select nm_deficiencia from cadastro.deficiencia where cod_deficiencia = $1"; + $options = array('params' => $id, 'return_only' => 'first-field'); + $nome = Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + + return Portabilis_String_Utils::toLatin1($nome, array('transform' => true, 'escape' => false)); + } + }*/ + + protected function getOptions($resources) { + if (empty($resources)) { + $resources = new clsCadastroDeficiencia(); + $resources = $resources->lista(); + $resources = Portabilis_Array_Utils::setAsIdValue($resources, 'cod_deficiencia', 'nm_deficiencia'); + } + + return $this->insertOption(null, '', $resources); + } + + public function multipleSearchDeficiencias($attrName, $options = array()) { + $defaultOptions = array('objectName' => 'deficiencias', + 'apiController' => 'Deficiencia', + 'apiResource' => 'deficiencia-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + $options['options']['resources'] = $this->getOptions($options['options']['resources']); + + //var_dump($options['options']['options']); + + $this->placeholderJs($options); + + parent::multipleSearch($options['objectName'], $attrName, $options); + } + + protected function placeholderJs($options) { + $optionsVarName = "multipleSearch" . Portabilis_String_Utils::camelize($options['objectName']) . "Options"; + $js = "if (typeof $optionsVarName == 'undefined') { $optionsVarName = {} }; + $optionsVarName.placeholder = safeUtf8Decode('Selecione as deficiências');"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/Religiao.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/Religiao.php new file mode 100644 index 0000000..fb08af5 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/Religiao.php @@ -0,0 +1,64 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_Input_Resource_Religiao class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_View_Helper_Input_Resource_Religiao extends Portabilis_View_Helper_Input_CoreSelect { + + protected function inputOptions($options) { + $resources = $options['resources']; + + if (empty($options['resources'])) { + $resources = new clsPmieducarReligiao(); + $resources = $resources->lista(null, null, null, null, null, null, null, null, 1); + $resources = Portabilis_Array_Utils::setAsIdValue($resources, 'cod_religiao', 'nm_religiao'); + } + + return $this->insertOption(null, "Selecione", $resources); + } + + + public function religiao($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchAluno.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchAluno.php new file mode 100644 index 0000000..d573545 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchAluno.php @@ -0,0 +1,70 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/SimpleSearch.php'; + +/** + * Portabilis_View_Helper_Input_SimpleSearchAluno class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_SimpleSearchAluno extends Portabilis_View_Helper_Input_SimpleSearch { + + public function simpleSearchAluno($attrName = '', $options = array()) { + $defaultOptions = array('objectName' => 'aluno', + 'apiController' => 'Aluno', + 'apiResource' => 'aluno-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + + $this->placeholderJs($options); + + parent::simpleSearch($options['objectName'], $attrName, $options); + } + + protected function placeholderJs($options) { + $optionsVarName = "simpleSearch" . Portabilis_String_Utils::camelize($options['objectName']) . "Options"; + $js = "if (typeof $optionsVarName == 'undefined') { $optionsVarName = {} }; + $optionsVarName.placeholder = stringUtils.toUtf8('Informe o nome do aluno ou código');"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } + + protected function loadAssets() { + $jsFile = '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/Resource/SimpleSearchAluno.js'; + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $jsFile); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMatricula.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMatricula.php new file mode 100644 index 0000000..477c253 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMatricula.php @@ -0,0 +1,70 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/SimpleSearch.php'; + +/** + * Portabilis_View_Helper_Input_SimpleSearchMatricula class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_SimpleSearchMatricula extends Portabilis_View_Helper_Input_SimpleSearch { + + public function simpleSearchMatricula($attrName = '', $options = array()) { + $defaultOptions = array('objectName' => 'matricula', + 'apiController' => 'Matricula', + 'apiResource' => 'matricula-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + + $this->placeholderJs($options); + + parent::simpleSearch($options['objectName'], $attrName, $options); + } + + protected function placeholderJs($options) { + $optionsVarName = "simpleSearch" . Portabilis_String_Utils::camelize($options['objectName']) . "Options"; + $js = "if (typeof $optionsVarName == 'undefined') { $optionsVarName = {} }; + $optionsVarName.placeholder = stringUtils.toUtf8('Informe o nome do aluno, código ou código matricula');"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } + + protected function loadAssets() { + $jsFile = '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/Resource/SimpleSearchMatricula.js'; + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $jsFile); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMunicipio.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMunicipio.php new file mode 100644 index 0000000..276daac --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchMunicipio.php @@ -0,0 +1,79 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/SimpleSearch.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/String/Utils.php'; + +/** + * Portabilis_View_Helper_Input_SimpleSearchMunicipio class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_SimpleSearchMunicipio extends Portabilis_View_Helper_Input_SimpleSearch { + + protected function resourceValue($id) { + if ($id) { + $sql = "select nome, sigla_uf from public.municipio where idmun = $1"; + $options = array('params' => $id, 'return_only' => 'first-row'); + $municipio = Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + $nome = $municipio['nome']; + $siglaUf = $municipio['sigla_uf']; + + return Portabilis_String_Utils::toLatin1($nome, array('transform' => true, 'escape' => false)) . " ($siglaUf)"; + } + } + + public function simpleSearchMunicipio($attrName, $options = array()) { + $defaultOptions = array('objectName' => 'municipio', + 'apiController' => 'Municipio', + 'apiResource' => 'municipio-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + + $this->placeholderJs($options); + + parent::simpleSearch($options['objectName'], $attrName, $options); + } + + protected function placeholderJs($options) { + $optionsVarName = "simpleSearch" . Portabilis_String_Utils::camelize($options['objectName']) . "Options"; + $js = "if (typeof $optionsVarName == 'undefined') { $optionsVarName = {} }; + $optionsVarName.placeholder = safeUtf8Decode('Informe o código ou nome da cidade');"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPais.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPais.php new file mode 100644 index 0000000..1b786bb --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPais.php @@ -0,0 +1,77 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/SimpleSearch.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/String/Utils.php'; + +/** + * Portabilis_View_Helper_Input_SimpleSearchPais class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_SimpleSearchPais extends Portabilis_View_Helper_Input_SimpleSearch { + + protected function resourceValue($id) { + if ($id) { + $sql = "select nome from public.pais where idpais = $1"; + $options = array('params' => $id, 'return_only' => 'first-field'); + $nome = Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + + return Portabilis_String_Utils::toLatin1($nome, array('transform' => true, 'escape' => false)); + } + } + + public function simpleSearchPais($attrName, $options = array()) { + $defaultOptions = array('objectName' => 'pais', + 'apiController' => 'Pais', + 'apiResource' => 'pais-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + + $this->placeholderJs($options); + + parent::simpleSearch($options['objectName'], $attrName, $options); + } + + protected function placeholderJs($options) { + $optionsVarName = "simpleSearch" . Portabilis_String_Utils::camelize($options['objectName']) . "Options"; + $js = "if (typeof $optionsVarName == 'undefined') { $optionsVarName = {} }; + $optionsVarName.placeholder = safeUtf8Decode('Informe o código ou nome do pais de origem');"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPessoa.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPessoa.php new file mode 100644 index 0000000..bbd17eb --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/SimpleSearchPessoa.php @@ -0,0 +1,77 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/SimpleSearch.php'; +require_once 'lib/Portabilis/Utils/Database.php'; +require_once 'lib/Portabilis/String/Utils.php'; + +/** + * Portabilis_View_Helper_Input_SimpleSearchPessoa class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Resource_SimpleSearchPessoa extends Portabilis_View_Helper_Input_SimpleSearch { + + protected function resourceValue($id) { + if ($id) { + $sql = "select nome from cadastro.pessoa where idpes = $1"; + $options = array('params' => $id, 'return_only' => 'first-field'); + $nome = Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); + + return Portabilis_String_Utils::toLatin1($nome, array('transform' => true, 'escape' => false)); + } + } + + public function simpleSearchPessoa($attrName, $options = array()) { + $defaultOptions = array('objectName' => 'pessoa', + 'apiController' => 'Pessoa', + 'apiResource' => 'pessoa-search'); + + $options = $this->mergeOptions($options, $defaultOptions); + + $this->placeholderJs($options); + + parent::simpleSearch($options['objectName'], $attrName, $options); + } + + protected function placeholderJs($options) { + $optionsVarName = "simpleSearch" . Portabilis_String_Utils::camelize($options['objectName']) . "Options"; + $js = "if (typeof $optionsVarName == 'undefined') { $optionsVarName = {} }; + $optionsVarName.placeholder = safeUtf8Decode('Informe o nome, código, CPF ou RG da pessoa');"; + + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Resource/TurmaTurno.php b/ieducar/lib/Portabilis/View/Helper/Input/Resource/TurmaTurno.php new file mode 100644 index 0000000..f3b1b8a --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Resource/TurmaTurno.php @@ -0,0 +1,67 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/CoreSelect.php'; + + +/** + * Portabilis_View_Helper_Input_Resource_TurmaTurno class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + +class Portabilis_View_Helper_Input_Resource_TurmaTurno extends Portabilis_View_Helper_Input_CoreSelect { + + protected function inputOptions($options) { + $resources = $options['resources']; + + if (empty($options['resources'])) { + $sql = "select id, nome from pmieducar.turma_turno where ativo = 1 order by id DESC"; + $resources = Portabilis_Utils_Database::fetchPreparedQuery($sql); + $resources = Portabilis_Array_Utils::setAsIdValue($resources, 'id', 'nome'); + } + + return $this->insertOption(null, "Selecione", $resources); + } + + protected function defaultOptions() { + return array('options' => array('label' => 'Turno')); + } + + public function turmaTurno($options = array()) { + parent::select($options); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Select.php b/ieducar/lib/Portabilis/View/Helper/Input/Select.php new file mode 100644 index 0000000..0cf0b73 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Select.php @@ -0,0 +1,67 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_Select class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Select extends Portabilis_View_Helper_Input_Core { + + public function select($attrName, $options = array()) { + $defaultOptions = array('options' => array(), 'objectName' => '', 'resources' => array()); + $options = $this->mergeOptions($options, $defaultOptions); + + $spacer = ! empty($options['objectName']) && ! empty($attrName) ? '_' : ''; + $defaultInputOptions = array('id' => $options['objectName'] . $spacer . $attrName, + 'label' => ucwords($attrName), + 'resources' => $options['resources'], + 'value' => '', + 'callback' => '', + 'inline' => false, + 'label_hint' => '', + 'input_hint' => '', + 'disabled' => false, + 'required' => true, + 'multiple' => false); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + call_user_func_array(array($this->viewInstance, 'campoLista'), $inputOptions); + } +} \ No newline at end of file diff --git a/ieducar/lib/Portabilis/View/Helper/Input/SimpleSearch.php b/ieducar/lib/Portabilis/View/Helper/Input/SimpleSearch.php new file mode 100644 index 0000000..436f379 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/SimpleSearch.php @@ -0,0 +1,126 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_SimpleSearch class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_SimpleSearch extends Portabilis_View_Helper_Input_Core { + + protected function resourceValue($id) { + throw new Exception("You are trying to get the resource value, but this is a generic class, " . + "please, define the method resourceValue in a resource subclass."); + } + + public function simpleSearch($objectName, $attrName, $options = array()) { + $defaultOptions = array('options' => array(), + 'apiModule' => 'Api', + 'apiController' => ucwords($objectName), + 'apiResource' => $objectName . '-search', + 'searchPath' => '', + 'addHiddenInput' => true, + 'hiddenInputOptions' => array()); + + $options = $this->mergeOptions($options, $defaultOptions); + + if (empty($options['searchPath'])) + $options['searchPath'] = "/module/" . $options['apiModule'] . "/" . $options['apiController'] . + "?oper=get&resource=" . $options['apiResource']; + + + // load value if received an resource id + $resourceId = $options['hiddenInputOptions']['options']['value']; + + if ($resourceId && ! $options['options']['value']) + $options['options']['value'] = $resourceId . " - ". $this->resourceValue($resourceId); + + $this->hiddenInput($objectName, $attrName, $options); + $this->textInput($objectName, $attrName, $options); + $this->js($objectName, $attrName, $options); + } + + + protected function hiddenInput($objectName, $attrName, $options) { + if ($options['addHiddenInput']) { + if ($attrName == 'id') { + throw new CoreExt_Exception("When \$addHiddenInput is true the \$attrName (of the visible input) " . + "must be different than 'id', because the hidden input will use it."); + } + + $defaultHiddenInputOptions = array('options' => array(), 'objectName' => $objectName); + $hiddenInputOptions = $this->mergeOptions($options['hiddenInputOptions'], $defaultHiddenInputOptions); + + $this->inputsHelper()->hidden('id', array(), $hiddenInputOptions); + } + } + + + protected function textInput($objectName, $attrName, $options) { + $textHelperOptions = array('objectName' => $objectName); + + $this->inputsHelper()->text($attrName, $options['options'], $textHelperOptions); + } + + + protected function js($objectName, $attrName, $options) { + // load simple search js + + $jsFile = '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/SimpleSearch.js'; + Portabilis_View_Helper_Application::loadJavascript($this->viewInstance, $jsFile); + + + // setup simple search + + /* + all search options (including the option autocompleteOptions, that is passed for jquery autocomplete plugin), + can be overwritten adding "var = simpleSearchOptions = { placeholder : '...', optionName : '...' };" + in the script file for the resource controller. + */ + + $resourceOptions = "simpleSearch" . Portabilis_String_Utils::camelize($objectName) . "Options"; + + $js = "$resourceOptions = typeof $resourceOptions == 'undefined' ? {} : $resourceOptions; + simpleSearchHelper.setup('$objectName', '$attrName', '" . $options['searchPath'] . "', $resourceOptions);"; + + + // this script will be executed after the script for the current controller (if it was loaded in the view); + Portabilis_View_Helper_Application::embedJavascript($this->viewInstance, $js, $afterReady = true); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/Input/Text.php b/ieducar/lib/Portabilis/View/Helper/Input/Text.php new file mode 100644 index 0000000..5b0c1c6 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Input/Text.php @@ -0,0 +1,74 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'lib/Portabilis/View/Helper/Input/Core.php'; + + +/** + * Portabilis_View_Helper_Input_Text class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Portabilis_View_Helper_Input_Text extends Portabilis_View_Helper_Input_Core { + + public function text($attrName, $options = array()) { + $defaultOptions = array('options' => array(), 'objectName' => ''); + + $options = $this->mergeOptions($options, $defaultOptions); + $spacer = ! empty($options['objectName']) && ! empty($attrName) ? '_' : ''; + + $label = ! empty($attrName) ? $attrName : $options['objectName']; + $label = str_replace('_id', '', $label); + + $defaultInputOptions = array('id' => $options['objectName'] . $spacer . $attrName, + 'label' => ucwords($label), + 'value' => null, + 'size' => 50, + 'max_length' => 50, + 'required' => true, + 'script' => false, + 'inline' => false, + 'label_hint' => '', + 'input_hint' => '', + 'callback' => false, + 'event' => 'onKeyUp', + 'disabled' => false); + + $inputOptions = $this->mergeOptions($options['options'], $defaultInputOptions); + + call_user_func_array(array($this->viewInstance, 'campoTexto'), $inputOptions); + } +} diff --git a/ieducar/lib/Portabilis/View/Helper/Inputs.php b/ieducar/lib/Portabilis/View/Helper/Inputs.php new file mode 100644 index 0000000..6136d03 --- /dev/null +++ b/ieducar/lib/Portabilis/View/Helper/Inputs.php @@ -0,0 +1,246 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +/** + * Portabilis_View_Helper_Inputs class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Portabilis + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ + + +class Portabilis_View_Helper_Inputs { + + public function __construct($viewInstance) { + $this->viewInstance = $viewInstance; + } + + + // dynamic inputs helper + + /* adiciona inputs de seleção dinamica ao formulário, recebendo diretamente as opcoes do input, + sem necessidade de passar um array com um array de opções, ex: + + Ao invés de: + $this->inputsHelper()->dynamic('instituicao', array('options' => array(required' => false))); + + Pode-se usar: + $this->inputsHelper()->dynamic('instituicao', array(required' => false)); + + Ou + $this->inputsHelper()->dynamic('instituicao', array(), array('options' => array(required' => false))); + + Ou + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'pesquisaAluno')); + */ + + public function dynamic($helperNames, $inputOptions = array(), $helperOptions = array()) { + $options = $this->mergeInputOptions($inputOptions, $helperOptions); + + if (! is_array($helperNames)) + $helperNames = array($helperNames); + + foreach($helperNames as $helperName) { + $helperClassName = "Portabilis_View_Helper_DynamicInput_" . ucfirst($helperName); + $this->includeHelper($helperClassName); + + $helper = new $helperClassName($this->viewInstance, $this); + $helper->$helperName($options); + } + } + + + // input helpers + + public function text($attrNames, $inputOptions = array(), $helperOptions = array()) { + if (! is_array($attrNames)) + $attrNames = array($attrNames); + + foreach($attrNames as $attrName) { + $this->input('text', $attrName, $inputOptions, $helperOptions); + } + } + + public function numeric($attrNames, $inputOptions = array(), $helperOptions = array()) { + if (! is_array($attrNames)) + $attrNames = array($attrNames); + + foreach($attrNames as $attrName) { + $this->input('numeric', $attrName, $inputOptions, $helperOptions); + } + } + + + public function select($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->input('select', $attrName, $inputOptions, $helperOptions); + } + + + public function search($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->input('search', $attrName, $inputOptions, $helperOptions); + } + + + public function hidden($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->input('hidden', $attrName, $inputOptions, $helperOptions); + } + + + public function checkbox($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->input('checkbox', $attrName, $inputOptions, $helperOptions); + } + + + public function input($helperName, $attrName, $inputOptions = array(), $helperOptions = array()) { + $helperClassName = "Portabilis_View_Helper_Input_" . ucfirst($helperName); + + $this->includeHelper($helperClassName); + $helper = new $helperClassName($this->viewInstance, $this); + $helper->$helperName($attrName, $this->mergeInputOptions($inputOptions, $helperOptions)); + } + + + // simple search input helper + + public function simpleSearch($objectName, $attrName, $inputOptions = array(), $helperOptions = array()) { + $options = $this->mergeInputOptions($inputOptions, $helperOptions); + + $helperClassName = 'Portabilis_View_Helper_Input_SimpleSearch'; + $this->includeHelper($helperClassName); + + $helper = new $helperClassName($this->viewInstance, $this); + $helper->simpleSearch($objectName, $attrName, $options); + } + + + // simple search resource input helper + + public function simpleSearchPessoa($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->simpleSearchResourceInput('simpleSearchPessoa', $attrName, $inputOptions, $helperOptions); + } + + public function simpleSearchPais($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->simpleSearchResourceInput('simpleSearchPais', $attrName, $inputOptions, $helperOptions); + } + + public function simpleSearchMunicipio($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->simpleSearchResourceInput('simpleSearchMunicipio', $attrName, $inputOptions, $helperOptions); + } + + public function simpleSearchMatricula($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->simpleSearchResourceInput('simpleSearchMatricula', $attrName, $inputOptions, $helperOptions); + } + + public function simpleSearchAluno($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->simpleSearchResourceInput('simpleSearchAluno', $attrName, $inputOptions, $helperOptions); + } + + // multiple search resource input helper + + + /*public function multipleSearchDeficienciasAjax($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->multipleSearchResourceInput('multipleSearchDeficiencias', $attrName, $inputOptions, $helperOptions); + }*/ + + public function multipleSearchDeficiencias($attrName, $inputOptions = array(), $helperOptions = array()) { + $this->multipleSearchResourceInput('multipleSearchDeficiencias', $attrName, $inputOptions, $helperOptions); + } + + // resource input helpers + + public function religiao($inputOptions = array(), $helperOptions = array()) { + $this->resourceInput('religiao', $this->mergeInputOptions($inputOptions, $helperOptions)); + } + + public function beneficio($inputOptions = array(), $helperOptions = array()) { + $this->resourceInput('beneficio', $this->mergeInputOptions($inputOptions, $helperOptions)); + } + + public function estadoCivil($inputOptions = array(), $helperOptions = array()) { + $this->resourceInput('estadoCivil', $this->mergeInputOptions($inputOptions, $helperOptions)); + } + + public function turmaTurno($inputOptions = array(), $helperOptions = array()) { + $this->resourceInput('turmaTurno', $this->mergeInputOptions($inputOptions, $helperOptions)); + } + + // protected methods + + protected function resourceInput($helperName, $options = array()) { + $helperClassName = "Portabilis_View_Helper_Input_Resource_" . ucfirst($helperName); + + $this->includeHelper($helperClassName); + $helper = new $helperClassName($this->viewInstance, $this); + $helper->$helperName($options); + } + + protected function simpleSearchResourceInput($helperName, $attrName, $inputOptions = array(), $helperOptions = array()) { + $options = $this->mergeInputOptions($inputOptions, $helperOptions); + + $helperClassName = 'Portabilis_View_Helper_Input_Resource_' . ucfirst($helperName); + $this->includeHelper($helperClassName); + + $helper = new $helperClassName($this->viewInstance, $this); + $helper->$helperName($attrName, $options); + } + + protected function multipleSearchResourceInput($helperName, $attrName, $inputOptions = array(), $helperOptions = array()) { + $this->simpleSearchResourceInput($helperName, $attrName, $inputOptions, $helperOptions); + } + + protected function includeHelper($helperClassName) { + $classPath = str_replace('_', '/', $helperClassName) . '.php'; + + // usado include_once para continuar execução script mesmo que o path inexista. + include_once $classPath; + + if (! class_exists($helperClassName)) + throw new CoreExt_Exception("Class '$helperClassName' not found in path '$classPath'"); + } + + protected function mergeInputOptions($inputOptions = array(), $helperOptions = array()) { + if (! empty($inputOptions) && isset($helperOptions['options'])) + throw new Exception("Don't send \$inputOptions and \$helperOptions['options'] at the same time!"); + + $defaultOptions = array('options' => $inputOptions); + $options = Portabilis_Array_Utils::merge($helperOptions, $defaultOptions); + + //foreach($helperOptions as $k => $v) { + // $options[$k] = $v; + //} + + return $options; + } +} -- libgit2 0.21.2