Esempio n. 1
0
 /**
  * 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();
 }
 /**
  * Método que retorna questões associadas ao capítulo informado e diferentes 
  * das informadas
  * @param Model $model O capítulo associado as questões
  * @param array $questoes As questões já definidas
  * @return ResultSetHydrator Um objeto contendo o resultado da consulta
  */
 public function questoesAdicionais(ConteudoInterno $model, array $questoes)
 {
     if ($model instanceof Capitulo) {
         $tipoTeste = new TesteCapitulo();
         $fk = "fk_capitulo";
     } else {
         $tipoTeste = new TesteTopico();
         $fk = "fk_conteudo";
     }
     $limit = $tipoTeste->getMaxQuestoes() - count($questoes);
     $where = " {$fk}={$model->getId()} ";
     foreach ($questoes as $questao) {
         $where .= "and pk_questao!={$questao->getId()} ";
     }
     $query = "SELECT distinct on(pk_questao) * FROM testes.questao " . "inner join testes.questao_vin_topico on " . "pk_questao=questao_vin_topico_pk_questao " . "inner join apostilas.conteudo on " . "pk_conteudo=questao_vin_topico_pk_conteudo " . "where {$where} limit {$limit}";
     return $this->tg->querySelect($query);
 }
Esempio n. 3
0
 /**
  * Método que gera um novo teste e o retorna para o aluno.
  */
 private function get_novo_teste()
 {
     try {
         $this->filtro->initGets('topico');
         $usrValidar = new Usuarios();
         $sqlQuestao = new SqlQuestaoService();
         $sqlTurma = new SqlTurma();
         $sqlTopico = new SqlTopico();
         $sqlAcomp = new SqlAcompanhamento();
         $aluno = $usrValidar->getAluno(false);
         $topico = $sqlTopico->get($this->filtro->get('topico'));
         $capitulo = $topico->getCapitulo();
         $acomp = $sqlAcomp->deTopico($topico);
         $tipo = filter_input(INPUT_GET, "testePara");
         if ($tipo == "capitulo") {
             $sqlTeste = new SqlTesteCapitulo();
             $novoTeste = new TesteCapitulo();
             $novoDe = $capitulo;
         } elseif ($tipo == "topico") {
             $sqlTeste = new SqlTesteTopico();
             $novoTeste = new TesteTopico();
             $novoDe = $topico;
         } else {
             throw new Exception("O alvo do teste não é permitido");
         }
         if ($acomp->getStatus() != Acompanhamento::STATUS_CONCLUIDO && $acomp->getStatus() != Acompanhamento::STATUS_REVISADO) {
             throw new Exception('O tópico informado ainda não ' . 'foi concluído. Tente outro.');
         }
         $teste = $sqlTeste->porAlunoTopico($aluno, $topico);
         if ($teste) {
             //Caso já exista um teste
             if (!$teste->podeRefazer()) {
                 //O teste já foi feito e não pode ser refeito
                 throw new Exception('Você já realizou o teste. ' . 'Sua nota não permite refazer o teste. Que pena.');
             }
         } else {
             //Caso ainda não exista um teste
             $turma = $sqlTurma->deALuno($aluno);
             $q1 = $sqlQuestao->semTurma($novoDe, $turma);
             $questoes = $q1->fetchAll();
             if (count($questoes) < $novoTeste->getMaxQuestoes()) {
                 $q2 = $sqlQuestao->questoesAdicionais($capitulo, $questoes);
                 $questoes = array_merge($questoes, $q2->fetchAll());
             }
             $teste = $novoTeste;
             $teste->setAluno($aluno);
             $teste->setAlvo($novoDe);
             $teste->setQuestoes($questoes);
             $sqlTeste->insert($teste);
         }
         $arrayTmp = array();
         foreach ($teste->getQuestoes() as $questao) {
             $tmp = new stdClass();
             $tmp->idQuestao = $questao->getId();
             $tmp->questao = $questao->getQuestao();
             $tmp->tipo = $questao->getTipo();
             $tmp->tipoTexto = $questao->getTipoInsert();
             $tmp->qtAlternativas = $questao->getNumAlternativas();
             array_push($arrayTmp, $tmp);
         }
         //Gerando a resposta
         $this->setMensagem('Teste gerado com sucesso');
         $this->appendResposta($arrayTmp);
         $this->statusTrue();
     } catch (SqlException $sql) {
         $this->setMensagem('Ocorreu um erro interno. ' . 'Tente novamente mais tarde.');
     } catch (Exception $exc) {
         $this->setMensagem($exc->getMessage());
     }
     $this->printResposta();
 }