Location: PHPKode > projects > Nivelamento > nivelamento/fimprova.php
<?php
// $Id: fimprova.php,v 1.15 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 //
//  ------------------------------------------------------------------------ //
/**
 * fimprova.php, Responsável por gerar o formulário de encerramento da prova
 * 
 * Este arquivo exibe um relatório da prova que o aluno está fazendo e o permite
 * que encerre a prova
 * @author Marcello Brandão <hide@address.com>
 * @version 1.0
 * @package nivelamento
 */
/**
 * Definindo arquivo de template da página  
 */

/**
 * Arquivos de cabeçalho do Xoops para carregar ...
 */
include("../../mainfile.php");
$xoopsOption['template_main'] = 'nivelamento_fimprova.html';
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");

/**
 * Definindo arquivo de template da página  
 */
$xoopsOption['template_main'] = 'nivelamento_fimprova.html';

/**
 * Pegando cod_resultado do formulário e uid do aluno da session 
 */
$cod_resultado = $_GET['cod_resultado'];
$uid = $xoopsUser->getVar('uid');

/**
 * Criação das Fábricas de objetos que vamos precisar 
 */
$fabrica_de_provas= new Xoopsnivelamento_provasHandler($xoopsDB);
$fabrica_de_perguntas = new Xoopsnivelamento_perguntasHandler($xoopsDB);
$fabrica_resultados = new Xoopsnivelamento_resultadosHandler($xoopsDB);


/**
 * Fabricando o objeto resultado 
 */
$resultado = $fabrica_resultados->get($cod_resultado);
$cod_prova = $resultado->getVar('cod_prova');

/**
 * Fabricando o objeto prova 
 */
$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);
}

//Vamos agora pegar o numero de perguntas da prova e quantas o aluno respondeu
//e quantas ele deixou em branco para lembrá-lo e confirmar que ele quer encerrar a prova

/**
 * Criação de objetos de critério para passar para as Fábricas 
 */
$criteria_prova     = new criteria ('cod_prova',$cod_prova);
$criteria_usuario   = new criteria ('uid_aluno',$uid);
$criteria_compo     = new criteriaCompo ($criteria_prova);
$criteria_compo->add($criteria_usuario);

/**
 * Buscando o total de perguntas desta prova na Fábrica de Perguntas
 */
$qtd_perguntas = $fabrica_de_perguntas->getCount($criteria_prova);

/**
 * 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
 */
if  ($tempo_restante['segundos'] < 0){
    $resultado->setVar('terminou', 1);
    $resultado->unsetNew();
    $fabrica_resultados->insert($resultado,true);
    redirect_header("index.php",15,_MD_NIV_ACABOU);

}

/**
 * Se o tempo não tiver estourado ainda precisamos do
 * cod_resultado para salvar o resultado se o aluno quiser
 */
$cod_resultado = $resultado->getVar('cod_resultado');

/**
 * Buscando titulo da prova. descricao e quantidade de perguntas respondidas 
 */
$qtd_respostas = $resultado->contarRespostas();
$titulo = $prova->getVar('titulo');
$descricao = $prova->getVar('descricao');

/**
 * Buscando campo de segurança para o formulário 
 */
$campo_token    = $GLOBALS['xoopsSecurity']->getTokenHTML();

//nome do módulo
$nome_modulo    = $xoopsModule->getVar('name');



/**
 * Atribuindo variáveis ao template
 * obs: poderia ter sido feito direto na étapa anterior
 * mas por questões de leitura de código separei os dois
 * depois podemos pensar em juntar numa seção só
 */
$xoopsTpl->assign('xoops_pagetitle', $xoopsModule->getVar("name"). " - ".$titulo);
$xoopsTpl->assign('nome_modulo',    $nome_modulo);      //Nome do módulo para o breadcrump
$xoopsTpl->assign('titulo',         $titulo);           //Título da prova
$xoopsTpl->assign('descricao',      $descricao);        //Descrição da prova
$xoopsTpl->assign('cod_prova',      $cod_prova);        //Codigo da prova(para voltar para a prova caso desista de terminar a prova agora
$xoopsTpl->assign('qtd_perguntas',  $qtd_perguntas);    // qtd de perguntas na prova
$xoopsTpl->assign('qtd_respostas',  $qtd_respostas);    //qtd de respostas na prova
$xoopsTpl->assign('cod_resultado',  $cod_resultado);    //Para terminar a prova o proximo script precisa deste dado
$xoopsTpl->assign('tempo_gasto',    $tempo_gasto);      //Quanto tempo desde o inicio da prova
$xoopsTpl->assign('lang_temporestante', sprintf(_MD_NIV_TEMPORESTANTECOMPOSTO, $tempo_restante['horas'], $tempo_restante['minutos']));
$xoopsTpl->assign('lang_andamento',     sprintf(_MD_NIV_ANDAMENTO            , $qtd_respostas          , $qtd_perguntas            ));
$xoopsTpl->assign('lang_terminou',      sprintf(_MD_NIV_TERMINOU             , $tempo_gasto['horas'], $tempo_gasto['minutos']));
$xoopsTpl->assign('lang_alerta',_MD_NIV_ALERTA );
$xoopsTpl->assign('lang_confirmasim',_MD_NIV_CONFIRMASIM );
$xoopsTpl->assign('lang_confirmanao',_MD_NIV_CONFIRMANAO );
$xoopsTpl->assign('lang_confirmacao',_MD_NIV_CONFIRMACAO );
$xoopsTpl->assign('lang_stats',_MD_NIV_STATS );

$xoopsTpl->assign('lang_prova',_MD_NIV_PROVA);
$xoopsTpl->assign('campo_token', $campo_token);

/**
 * Inclusão de arquivo de fechamento da página
 */
include("../../footer.php");
?>
Return current item: Nivelamento