Location: PHPKode > projects > Nivelamento > nivelamento/form_resposta.php
<?php
// $Id: form_resposta.php,v 1.6 2007/03/24 14:41:41 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 //
//  ------------------------------------------------------------------------ //
/**
* form_resposta.php, Responsável pelo processamento da resposta do usuário
* 
* Este arquivo processa a resposta do aluno após alguns testes de segurança 
* @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");

/**
 * Passar as variáveis enviadas por $_POST para variáveis com o mesmo nome
 * As três variáveis vindas via POST são
 * $cod_pergunta      
 * $cod_resposta     
 * $start
 */
if (isset($_POST)) {
	foreach ($_POST as $k => $v) {
		$$k = $v;
	}
}
/**
 * Buscar uid do aluno que está fazendo a prova
 */
$uid = $xoopsUser->getVar('uid');

/**
 * Se o aluno não escolheu nenhuma resposta faz ele voltar para a página
 */
if ($cod_resposta==""){
	redirect_header($_SERVER['HTTP_REFERER'], 5, _MD_NIV_RESPOSTAEMBRANCO);
}

/**
 * Verificação de segurança validando o TOKEN 
 */
if (!($GLOBALS['xoopsSecurity']->check())){
	redirect_header($_SERVER['HTTP_REFERER'], 5, _MD_NIV_TOKENEXPIRED);
}

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

/**
 * Criação de objetos de critério para passar para as Fábricas 
 */
$criteria_pergunta          = new criteria ('cod_pergunta',$cod_pergunta);
$criteria_certa             = new criteria ('iscerta',1);
$criteria_resposta_certa    = new criteriaCompo($criteria_pergunta);
$criteria_resposta_certa->add($criteria_certa);

/**
 * Pegando qual seria a resposta certa e em seguida seu código
 */
$respostacerta = $fabrica_respostas->getObjects($criteria_resposta_certa);
$cod_resposta_certa = $respostacerta[0]->getVar("cod_resposta");

/**
 * Pegando qual seria a prova em seguida seu código
 */
$pergunta = $fabrica_perguntas->get($cod_pergunta);
$cod_prova = $pergunta->getVar('cod_prova');

/**
 * Criando mais um criterio para cod_prova, um criterio para uid_aluno e
 * um que tenha os dois
 */
$criteria_prova     = new criteria ('cod_prova',$cod_prova);
$criteria_usuario   = new criteria ('uid_aluno',$uid);
$criteria           = new criteriaCompo ($criteria_prova);
$criteria->add($criteria_usuario);

/**
 * Determinando quantas perguntas tem a prova
 */
$qtd_perguntas = $fabrica_perguntas->getCount($criteria_prova);

/**
 * Colocando start para apontar para a próxima pergunta a menos que seja a
 * última da prova nesse caso ir para a tela de resumo do fim da prova
 * Para o futuro:voltar para a primeira sem resposta 
 */
if (($qtd_perguntas-1)==$start){
        $start = $start;
    }else{
        $start++;
    }

/**
 * Agora vem a parte do cadastro da informação
 */
/**
* buscamos as respostas que ele já deu e o código da
* resposta antiga dele para esta pergunta
*/
$resultados = $fabrica_resultados->getObjects($criteria);
$resultado  = $resultados[0];
$respostascertas = $resultado->getRespostasCertasAsArray();
$respostaserradas = $resultado->getRespostasErradasAsArray();
$par_respostas = $respostascertas+$respostaserradas;
$cod_resposta_antiga = $par_respostas[$cod_pergunta];
/**
* Se a resposta que ele tinha dado antes não é a mesma que ele
* está dando agora
*/
if (!($cod_resposta == $cod_resposta_antiga)){
    /**
    * Tira a resposta antiga dele
    */
    unset($respostascertas[$cod_pergunta]);
    unset($respostaserradas[$cod_pergunta]);
    /**
    * Verifica se ele acertou ou errou e se ele acertou coloca ela
    * no vetor de respostas certas, se ele errou coloca no de respostas
    * erradas
    */
    if ( $cod_resposta_certa == $cod_resposta ) {
        $respostascertas[$cod_pergunta]=$cod_resposta;
    }else { 
        $respostaserradas[$cod_pergunta]=$cod_resposta;
    }
    /**
    * Redefine as variáveis de repsosta no objeto resultado
    */
    $resultado->setRespostasCertasAsArray($respostascertas);
    $resultado->setRespostasErradasAsArray($respostaserradas);
    /**
    * Garante-se que ele está marcado como um objeto que já existia
    * e manda persistir o objeto e dar uma mensagem de sucesso ao
    * aluno
    */
    $resultado->unsetNew();
    $fabrica_resultados->insert($resultado);
    redirect_header("perguntas.php?cod_prova=".$cod_prova."&start=".$start, 2, $message = _MD_NIV_SUCESSO);
/**
* Se a resposta que ele tinha dado antes é a mesma que ele
* está dando agora avisa ele que ele já tinha respondido assim
* a esta pergunta
*/   
}else{
    redirect_header("perguntas.php?cod_prova=".$cod_prova."&start=".$start, 2, $message = _MD_NIV_RESPOSTA_REPETIDA);
}

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