/** * Método que lista todos os anexos relacionados ao tópico ou capitulo informado. * Método exclusivo para o estudo online * * @param Topico $topico O tópico usado como filtro * * @return ResultSetHydrator Um objeto contendo os dados da resposta da consulta * * @throws LivroException */ public function deTopicoECapitulo(Topico $topico) { if (!$topico->getId()) { throw new LivroException('O tópico informado não é válido'); } $this->tg->defineColuna('fk_conteudo', $this->colInt); return $this->tg->selectObj($this->select()->distinct('pk_anexo')->join('apostilas.anexos_vin', array('fk_anexo' => 'pk_anexo'))->where("fk_conteudo={$topico->getId()} " . "or fk_capitulo={$topico->getCapitulo()->getId()}")); }
/** * Método que verifica se existem questões suficientes para a * realização dos minetestes por tópico. * Método intimamente ligado ao modelo de mine teste do estudo online. * * @return boolean Retorna TRUE caso tenha o número mímino de questões * para realizar o teste ou FALSE caso não tenha */ public function temParaTopico(Topico $topico) { $teste = new TesteTopico(); $query = "SELECT count(pk_questao) as total FROM testes.questao " . "inner join testes.questao_vin_topico on pk_questao = questao_vin_topico_pk_questao " . "WHERE questao_vin_topico_pk_conteudo={$topico->getId()}"; $prepare = $this->tg->getPDO()->prepare($query); $prepare->execute(); $stdClass = $prepare->fetchObject(); return $stdClass->total >= $teste->getMaxQuestoes(); }
/** * Retorna a série associada ao topico informado * @param Topico $topico O tópico usado como filtro * @return Serie Um objeto contendo os dados da série * @throws UnidadeException */ public function deTopico(Topico $topico) { if (!$topico->getId()) { throw new LivroException("O tópico informado é inválido"); } $this->tg->defineColuna("pk_conteudo", new ResultSetMap(Column::INTEGER)); $resultset = $this->tg->selectObj($this->select()->join("apostilas.livro", array("fk_serie" => "pk_serie"))->join("apostilas.capitulo", array("fk_livro" => "pk_livro"))->join("apostilas.conteudo", array("fk_capitulo" => "pk_capitulo"))->where(array("pk_conteudo" => $topico->getId()))->limit(1)); if (!$resultset->rowCount()) { throw new UnidadeException("A série informada não foi encontrada"); } return $resultset->fetch(); }
/** * Retorna a série associada ao topico informado * @param \Kernel\Modelo\Livro\Topico $topico O tópico usado como filtro * @return \Kernel\Modelo\Unidade\Serie Um objeto contendo os dados da série * @throws \Kernel\Exception\UnidadeException */ public function deTopico(\Kernel\Modelo\Livro\Topico $topico) { if (!$topico->getId()) { throw new \Kernel\Exception\LivroException("O tópico informado é inválido"); } $this->tableGatway->defineColuna("pk_conteudo", new \GGE\Lib\Sql\ResultSetMap(\GGE\Lib\Sql\Column::INTEGER)); $select = new \GGE\Lib\Sql\Querys\Select(); $resultset = $this->tableGatway->selectObj($select->join("apostilas.livro", array("pk_serie" => "fk_serie"))->join("apostilas.capitulo", array("pk_livro" => "fk_livro"))->join("apostilas.conteudo", array("pk_capitulo" => "fk_capitulo"))->where(array("pk_conteudo" => $topico->getId()))->limit(1)); if (!$resultset->rowCount()) { throw new \Kernel\Exception\UnidadeException("A série informada não foi encontrada"); } return $resultset->fetch(); }
/** * Método que retorna um teste de acordo com o aluno e tópico informados. * * @param Aluno $aluno O aluno que realizou o teste * @param Topico $topico O tópico relacionado ao teste * * @return TesteCapitulo O teste */ public function porAlunoTopico(Aluno $aluno, Topico $topico) { $capitulo = $topico->getCapitulo(); return $this->deAlunoTopCap($aluno, $capitulo); }
/** * Metodo que associa o código do anexo ao código da série, conteúdo e/ou capítulo * @param int O código do anexo a ser vinculado * @param Anexos $anexo O anexo a ser viinculado * @param \Kernel\Modelo\Unidade\Serie $serie A série referente ao anexo * @param Topico|Capitulo $voidConteudo O tópico ou capítulo referente ao anexo * @return boolean Retorna TRUE em caso de sucesso ou FALSE em caso de falha * @throws \PDOException */ public function insertVinculo(Anexos $anexo, \Kernel\Modelo\Unidade\Serie $serie, $voidConteudo) { if (!$anexo->getId()) { throw new Exception("Nãp foi possível associar o anexo informado ao livro"); } if ($voidConteudo instanceof Topico) { $query = "INSERT INTO apostilas.anexos_vin (fk_anexo, fk_conteudo, fk_serie)\n values (:fk_anexo, :fk_conteudo, :fk_serie)"; $prepare = $this->tablegateway->getPDO()->prepare($query); $prepare->bindParam(':fk_conteudo', $voidConteudo->getId(), PDO::PARAM_INT); } elseif ($voidConteudo instanceof Capitulo) { $query = "INSERT INTO apostilas.anexos_vin (fk_anexo, fk_serie, fk_capitulo)\n values (:fk_anexo, :fk_serie, :fk_capitulo)"; $prepare = $this->tablegateway->getPDO()->prepare($query); $prepare->bindParam(':fk_capitulo', $voidConteudo->getId(), PDO::PARAM_INT); } else { $this->tablegateway->getPDO()->rollBack(); throw new LivroException("Erro ao associar o anexo ao conteúdo"); } $prepare->bindParam(':fk_anexo', $anexo->getId(), PDO::PARAM_INT); $prepare->bindParam(':fk_serie', $serie->getId(), PDO::PARAM_INT); return $prepare->execute(); }
/** * Método que atualiza um tópico * @param Topico $topico O tópico a ser atualizado contendo os novos dados * @return boolean Retorna TRUE em caso de sucesso * @throws SqlException */ public function update(Topico $topico) { if (!$topico->getId()) { throw new \Kernel\Exception\LivroException("O tópico informado é inválido"); } $resultset = $this->tableGatway->update(array("pk_conteudo" => $topico->getId()), array("conteudo_nome" => $topico->getNome(), "fk_capitulo" => $topico->getCapitulo()->getId(), "topico" => $topico->getSequencial(), "total" => $topico->getTotal(), "paginas_trabalhadas" => $topico->getPaginasTrabalhadas(), "pagina_inicial" => $topico->getPaginaInicial(), "pagina_final" => $topico->getPaginaFinal(), "conteudo_resumo" => $topico->getResumo(), "conteudo_digitalizado" => (int) $topico->getConteudoDigital())); }
/** * Método que retorna o livreto que possue o tópico informado. * * @param Topico $topico */ public function deTopico(Topico $topico) { $this->defColInteger(array('pk_conteudo')); return $this->tg->selectObj($this->select()->join('apostilas.capitulo', array('fk_livro' => 'pk_livro'))->join('apostilas.conteudo', array('fk_capitulo' => 'pk_capitulo'))->where(array('pk_conteudo' => $topico->getId()))->limit(1))->fetch(); }
/** * Método que retorna o acompanhamento de um determinado tópico. * Retorna o ultimo status * * @param Topico $topico O tópico de referência * * @return Acompanhamento O ultimo dado de acompanhamento salvo no banco */ public function deTopico(Topico $topico) { $this->defColInteger(array("pk_conteudo")); return $this->tg->selectObj($this->select()->where(array("pk_conteudo" => $topico->getId()))->order("pk_acompanhamento", Order::DSC)->limit(1))->fetch(); }