<?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");
?>