/** * Metodo que retorna uma query básica usada para as buscas. * * @return Select Um objeto contendo uma query genérica */ public function select() { $t = $this->tg->getTabela(); $select = new Select($t); $sqlAluno = new SqlAluno(); $sqlUsuario = new SqlUsuario(); $sqlSubtipo = new SqlSubTipo(); return $select->columns(array("data_evento", "score", "obs"), "afa_conceito_aluno_")->columns(array("pk_afa_conceito_aluno", "fk_usuario_coordenador"))->columns(array("afa_conceito_aluno_alvo" => $sqlAluno->select()->columnsReset()->columns(array("usuario||','||usuario_aluno"))->where("pk_usuario_aluno=fk_usuario_aluno")->limit(1), "afa_conceito_aluno_usuario_inc" => $sqlUsuario->select()->columnsReset()->columns(array("usuario||','||funcao_usuario"))->where("pk_usuario={$this->tabela}.fk_usuario_inc")->limit(1)))->join("afa.afa_subtipo_anotacao", array("pk_afa_subtipo_anotacao" => "fk_afa_subtipo_anotacao"))->join("public.usuario_aluno", array("pk_usuario_aluno" => "fk_usuario_aluno"))->join("public.aula", array("pk_aula" => "fk_aula"), Join::LEFT_JOIN)->import($this->usrAutor())->import($sqlSubtipo->select()); }
/** * Método que retorna os alunos de acordo com o * usuário logado e os filtros informados * * @param Filtros $filtros Objeto do sistema de filtros * * @return ResultSetHydrator Um objeto contendo os alunos retornados da consulta */ public function listar(Filtros $filtros) { $sqlAluno = new SqlAluno(); switch ($this->usuarioLogado->getPerfil()->getId()) { case Perfil::ADMIN: case Perfil::GESTOR: return $sqlAluno->listarTodos($filtros); case Perfil::COORDENADOR: $coordenador = new Coordenador($this->usuarioLogado->getId()); return $sqlAluno->deCoordenador($coordenador, $filtros); case Perfil::RESPONSAVEL: default: break; } }
/** * Método que retorna uma consulta genérica para uso da classe * * @return Select */ public function select() { //Consultas internas $selAfaT = "select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join afa.afa_subtipo_anotacao on " . "pk_afa_subtipo_anotacao=fk_afa_subtipo_anotacao " . "inner join public.usuario_aluno " . "on pk_usuario_aluno=fk_usuario_aluno " . "where fk_usuario=pk_usuario and fk_afa_tipo_anotacao="; $selAfaS = "select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join public.usuario_aluno " . "on pk_usuario_aluno=fk_usuario_aluno " . "where fk_usuario=pk_usuario and fk_afa_subtipo_anotacao="; $select = new Select(); return parent::select()->columns(array("unidade" => "(select fk_unidade from public.turma " . "where pk_turma=public.usuario_aluno.fk_turma limit 1)", "in" => $select->reset()->columns("media_aluno")->from("mestre.medias_alunos")->where("media_aluno<>-1 " . "and mat_alumat=public.usuario_aluno.matricula " . "and mestre.medias_alunos.ano='{$this->anoLetivo}'")->order("referencia", Order::DSC)->limit(1), "if" => $select->reset()->columns("score")->from("afa.afa_conceito_aluno")->join("public.usuario_aluno", array("pk_usuario_aluno" => "fk_usuario_aluno"))->where("fk_usuario=pk_usuario")->order("pk_afa_conceito_aluno", Order::DSC)->limit(1), "afa_p" => "(" . $selAfaT . Tipo::TIPO_POSITIVO . ")", "afa_n" => "(" . $selAfaT . Tipo::TIPO_NEGATIVO . ")", "acao" => "(" . $selAfaT . Tipo::TIPO_ACAO_PEDAGOGICA_FORMATIVA . ")", "aten" => "(" . $selAfaT . Tipo::TIPO_ATENDIMENTO . ")", "falta" => "(" . $selAfaS . Subtipo::SUB_TIPO_FALTA . ")", "atraso" => "(" . $selAfaS . Subtipo::SUB_TIPO_ATRASO . ")")); }
/** * Método que retorna um aluno de acordo com o código informado * e o usuário logado. * * @param int $id O código do aluno * @param Aluno $especializacao Case seja informado, usa como * modelo para o retorno * * @return Aluno Um objeto do tipo aluno contendo os dados do * aluno informado * * @throws UsuarioException */ public function getAluno($id, Aluno $especializacao = null) { $sqlALuno = new SqlAluno(); $alunoModelo = new Aluno(); $aluno = null; if (!is_null($especializacao)) { $alunoModelo = $especializacao; } switch ($this->perfilLogado) { case Perfil::ALUNO: $aluno = $sqlALuno->get($this->idLogado, $alunoModelo); break; case Perfil::COORDENADOR: $alunoModelo->setId($id); $coordenador = new Coordenador($this->idLogado); $aluno = $sqlALuno->getDeCoordenador($coordenador, $alunoModelo); break; default: $aluno = $sqlALuno->get($id, $alunoModelo); break; } return $aluno; }
/** * Método que faz o envio dos conteúdos pré e pós no dia da aula */ public function enviar() { //Bloqueando a execução fora do horário correto $horaAgora = new DateTime("now"); //Data e hora atual $horaInicio = new DateTime(date("Y-m-d") . " 07:00:00"); //Hora de inicio do envio $horaFim = new DateTime(date("Y-m-d") . " 23:00:00"); //Hora de termino do envio $intervaloInicio = $horaAgora->diff($horaInicio); $intervaloFim = $horaAgora->diff($horaFim); if ($intervaloInicio->h <= 0 && $intervaloFim->h <= 0) { //Envio fora do horário echo "Fora do horário de execução\n"; exit(0); } //Inicializando as variaveis básicas da página e fazendo as consultas iniciais $sqlTurmaPrePos = new SqlTurmasPrePos(); $sqlTurmaEnvio = new SqlTurmasEnvio(); $sqlAlunos = new SqlAluno(); $sqlAnexos = new SqlAnexoCron(); $turma = $sqlTurmaEnvio->turmaParaEnvio(); //Verificando se foi encontrada alguma turma if (!$turma) { //Não existem turmas para o envio ainda echo "Sem turmas para envio" . PHP_EOL; exit(0); } //Listando os anexos de conteúdos ministrados hoje $anexosPos = $sqlAnexos->anexosPosHoje($turma->getTurma()); //Montando a mensagem com conteúdo pós $msgString = "<div>"; $classeRight = 0; $cabecalhoQt = 1; $mensagem = file_get_contents(dirname(__FILE__) . "/../view/envioPrePos/enviar.html"); $snippetAnexo = file_get_contents(dirname(__FILE__) . '/../view/envioPrePos/snippet/anexo.html'); if ($anexosPos->rowCount()) { //O conteúdo pós foi encontrado, adiciona o cabeçalho $mensagem = str_replace("{{cabecalho{$cabecalhoQt}}}", "Conteúdos sugeridos (Pós-aula)", $mensagem); $cabecalhoQt++; } //Adicionando o conteúdo pós a mensagem while ($anexos = $anexosPos->fetch()) { $msgString .= str_replace(array("{{url}}", "{{descricao}}", "{{miniatura}}", "{{materia}}", "{{float}}"), array($anexos->urlPaginaAnexo(), $anexos->getObs(), $anexos->getMiniatura(), "Matéria - <small>{$anexos->getDescricao()}</small>", $classeRight++ % 2 ? "float: right;" : ""), $snippetAnexo); } $msgString .= "</div>"; $conteudoPos = $msgString; //Verificando se a turma tem aula amanhã, caso não tenha, agenda para o dia da próxima aula $materiasAmanha = $sqlTurmaEnvio->turmaAulasAmanha($turma->getTurma()); if ($materiasAmanha->rowCount()) { $conteudosDia = array(); //Lendo os anexos para o dia seguinte while ($materia = $materiasAmanha->fetch()) { foreach (range(0, 7) as $qt) { $dia = date("N", strtotime("-{$qt} days")); //Verificando se houve aula da máteria no dia informado if ($sqlTurmaPrePos->houveAulaMateria($turma->getTurma(), $materia, $dia)) { //Lendo o conteúdo ministrado no dia $conts = $sqlAnexos->conteudosDoDia($turma->getTurma(), date("Y-m-d", strtotime("-{$qt} days")), $materia); if (count($conts)) { $conteudosDia = array_merge($conteudosDia, $conts); } break; } } } //Listando os próximos conteúdos e seus anexos $anexosPre = array(); foreach ($conteudosDia as $conteudo) { $anexosPre = array_merge($anexosPre, $sqlAnexos->anexosPre($turma->getTurma(), $conteudo)); } } else { //A turma não tem aula amanhã, verifica o dia da próxima aula e agenda $anexosPre = array(); $dias = array(); $turmasDias = $sqlTurmaPrePos->turmasAulas($turma->getTurma()); if ($turmasDias->rowCount()) { while ($turmaDia = $turmasDias->fetch()) { $dias[$turmaDia->getDia()] = $turmaDia; } $qtSoma = (int) date("N"); $qtSoma++; $dia = date("N", strtotime("+{$qtSoma} days")); //Verificando o dia da proxima aula while (!isset($dias[$dia])) { $qtSoma++; $dia = date("N", strtotime("+{$qtSoma} days")); } $qtSoma--; $dia = date("N", strtotime("+{$qtSoma} days")); $turmaDia = $dias[$dia]; $turmaDia->setHora(new DateTime(date("Y-m-d") . " 12:00:00")); //Agendando o envio $sqlTurmaPrePos->agendar($turmaDia); } } //Verificando se ha o que enviar para amanhão(Conteúdo pre) if (count($anexosPre)) { //Adicionando o conteúdo ao template $mensagem = str_replace("{{cabecalho{$cabecalhoQt}}}", "Conteúdos sugeridos (Pré-aula)", $mensagem); $cabecalhoQt++; } //Adicionando o conteúdo pós a mensagem $classeRight = 0; $msgString = "<div>"; foreach ($anexosPre as $anexos) { $msgString .= str_replace(array("{{url}}", "{{descricao}}", "{{miniatura}}", "{{materia}}", "{{classe}}"), array($anexos->getUrlAnexo(), $anexos->getDescricao(), $anexos->getMiniatura(), $anexos->materia_nome, $classeRight++ % 2 ? "right" : "left"), $snippetAnexo); } $msgString .= "</div>"; $conteudoPre = $msgString; //Template final $mensagem = str_replace("{{conteudosPos}}", $conteudoPos, $mensagem); $mensagem = str_replace("{{data}}", date("d/m/Y"), $mensagem); $mensagem = str_replace("{{conteudosPre}}", $conteudoPre, $mensagem); //Limpando o template $mensagem = preg_replace("/\\{\\{[a-z-A-Z-0-9]*\\}\\}/i", "", $mensagem); //Definindo os alunos da turma // die($mensagem); $alunos = $sqlAlunos->deTurma($turma->getTurma()); if (!count($alunos)) { //Não foram encontrados alunos para o envio echo "Sem alunos para o envio"; $sqlTurmaPrePos->removerTurma($turma); exit(0); } //Realizando o envio das mensagens if (count($anexosPos->fetchAll()) || count($anexosPre)) { echo "Enviando" . PHP_EOL; //Somente envia caso haja conteúdo pré ou pós $newsLetter = new Kernel_Models_NewsletterContas(); $assunto = "Conteúdos Pós e Pré aulas"; foreach ($alunos->fetchAll(new Aluno()) as $aluno) { // $newsLetter->enviar($aluno->getNome(), $aluno->getEmail(), $assunto, $mensagem); $newsLetter->enviar($aluno->getNome(), "*****@*****.**", $assunto, $mensagem); } } else { echo "Sem conteúdo para envio" . PHP_EOL; exit(0); } //Removendo a turma da lista de turmas agendadas $sqlTurmaPrePos->removerTurma($turma); echo "Envio concluído " . PHP_EOL; exit(0); }
/** * Método que gera a página de distribuição de atendimentos por alunos. * * @param type $pkUsuario */ public function distribuicao_de_atendimentos_por_alunos($pkUsuario = 0) { try { $this->initGets(array('de', 'ate', 'unidade', 'ensino', 'serie', 'turma', 'coordenador')); $usr = new Usuarios(); $sqlAfa = new SqlAtenPedagogicosEqPedagogica(); $sqlAluno = new SqlAluno(); // if ($this->filtro->issetGet('coordenador')) { $sqlCoord = new SqlCoordenador(); $coordenador = $sqlCoord->get($this->filtro->get('coordenador')); } else { $coordenador = $usr->getCoordenador((int) $pkUsuario); } $alunos = $sqlAluno->deCoordenador($coordenador, $this->filtro); $anotacoes = $sqlAfa->deCoordenador($coordenador, $this->filtro); $this->setUserFiltros($coordenador)->setData('coordenador', $coordenador)->setData('alunos', $alunos)->setData('anotacoes', $anotacoes->fetchAll())->printView(); } catch (Exception $exc) { $this->close($exc); } }