Location: PHPKode > projects > Nivelamento > nivelamento/perguntas.php
<?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");
?>
Return current item: Nivelamento