/** * Método que retorna um objeto contendo o modelo de consulta básica. * * @return Select Uma consulta básica */ public function select() { $sqlTurma = new SqlTurma(); $sqlTopico = new SqlTopico(); $t = $this->tg->getTabela(true); $select = new Select(); return $select->from($this->tg->getTabela())->columns(array("{$t}_status" => 'status', "{$t}_data_aula" => 'data_aula', '*'))->join('public.turma', array('pk_turma' => "{$this->tg->getTabela()}.fk_turma"))->import($sqlTurma->select())->join('apostilas.conteudo', array('pk_conteudo' => "{$this->tg->getTabela()}.fk_conteudo"))->import($sqlTopico->select()); }
/** * Método que retorna a imagem da página informada */ public function verPagina() { $sqlTopico = new SqlTopico(); try { //Inicializando so filtros usados na página $this->filtro->initGets(array("topico", "width", "height", "pagina")); $pagina = $this->filtro->get("pagina"); if (is_null($pagina)) { throw new Exception("A página informad é inválida"); } $topico = $sqlTopico->get($this->filtro->get("topico")); if ($pagina > $topico->getPaginaFinal() || $pagina < $topico->getPaginaInicial()) { throw new Exception("Este tópico não possue a página informada"); } if ($topico->getPaginaFinal() - $topico->getPaginaInicial() == 1) { $pagina = "0"; } else { $pagina = (int) ($pagina - $topico->getPaginaInicial()); } $pathPDF = $topico->getPdfTopico(); $path = substr($pathPDF, 0, strrpos($pathPDF, DIRECTORY_SEPARATOR)); $img = "{$path}/{$pagina}.jpg"; if (!file_exists($img)) { throw new Exception("A página não foi encontrada"); } $imagem = new Image($img); // $imagem->setNewDimesion($this->filtro->getInstance("dimension")); $imagem->setQuality(100); $imagem->setAntiAlias(TRUE); $imagem->setType(""); $getImage = new GetImage($imagem); $getImage->__toString(); die; } catch (SqlException $exc) { echo "Ocorreu um erro. Tente novamente mais tarde"; } catch (Exception $exc) { echo $exc->getMessage(); } }
/** * Método que retorna os tópicos de acordo com os filtros infromados e usuário logado * @param Filtros $filtros Objeto do sistema de filtros * @return ResultSetHydrator Objeto contendo a resposta da consulta */ public function listar(Filtros $filtros) { $sqlTopico = new SqlTopico(); return $sqlTopico->listarTodos($filtros); }
/** * Método que salva as respostas do aluno no testes do capítulo * e retorna a sua nota. */ private function set_respostas() { $usrAux = new Usuarios(); $sqlTopico = new SqlTopico(); $nota = 0; $respostasAluno = array(); try { $this->filtro->initPost('topico'); $tipo = filter_input(INPUT_POST, "testePara"); $aluno = $usrAux->getAluno(false); $topico = $sqlTopico->get($this->filtro->post('topico')); if ($tipo == "capitulo") { $sqlTeste = new SqlTesteCapitulo(); } elseif ($tipo == "topico") { $sqlTeste = new SqlTesteTopico(); } else { throw new Exception("O alvo do teste não é permitido"); } $teste = $sqlTeste->porAlunoTopico($aluno, $topico); if (!$teste) { throw new Exception("O teste não foi encontrado"); } //Verificando se o aluno já realizou o teste e pode refaze-lo if (!$teste->podeRefazer()) { throw new Exception('Desculpe, mas sua nota não ' . 'permite que o teste seja refeito.'); } //Lendo as respostas $resposta = filter_input(INPUT_POST, 'resspostas', FILTER_SANITIZE_MAGIC_QUOTES); $respostasStr = substr($resposta, 0, -1); $respostas = explode(',', $respostasStr); $questoes = $teste->getQuestoes(); if (count($respostas) != count($questoes)) { throw new Exception('Ainda há questões sem resposta. ' . 'Volte e responda todas.'); } foreach ($respostas as $resp) { $par = explode('=', $resp); $respostasAluno[trim($par[0])] = trim($par[1]); foreach ($questoes as $quest) { if ($quest->getId() == $par[0]) { if ($quest->getGabarito() == $par[1]) { ++$nota; } } } } $teste->setNota((double) $nota); if (!$sqlTeste->salvaRespostas($teste, $respostasAluno)) { throw new Exception('Erro ao tentar salvar as suas respostas. ' . 'Tente novamente mais tarde.'); } if (!$sqlTeste->salvarNota($teste)) { throw new Exception('Erro ao tentar salvar a sua nota. ' . 'Tente novamente mais tarde.'); } //Gerando a resposta $tmp = new stdClass(); $tmp->nota = $teste->getNota(); $this->appendResposta($tmp); $this->statusTrue(); $this->setMensagem('Nota salva com sucesso'); } catch (SqlException $sql) { $this->setMensagem('Ocorreu um erro interno. ' . 'Tente novamente mais tarde.'); } catch (Exception $exc) { $this->setMensagem($exc->getMessage()); } $this->printResposta(); }
/** * Método que gera a planilha de acompnahamento do livro e disciplinas informadas * @param int $livro O código do livro * @param int $materia O código da máteria */ public function acompanhamento() { //Inicializando os filtros usados na página $this->filtro->initGets(array("livro", "disciplina")); //Inicializando os objeto básicos $sqlTopico = new SqlTopico(); //Buscando os tópicos $topicosLista = $sqlTopico->listarTodos($this->filtro); //Verificando se o livro é válido if (!$topicosLista->rowCount()) { echo Javascript::alert("Não foi encontrado conteúdo " . "associado ao livro e disciplina informados"); die(Javascript::close()); } $topicos = $topicosLista->fetchAll(); //Array com os contepudos do livro // $topicoInicia = $topicos[0]; //Primeiro item do array com os dados básicos //Variáveis iniciais básicas $xBase = 1; //Coluna inicial da impressão $yBase = 1; //Linha de início da impressão $nColunasCapitulos = 5; //Número de colunas da culuna inicial $nColunasPaginas = 1; //Número de colunas da culuna de páginas $nColunasAulas = 10; //Número de colunas referentes ao número máximo de aulas $nColunasMax = 0; //Define o número máximo de colunas da planilha $indiceUltColuna = 0; //Define o indice da ultima coluna da planilha $colecao = $topicoInicia->getCapitulo()->getLivro()->getColecao()->getNome(); //Nome da coleção a qual o livro pertence $tituloPlanilha = "PLANILHA DE ACOMPANHAMENTO PROGRAMÁTICO ({$this->data["ano_letivo"]})"; $textoAula = "Aula "; //Define o texto das celulas "aula" $textoData = "Data:"; //Define o texto das celulas "data" $alturaLinha = 40; //Define a autura minima das linhas $larguraLegenda = 5; //Define a largura de cada coluna das legendas em pixels $textoPaguinas = "PÁGINAS"; //Define o texto da coluna de páginas $textoPaguinasVertical = FALSE; //Define se o texto sobre a coluna páginas ficará na vertical ou não //Coluna da esquerda $arrayExplicativo = array("Preenchimento", "O status do andamento dos assuntos do livro da coleção {$colecao} " . "deve ser atualizado a cada aula ministrada pelo professor, " . "independente se na aula foi utilizado ou não o livro didático."); $arrayDadosProfessor = array("PROFESSOR:", "", "", "SÉRIE:", "TURMA:", "UNIDADE:"); //Coluna da direita $arrayDadosLivro = array("", "{$topicoInicia->getCapitulo()->getLivro()->getTitulo()} ({$topicoInicia->getSequencial()} º Bimestre)", $topicoInicia->getCapitulo()->getDisciplina()->getNome(), "Livro Didático: {$topicoInicia->getCapitulo()->getLivro()->getTitulo()}", ""); $arrayColunaAulaData = array($textoAula, $textoData, ""); // $arrayLegenda = array("A" => "EM ANDAMENTO", "C" => "CONCLUÍDO", "R" => "REVISADO"); //Início da execução //Verificação de erros de configuração if (count($arrayExplicativo) + count($arrayDadosProfessor) != count($arrayDadosLivro) + count($arrayColunaAulaData)) { //As somas de itens entre os pares de arrays acima devem ser iguais die("Planilha mal configurada"); } //Variaveis dinâmicas usadas na execução $x = $xBase; $y = $yBase + 1; $nColunasMax += $xBase + $nColunasCapitulos + $nColunasPaginas + $nColunasAulas * count($arrayLegenda); $indiceUltColuna += $xBase + $nColunasMax; //Inserindo os dados na planilha // $this->workSheet->setCellValueByColumnAndRow($x, $y, $tituloPlanilha); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(20); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($x + 1) . $y . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("font" => array("bold" => TRUE), "borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000")), "left" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000")), "right" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000")), "bottom" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("argb" => "000000"))))); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $indiceUltColuna, $y); $this->workSheet->getRowDimension($y++)->setRowHeight($alturaLinha); //Variaveis de indices e contadores $linhaExpl = 0; $linhaProf = 0; $linhaLivro = 0; $linhaAulaData = 0; $colunaLegenda = 0; $colunaLegendaChave = array_keys($arrayLegenda); foreach (range(0, count($arrayExplicativo) + count($arrayDadosProfessor) - 1) as $value) { $x = $xBase; //Preenchendo a coluna da esquerda if (isset($arrayExplicativo[$linhaExpl])) { $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayExplicativo[$linhaExpl++]); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(12); if ($linhaExpl == count($arrayExplicativo)) { $this->workSheet->getRowDimension($y)->setRowHeight($alturaLinha + 25); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($xBase + $nColunasCapitulos + 2) . $y)->applyFromArray(array("borders" => array("bottom" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); } } else { $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayDadosProfessor[$linhaProf++]); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); } $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "FFFFFF")))); $this->workSheet->getStyleByColumnAndRow($xBase + $nColunasCapitulos + 1, $y)->applyFromArray(array("borders" => array("right" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->mergeCellsByColumnAndRow($xBase, $y, $nColunasCapitulos + $xBase + 1, $y); //Preenchendo as colunas das legendas if (isset($colunaLegendaChave[$colunaLegenda])) { $x += $nColunasCapitulos + $nColunasPaginas + $colunaLegenda + $xBase; $this->workSheet->setCellValueByColumnAndRow($x, $y, $textoPaguinas); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); if ((bool) $textoPaguinasVertical) { $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setTextRotation(90); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } else { $this->workSheet->getColumnDimensionByColumn($x)->setWidth(13); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_BOTTOM)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array("font" => array("italic" => TRUE, "bold" => TRUE))); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $x, $y + count($arrayExplicativo) + count($arrayDadosProfessor) - 1); foreach ($arrayLegenda as $legenda) { $x = $xBase + $nColunasCapitulos + $nColunasPaginas + $colunaLegenda + 2; $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayLegenda[$colunaLegendaChave[$colunaLegenda]]); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "EFAC86")))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($x) . $y . ":" . ExcelAux::indiceParaColuna($x) . ($y + count($arrayDadosLivro) - 1))->applyFromArray(array("borders" => array("right" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))), "font" => array("italic" => TRUE))); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setTextRotation(90); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $x, $y + count($arrayDadosLivro) - 1); $colunaLegenda++; } } //Preenchendo a coluna da direita $x = $xBase; if (isset($arrayDadosLivro[$linhaLivro])) { $x += $nColunasCapitulos + $nColunasPaginas + count($arrayLegenda) + 2; $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayDadosLivro[$linhaLivro++]); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(18); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "FFFFFF")), "borders" => array("left" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))), "font" => array("bold" => TRUE))); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $indiceUltColuna, $y); } else { $x = $xBase + $nColunasCapitulos + $nColunasPaginas - (count($arrayLegenda) - 2); $colorir = FALSE; foreach (range(1, $nColunasAulas) as $value) { $this->workSheet->setCellValueByColumnAndRow($x += count($arrayLegenda), $y, $arrayColunaAulaData[$linhaAulaData] . (!$linhaAulaData ? str_pad($value, 2, 0, STR_PAD_LEFT) : "")); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => ($colorir = !$colorir) ? "EFAC86" : "FFFFFF")), "borders" => array("left" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))), "font" => array("underline" => TRUE))); if (!$linhaAulaData) { //Centralizando a primeira palavra do bloco $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(16); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($x) . $y . ":" . ExcelAux::indiceParaColuna($x + count($arrayLegenda)) . $y)->applyFromArray(array('borders' => array('top' => array('style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'))), "font" => array("bold" => TRUE, "underline" => FALSE))); } $this->workSheet->mergeCellsByColumnAndRow($x, $y, $x + count($arrayLegenda) - 1, $y); } $linhaAulaData++; } $y++; } //Preenchendo o resto da planilha $capituloTitulo = ""; foreach ($topicos as $topico) { $x = $xBase; if ($capituloTitulo != $topico->getCapitulo()->getSequencial()) { $capituloTitulo = $topico->getCapitulo()->getSequencial(); $tituloCapitulo = "{$topico->getCapitulo()->getSequencial()}: {$topico->getCapitulo()->getNome()}"; $this->workSheet->setCellValueByColumnAndRow($x, $y, $tituloCapitulo); $this->workSheet->getRowDimension($y)->setRowHeight($alturaLinha); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(16); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($xBase + $nColunasCapitulos + $nColunasPaginas + 2) . $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "9BC2E6")), 'font' => array('bold' => true), "borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->mergeCellsByColumnAndRow($xBase, $y, $nColunasCapitulos + $xBase + 1, $y); $this->workSheet->mergeCellsByColumnAndRow($xBase + $nColunasCapitulos + 2, $y, $indiceUltColuna, $y++); } $topicoDesc = "Tópico {$topico->getSequencial()} : {$topico->getNome()}"; $pagina = "{$topico->getPaginaInicial()} a {$topico->getPaginaFinal()}"; $this->workSheet->setCellValueByColumnAndRow($x, $y, $topicoDesc); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($xBase + $nColunasCapitulos + $nColunasPaginas + 2) . $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "F2F2F2")), 'font' => array("italic" => TRUE), "borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->getRowDimension($y)->setRowHeight($alturaLinha); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->setCellValueByColumnAndRow($x += $nColunasCapitulos + $xBase + 1, $y, $pagina); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "FFFFFF")), 'borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'))))); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->mergeCellsByColumnAndRow($xBase, $y, $nColunasCapitulos + $xBase + 1, $y); // $x++; $colorir = TRUE; foreach (range(1, $nColunasAulas) as $colAula) { foreach ($colunaLegendaChave as $value) { $this->workSheet->setCellValueByColumnAndRow($x + 1, $y, $value); $this->workSheet->getStyleByColumnAndRow($x + 1, $y)->getFont()->setSize(14); $this->workSheet->getStyleByColumnAndRow($x + 1, $y)->applyFromArray(array('borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'))), 'fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => $colorir ? "EFAC86" : "FFFFFF")))); $this->workSheet->getStyleByColumnAndRow(++$x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER)->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); } $colorir = !$colorir; } $y++; } //Definindo a largura das páginas como autosize // $this->workSheet // ->getColumnDimensionByColumn($xBase + $nColunasCapitulos + $nColunasPaginas) // ->setAutoSize(TRUE); //Definindo a largura das colunas das legendas foreach (range($xBase + $nColunasCapitulos + $nColunasPaginas + 2, $indiceUltColuna) as $value) { $this->workSheet->getColumnDimensionByColumn($value)->setWidth($larguraLegenda); } //Definindo as bordas em volta da planilha $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . --$y . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("borders" => array("bottom" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000"))))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . ($yBase + 1) . ":" . ExcelAux::indiceParaColuna($xBase + 1) . $y)->applyFromArray(array("borders" => array("left" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000"))))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($indiceUltColuna + 1) . ($yBase + 1) . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("borders" => array("right" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000"))))); //Imprimindo a planilha $this->printPlanilha($colecao); }