public function __construct($testId, $password) { $this->user = UserSession::getInstance()->getUser(); $this->testId = $testId; $this->password = $password; $tprbBS = new TestProblemsBS(null); $qbuilder = new QueryBuilder('testproblems'); $qbuilder->addEqual("tpb_tst_id", $testId); $qbuilder->addOrder("tpb_questionNumber", QueryBuilder::$ASC); $this->problems = $tprbBS->findNotDeleted($qbuilder); $testBS = new TestBS(null); $qbuilder = new QueryBuilder('test'); $qbuilder->addEqual("tst_id", $testId); $qbuilder->addEqual("tst_password", $password); $tests = $testBS->findNotDeleted($qbuilder); if (count($tests) < 1) { die("<h3>ACESSO NEGADO</h3>"); } $this->test = $tests[0]; $ttrialBS = new TestTrialBS(null); $ttrialBS->createUserTrials($this->problems); $qbuilder = new QueryBuilder('testtrial'); $qbuilder->addEqual("ttl_tst_id", $testId); $qbuilder->addEqual("ttl_usr_id", $this->user->get('usr_id')); $trials = $ttrialBS->findNotDeleted($qbuilder); $this->trials = array(); if (count($trials) > 0) { foreach ($trials as $t => $trial) { $this->trials[$trial->get('ttl_prb_id')] = $trial; } } // Gravando log if ($this->test->get("tst_enableLogging") != 0) { $testBS->logAction($this->user->get('usr_id'), $this->testId, "Usuário abriu a prova."); } }
<?php if (!isset($_POST['_action'])) { header("Location: ../"); die; } include "./TestProblemsBS.php"; include "./UserSession.php"; $tproblemsBS = new TestProblemsBS($_POST); if ($_POST['_action'] == 'save') { $status = $tproblemsBS->save(); if ($status) { header("Location: ../testProblems.php?tpb_tst_id=" . $_POST['tpb_tst_id']); } else { die("Um erro inesperado ocorreu."); } } else { if ($_POST['_action'] == 'update') { $status = $tproblemsBS->update(); if ($status) { header("Location: ../testProblems.php?tpb_tst_id=" . $_POST['tpb_tst_id']); } else { die("Um erro inesperado ocorreu."); } } else { if ($_POST['_action'] == 'delete') { $status = $tproblemsBS->delete(); if ($status) { header("Location: ../testProblems.php?tpb_tst_id=" . $_POST['tpb_tst_id']); } else { die("Um erro inesperado ocorreu.");
include "controller/UserSession.php"; $session = UserSession::getInstance(); if ($session->getAccessLevel() < 3) { die("Forbidden."); } else { if (!isset($_GET['tpb_tst_id'])) { die("Forbidden."); } } $testSelected = $_GET['tpb_tst_id']; include "./controller/TestProblemsBS.php"; include "./controller/TestTrialBS.php"; header("Conten-Type: text/csv"); header('Content-Disposition: attachment; filename="notas.csv";'); $bs = new TestProblemsBS(null); if (!isset($testSelected) || $testSelected == "") { die("Nenhuma prova selecionada."); } else { $qbuilder = new QueryBuilder('testproblems'); $qbuilder->addEqual('tpb_tst_id', $testSelected); $qbuilder->addOrder('tpb_questionNumber', QueryBuilder::$ASC); $qbuilder->addOrder('prb_title', QueryBuilder::$ASC, "problem"); $tproblems = $bs->findNotDeleted($qbuilder); } $nProblems = count($tproblems); if ($nProblems <= 0) { die("Nenhum problema nesta prova."); } else { $test = $tproblems[0]->getForeignModel('tpb_tst_id'); $problemWeights = array();
public function save() { if (UserSession::getInstance()->isLogged() !== true) { die("<h1>Forbidden resource for you.</h1>"); } $model = new TestTrial(); $model->setFields($this->params); $model->set('ttl_usr_id', UserSession::getInstance()->getUser()->get('usr_id')); $existent = $this->retrieve($model); $tproblemBS = new TestProblemsBS(null); $qbuilder = new QueryBuilder("testproblems"); $qbuilder->addEqual("tpb_prb_id", $existent->get("ttl_prb_id")); $qbuilder->addEqual("tpb_tst_id", $existent->get("ttl_tst_id")); $tprobs = $tproblemBS->findNotDeleted($qbuilder); if (count($tprobs) < 1) { die("Invalid request."); } $tprob = $tprobs[0]; $today = new DateTime('now'); $model->set('ttl_lastTrial', $today->format(Model::$SQL_DATE_FORMAT)); $model->set('ttl_remoteAddr', $_SERVER['REMOTE_ADDR']); $output = array(); $status = 0; $text = exec("algoddecrypter " . $model->get('ttl_code'), $output, $status); //echo $text; $countTrial = true; $nTrials = $existent->get("ttl_trials"); $attenuation = $existent->getForeignModel("ttl_tst_id")->get("tst_scoreAttenuationPerTrial"); //echo "Att: ".$attenuation; //die("<br />Trials: ".$nTrials); if ($status != 0) { $countTrial = false; $model->set("ttl_score", "0"); $model->set("ttl_hostname", "N/A"); $model->set("ttl_reason", "<i>Código do corretor submetido foi inválido.</i>"); } else { $mat = ""; $host = ""; $question = ""; $nota = ""; sscanf($output[0], "%s\t%s\t%d\t%d", $mat, $host, $question, $nota); if ($mat == UserSession::getInstance()->getUser()->get('usr_matricula')) { if ($question == $tprob->get("tpb_questionNumber")) { $notaAttenuated = $nota * pow($attenuation, $nTrials); //die("Nota: ".$notaAttenuated); $model->set("ttl_score", $notaAttenuated); $model->set("ttl_hostname", $host); $model->set("ttl_reason", "Avaliado pelo corretor."); } else { $countTrial = false; $model->set("ttl_score", "0"); $model->set("ttl_hostname", $host); $model->set("ttl_reason", "<i>O número da questão no código do corretor não corresponde à esta questão.</i>"); } } else { $countTrial = false; $model->set("ttl_score", "0"); $model->set("ttl_hostname", $host); $model->set("ttl_reason", "<i>A matrícula passada ao corretor não corresponde à matrícula de seu usuário.</i>"); } } $model->set("ttl_sourcefile", mysql_real_escape_string($model->get("ttl_sourcefile"))); $test = $existent->getForeignModel("ttl_tst_id"); if ($test->get("tst_enableLogging") != 0) { $testBS = new TestBS(null); $testBS->logAction(UserSession::getInstance()->getUser()->get('usr_id'), $test->get('tst_id'), "Sumetida tentativa: " . $model->get('ttl_reason') . "\n" . $model->get('ttl_sourcefile'), $model->get('ttl_hostname'), $tprob->get("tpb_questionNumber"), $model->get('ttl_score')); } @($dao = new DAO(TestTrial)); if ($countTrial === true) { $model->set("ttl_trials", $existent->get("ttl_trials") + 1); } else { $model->set("ttl_trials", $existent->get("ttl_trials")); } $status = $dao->update($model); if ($status !== true) { die("Um erro ocorreu ao tentar cadastrar o usuário, favor contatar um professor:<br />" . $status); } return true; }
public function render($testSelected = null) { $bs = new TestProblemsBS(null); if (!isset($testSelected) || $testSelected == "") { echo "<i>Nenhuma prova selecionada.</i>"; return; } else { $qbuilder = new QueryBuilder('testproblems'); $qbuilder->addEqual('tpb_tst_id', $testSelected); $qbuilder->addOrder('tpb_questionNumber', QueryBuilder::$ASC); $qbuilder->addOrder('prb_title', QueryBuilder::$ASC, "problem"); $tproblems = $bs->findNotDeleted($qbuilder); } $nProblems = count($tproblems); if ($nProblems <= 0) { ?> <br/><i>Nenhum problema anexado à esta prova ainda.</i><br /> <?php } else { $test = $tproblems[0]->getForeignModel('tpb_tst_id'); $problemWeights = array(); $maxGradeSum = 0.0; foreach ($tproblems as $tp => $tproblem) { if (!isset($problemWeights[$tproblem->get('tpb_prb_id')])) { $problemWeights[$tproblem->get('tpb_prb_id')] = 0; } $problemWeights[$tproblem->get('tpb_prb_id')] += $tproblem->get('tpb_weight'); $maxGradeSum += 100.0 * $tproblem->get('tpb_weight'); } $qbuilder = new QueryBuilder('testtrial'); $qbuilder->addEqual('ttl_tst_id', $testSelected); $qbuilder->addOrder('usr_name', QueryBuilder::$ASC, "user"); $qbuilder->addOrder('usr_matricula', QueryBuilder::$ASC, "user"); $qbuilder->addOrder('ttl_usr_id', QueryBuilder::$ASC); $bs = new TestTrialBS(null); $ttrials = $bs->findNotDeleted($qbuilder); $userGrades = array(); $lastId = -1; $lastPos = -1; $averageScore = 0.0; foreach ($ttrials as $tt => $ttrial) { if ($lastId != $ttrial->get('ttl_usr_id')) { $lastId = $ttrial->get('ttl_usr_id'); $lastPos++; } if (!isset($userGrades[$lastPos])) { $userGrades[$lastPos] = array(); $userGrades[$lastPos]['matricula'] = $ttrial->getForeignModel("ttl_usr_id")->get("usr_matricula"); $userGrades[$lastPos]['name'] = $ttrial->getForeignModel("ttl_usr_id")->get("usr_name"); $userGrades[$lastPos]['totalScore'] = 0.0; $userGrades[$lastPos]['totalSubmitted'] = 0; } if (strlen($ttrial->get("ttl_sourcefile")) > 50) { $userGrades[$lastPos]['totalSubmitted']++; } $userGrades[$lastPos]['totalScore'] += $ttrial->get('ttl_score') * $problemWeights[$ttrial->get('ttl_prb_id')]; $averageScore += $ttrial->get('ttl_score') * $problemWeights[$ttrial->get('ttl_prb_id')]; } $nAlunos = count($userGrades); if ($nAlunos > 0) { $averageScore /= $nAlunos; } ?> <br /> <h3><?php echo $test->get('tst_title'); ?> </h3> <b>Número de Questões:</b> <?php echo $nProblems; ?> <br /> <b>Acumulado Máximo:</b> <?php echo $maxGradeSum; ?> <br /> <b>Média do Acumulado:</b> <?php echo $averageScore; ?> <br /> <b>Média da Nota Final:</b> <?php echo 100 * $averageScore / $maxGradeSum; ?> <br /> <b>Número de Alunos:</b> <?php echo $nAlunos; ?> <br /> <table class="dataView"> <tr> <th>Matrícula</th> <th>Nome do Aluno</th> <th>Nota Acumulada</th> <th>Nota Final</th> <th>Questões Entregues</th> <th>Nota pela Entrega</th> </tr> <?php foreach ($userGrades as $ug => $userGrade) { ?> <tr class="color<?php echo $ug % 2; ?> "> <td><?php echo $userGrade['matricula']; ?> </td> <td><?php echo $userGrade['name']; ?> </td> <td><?php echo $userGrade['totalScore']; ?> </td> <td><?php echo 100 * $userGrade['totalScore'] / $maxGradeSum; ?> %</td> <td><?php echo $userGrade["totalSubmitted"]; ?> </td> <td><?php echo 100.0 * $userGrade["totalSubmitted"] / $nProblems; ?> %</td> </tr> <?php } ?> </table> <?php } }
public function renderNotDeleted($testSelected = null) { $bs = new TestProblemsBS(null); if (!isset($testSelected) || $testSelected == "") { $tproblems = $bs->findNotDeleted(null); } else { $qbuilder = new QueryBuilder('testproblems'); $qbuilder->addEqual('tpb_tst_id', $testSelected); $qbuilder->addOrder('tpb_questionNumber', QueryBuilder::$ASC); $qbuilder->addOrder('prb_title', QueryBuilder::$ASC, "problem"); $tproblems = $bs->findNotDeleted($qbuilder); } if (count($tproblems) <= 0) { ?> <br/><i>Nenhum problema anexado à esta prova ainda.</i><br /> <?php } else { ?> <script type="text/javascript"> function deleteTestProblem(testId, probId) { if (confirm("Deseja realmente desanexar este problema?")) { $("#tproblems-action-form input[name='_action']").val("delete"); $("#tproblems-action-form input[name='tpb_tst_id']").val(testId); $("#tproblems-action-form input[name='tpb_prb_id']").val(probId); $("#tproblems-action-form").submit(); } } </script> <form method="POST" action="./controller/TestProblemsController.php" style="display:none;" id="tproblems-action-form"> <input type="hidden" name="_action" /> <input type="hidden" name="tpb_tst_id" /> <input type="hidden" name="tpb_prb_id" /> </form> <table class="dataView"> <tr> <th>Prova</th> <th>Nº da Questão</th> <th>Problema</th> <th>Nível de Dificuldade</th> <th>Peso</th> <th style="min-width: 60px;width: 60px;max-width: 60px;">Ações</th> </tr> <?php foreach ($tproblems as $tp => $tproblem) { ?> <tr class="color<?php echo $tp % 2; ?> "> <td><?php echo $tproblem->getForeignModel('tpb_tst_id')->get('tst_title'); ?> </td> <td><?php echo $tproblem->get('tpb_questionNumber'); ?> </td> <td><?php echo $tproblem->getForeignModel('tpb_prb_id')->get('prb_title'); ?> </td> <td><?php echo $tproblem->getForeignModel('tpb_prb_id')->get('prb_difficultyLevel'); ?> </td> <td><?php echo $tproblem->get('tpb_weight'); ?> </td> <td class="actions"> <span class="ui-state-default ui-corner-all" title="Editar Anexo de Questão" onClick="location.assign('./testProblemsEdit.php?tpb_tst_id=<?php echo $tproblem->get("tpb_tst_id"); ?> &tpb_prb_id=<?php echo $tproblem->get('tpb_prb_id'); ?> ');"> <span class="ui-icon ui-icon-pencil"></span> </span> <span class="ui-state-default ui-corner-all" title="Desanexar Problema" onClick="deleteTestProblem(<?php echo $tproblem->get('tpb_tst_id'); ?> , <?php echo $tproblem->get('tpb_prb_id'); ?> )"> <span class="ui-icon ui-icon-trash"></span> </span> </td> </tr> <?php } ?> </table> <?php } }