<?php
// $Id: perguntas.php,v 1.18 2007/03/24 20:08:53 marcellobrandao Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// <http://www.xoops.org/> //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
/**
* perguntas.php, Responsável por exibir a pergunta da vez
*
* Este arquivo prepara o formulário com a pergunta e se houver um
* documento para ele ele também o exibe
* @author Marcello Brandão <hide@address.com>
* @version 1.0
* @package nivelamento
*/
/**
* Arquivos de cabeçalho do Xoops para carregar ...
*/
include("../../mainfile.php");
include("../../header.php");
/**
* Inclusões das classes do módulo
*/
include("class/nivelamento_perguntas.php");
include("class/nivelamento_provas.php");
include("class/nivelamento_respostas.php");
include("class/nivelamento_resultados.php");
include("class/nivelamento_documentos.php");
include("class/navegacao.php");// classe derivada da pagenav do xoops para exibir as perguntas que já foram respondidas
/**
* Inclusão de classe de barra de navegação
*/
include_once ("../../class/pagenav.php");
/**
* Definindo arquivo de template da página
*/
$xoopsOption['template_main'] = 'nivelamento_perguntas.html';
/**
* Pegando cod_prova e start do GET e uid do aluno da session
* o start é a possição em que a prova está, a questão
*/
$cod_prova = $_GET['cod_prova'];
$uid = $xoopsUser->getVar('uid');
$start = $_GET['start'];
/**
* Criação das Fábricas de objetos que vamos precisar
*/
$fabrica_de_provas = new Xoopsnivelamento_provasHandler($xoopsDB);
$fabrica_resultados = new Xoopsnivelamento_resultadosHandler($xoopsDB);
$fabrica_de_respostas = new Xoopsnivelamento_respostasHandler($xoopsDB);
$fabrica_de_perguntas = new Xoopsnivelamento_perguntasHandler($xoopsDB);
$fabrica_de_documentos = new Xoopsnivelamento_documentosHandler($xoopsDB);
/**
* Buscando na fábrica a prova a que esta pergunta pertence
*/
$prova = $fabrica_de_provas->get($cod_prova);
/**
* Verificando privilégios do aluno para esta prova
*/
if (!($prova->isAutorizado())){
redirect_header("index.php",5,_MD_NIV_PROIBIDO);
}
/**
* Verificando prova já expirou
*/
$fim = $prova->getVar("data_fim","n");
$tempo = $prova->getVar("tempo","n");
$fimmaistempo = $fabrica_de_provas->dataMysql2dataUnix($fim)+$tempo;
if ($fimmaistempo<time()){
redirect_header("index.php",5,_MD_NIV_PROIBIDO);
}
/**
* Verificando se aluno já tinha terminado a prova antes em caso positivo
* informa atraves de mensagem
*/
$criteria_prova = new criteria ('cod_prova',$cod_prova);
$criteria_prova->setOrder('ASC');
$criteria_prova->setSort('ordem');
$criteria_aluno = new criteria('uid_aluno',$uid);
$criteria_terminou = new criteria('terminou',1);
$criteria_resultado = new criteriaCompo ($criteria_aluno);
$criteria_resultado->add($criteria_prova);
$criteria_resultado->add($criteria_terminou);
if ($fabrica_resultados->getCount($criteria_resultado)>0){
redirect_header("index.php",5,_MD_NIV_JATERMINOU);
}
/**
* Verificando se a prova já tem perguntas cadastradas se não
* tiver , não deixa aluno ter acesso
*/
$qtd_perguntas = $fabrica_de_perguntas->getCount($criteria_prova);
if ($qtd_perguntas<1){
redirect_header("index.php", 5, _MD_NIV_PROVAVAZIA);
}
/**
* Criação de objetos de critério para passar para as Fábricas
*/
$criteria_compo = new criteriaCompo ($criteria_prova);
$criteria_compo->add($criteria_aluno);
/**
* Buscando na fábrica a quantidade de resultados desta prova para este aluno
* para logo em seguida verificar se já existe este objeto, não exisitndo
* joga de volta para a introdução. O aluno não pode pular a instrocução por
* questões funcionais
*/
$qtd_resultados = $fabrica_resultados->getCount($criteria_compo);
if ($qtd_resultados<1){
redirect_header("verprova.php?cod_prova=".$cod_prova, 5, "Você não pode pular a parte de iniciar prova");
}
/**
* Buscando o objeto resultado desta prova deste aluno na fábrica
*/
$resultados = $fabrica_resultados->getObjects($criteria_compo);
$resultado = $resultados[0];
/**
* Calculos de tempo restante, tempo gasto e horário do fim da prova
* obs: cabe passar isso para dentro da classe resultado ou prova
*/
$horaatual = time();
$data_inicio_segundos = $fabrica_de_provas->dataMysql2dataUnix($resultado->getVar('data_inicio'));
$tempo_prova = $prova->getVar('tempo');
$tempo_restante = $fabrica_de_provas->converte_segundos( (($data_inicio_segundos+$tempo_prova)-$horaatual) ,"H");
$tempo_gasto = $fabrica_de_provas->converte_segundos( ($horaatual-$data_inicio_segundos) ,"H");
$hora_fim_da_prova = $fabrica_de_provas->converte_segundos( ($data_inicio_segundos + $tempo_prova) ,"H");
/**
* Verificação de tempo da prova: se estourar o tempo salvar o resultado e
* avisar o aluno com a possibilidade de dar a nota direto pro aluno se assim
* estiver definido na administração
*/
if ($tempo_restante['segundos'] < 0){
$resultado->setVar('terminou', 1);
$resultado->unsetNew();
if ($xoopsModuleConfig['notadireta']==1){
$resultado->setVar('fechada', 1);
}
$fabrica_resultados->insert($resultado,true);
redirect_header("index.php", 5, _MD_NIV_ACABOU);
}
//busca titulo da prova
$titulo_prova = $prova->getVar('titulo',"s");
/**
* buscando as perguntas da prova, depois separando
* a nossa pergunta e enfim pegando o código dela que vamos precisar
*/
$perguntas = $fabrica_de_perguntas->getObjects($criteria_prova);
$pergunta = $perguntas[$start];
$cod_pergunta = $pergunta->getVar('cod_pergunta');
/**
* buscando documentos a serem exibidos antes da pergunta
*/
$documentos = $fabrica_de_documentos->getDocumentosProvaPergunta($cod_prova,$cod_pergunta);
/**
* Criação de objetos de critério para passar para as Fábricas
*/
$criteria_pergunta = new criteria ('cod_pergunta',$cod_pergunta);
/**
* buscando as respostas a serem exibidas
*/
$respostas = $fabrica_de_respostas->getObjects($criteria_pergunta);
/**
* buscar resposta anterior a esta pergunta caso
* o aluno já a tenha respondido e o número de perguntas que
* ele já respondeu
*/
$cod_resposta_anterior = $resultado->getRespostaUsuario($cod_pergunta);
$qtd_respostas = $resultado->contarRespostas();
$cod_resultado = $resultado->getVar('cod_resultado');
/**
* Vamos buscar os codigos das perguntas respondidas e os codigos das perguntas
* para passar como parametros para a barra de navegação que marca as perguntas
* que já foram respondidas em vermelho.
*/
$cod_perguntas_respondidas = $resultado->getCodPerguntasAsArray();
$cod_perguntas = $fabrica_de_perguntas->getCodObjects($criteria_prova);
$navegacao = new NavegadorProva($qtd_perguntas, 1,$start , "start", "cod_prova=".$cod_prova);
$barra_navegacao = $navegacao->renderImageNav($cod_perguntas, $cod_perguntas_respondidas, $xoopsModuleConfig['qtdmenu']);
//Montando o Formulário
$formulario = $fabrica_de_perguntas->renderFormResponder('form_resposta.php',$pergunta,$respostas,$cod_resposta_anterior);
$formulario->assign($xoopsTpl);
//sanitizing
//falta um if para não dar uma notice
foreach ($documentos as $doc){
// $doc['documento'] = text_filter($doc['documento'],true);
$doc['documento'] = $doc['documento'];
}
//nome do módulo
$nome_modulo = $xoopsModule->getVar('name');
//Repassando as variáveis para o template
$xoopsTpl->assign('xoops_pagetitle', $xoopsModule->getVar("name"). " - ".$titulo_prova);
$xoopsTpl->assign('nome_modulo', $nome_modulo);
$xoopsTpl->assign('documentos', $documentos);
$xoopsTpl->assign('barra_navegacao', $barra_navegacao);
$xoopsTpl->assign('start', $start);
$xoopsTpl->assign('titulo', $titulo_prova);
$xoopsTpl->assign('cod_prova', $cod_prova);
$xoopsTpl->assign('cod_resultado', $cod_resultado);
$xoopsTpl->assign('qtd_perguntas', $qtd_perguntas);
$xoopsTpl->assign('qtd_respostas', $qtd_respostas);
$xoopsTpl->assign('lang_andamento', sprintf(_MD_NIV_ANDAMENTO,$qtd_respostas,$qtd_perguntas));
$xoopsTpl->assign('lang_encerrar',_MD_NIV_ENCERRARPROVA);
$xoopsTpl->assign('lang_temporestante', sprintf(_MD_NIV_TEMPORESTANTECOMPOSTO,$tempo_restante['horas'],$tempo_restante['minutos']));
$xoopsTpl->assign('lang_textosapoio',_MD_NIV_TEXTOSAPOIO);
$xoopsTpl->assign('lang_pergunta',_MD_NIV_PERGUNTA);
$xoopsTpl->assign('lang_respostas',_MD_NIV_RESPOSTAS);
$xoopsTpl->assign('lang_legenda',_MD_NIV_LEGENDA);
$xoopsTpl->assign('lang_jaresp',_MD_NIV_JARESP);
$xoopsTpl->assign('lang_naoresp',_MD_NIV_NAORESP);
$xoopsTpl->assign('lang_iconjaresp',_MD_NIV_ICONJARESP);
$xoopsTpl->assign('lang_iconnaoresp',_MD_NIV_ICONNAORESP);
$xoopsTpl->assign('tempo_restante',$tempo_restante);
//Fecha a página com seu rodapé. Inclusão Obrigatória
include("../../footer.php");
?>