Phase 2 : questions (en cours)

This commit is contained in:
galaxyoyo 2019-09-20 14:57:06 +02:00
parent c3aa0386f2
commit 3b54b75395
8 changed files with 231 additions and 29 deletions

View File

@ -3,7 +3,9 @@
require_once "server_files/config.php";
require_once "server_files/classes/Document.php";
require_once "server_files/classes/DocumentType.php";
require_once "server_files/classes/Phase.php";
require_once "server_files/classes/Question.php";
require_once "server_files/classes/Reason.php";
require_once "server_files/classes/Role.php";
require_once "server_files/classes/SchoolClass.php";
@ -45,6 +47,7 @@ $ROUTES["^inscription/?$"] = ["server_files/controllers/inscription.php"];
$ROUTES["^mon-compte/?$"] = ["server_files/controllers/mon_compte.php"];
$ROUTES["^mon-equipe/(modifier)/?$"] = ["server_files/controllers/mon_equipe.php", "modifier"];
$ROUTES["^mon-equipe/?$"] = ["server_files/controllers/mon_equipe.php"];
$ROUTES["^poser-questions-2$"] = ["server_files/controllers/poser_questions.php"];
$ROUTES["^probleme/([1-4])/?$"] = ["server_files/controllers/probleme.php", "probleme"];
$ROUTES["^rejoindre_equipe/?$"] = ["server_files/controllers/rejoindre_equipe.php"];
$ROUTES["^videos-solutions/?$"] = ["server_files/controllers/videos_solutions.php"];

View File

@ -96,29 +96,3 @@ class Document
return $docs;
}
}
class DocumentType
{
const PHOTO_CONSENT = 0;
public static function getTranslatedName($type) {
switch ($type) {
default:
return "Autorisation de droit à l'image";
}
}
public static function getName($type) {
switch ($type) {
default:
return "PHOTO_CONSENT";
}
}
public static function fromName($name) {
switch ($name) {
default:
return self::PHOTO_CONSENT;
}
}
}

View File

@ -0,0 +1,28 @@
<?php
class DocumentType
{
const PHOTO_CONSENT = 0;
public static function getTranslatedName($type) {
switch ($type) {
default:
return "Autorisation de droit à l'image";
}
}
public static function getName($type) {
switch ($type) {
default:
return "PHOTO_CONSENT";
}
}
public static function fromName($name) {
switch ($name) {
default:
return self::PHOTO_CONSENT;
}
}
}

View File

@ -0,0 +1,91 @@
<?php
class Question
{
private $id;
private $from;
private $to;
private $problem;
private $question;
private function __construct()
{
}
public static function fromId($id)
{
global $DB;
$req = $DB->prepare("SELECT * FROM `questions` WHERE `id` = ?;");
$req->execute(htmlspecialchars($id));
$data = $req->fetch();
if ($data === false)
return null;
$question = new Question();
$question->fill($data);
return $question;
}
public function fill($data)
{
foreach ($data as $key => $value)
$this->$key = $value;
}
public static function getQuestions(Team $from, Team $to)
{
global $DB;
ensure($from->getProblem() == $to->getProblem(), "Les deux équipes doivent travailler sur le même problème.");
$req = $DB->prepare("SELECT * FROM `questions` WHERE `from` = ? AND `to` = ?;");
$req->execute([$from->getId(), $to->getId()]);
$questions = [];
while (($data = $req->fetch()) !== false) {
$question = new Question();
$question->fill($data);
$questions[] = $question;
}
if (sizeof($questions) == 0) {
$default_questions = ["Slogan ?", "Est-ce que les blagues de R-ev sont drôles ?", "C'est où le WEI ?", "Qui est le plus lourd ?", "Quelle est la réponse à la vie, à l'univers et à tout le reste ?", "Que préférez-vous entre la pratique et la théorie ?"];
for ($_ = 0; $_ < 6; ++$_) {
$req = $DB->prepare("INSERT INTO `questions`(`from`, `to`, `problem`, `question`) VALUES (?, ?, ?, ?);");
$req->execute([$from->getId(), $to->getId(), $from->getProblem(), $default_questions[$_]]);
}
return self::getQuestions($from, $to);
}
return $questions;
}
public function getId()
{
return $this->id;
}
public function getFrom()
{
return $this->from;
}
public function getTo()
{
return $this->to;
}
public function getProblem()
{
return $this->problem;
}
public function getQuestion()
{
return $this->question;
}
}

View File

@ -1,8 +1,5 @@
<?php
if ($_SESSION["role"] != Role::ADMIN)
require_once "server_files/403.php";
$has_error = false;
$error_message = null;

View File

@ -0,0 +1,69 @@
<?php
if (!isset($_SESSION["user_id"]) || $_SESSION["role"] != Role::PARTICIPANT && $_SESSION["role"] != Role::ENCADRANT)
require_once "server_files/403.php";
/** @var Team $team */
$team = $_SESSION["team"];
if ($team == null)
require_once "server_files/403.php";
$has_error = false;
$error_message = null;
if (isset($_POST["give_questions"])) {
$give_questions = new GiveQuestions($_POST);
try {
$give_questions->makeVerifications();
$give_questions->giveQuestions();
} catch (AssertionError $e) {
$has_error = true;
$error_message = $e->getMessage();
}
}
class GiveQuestions
{
private $to;
private $to_team;
private $question_0;
private $question_1;
private $question_2;
private $question_3;
private $question_4;
private $question_5;
public function __construct($data)
{
foreach ($data as $key => $value) {
$this->$key = $value;
}
}
public function makeVerifications()
{
$this->to_team = Team::fromId($this->to);
ensure($this->to_team, "L'équipe indiquée n'existe pas.");
}
public function giveQuestions()
{
global $DB, $team;
$DB->exec("DELETE FROM `questions` WHERE `from` = " . $team->getId() . " AND `to` = $this->to;");
}
}
/**
* @var Team[] $receivers
* @var Video[] $videos
* @var Question[][] $questions
*/
$receivers = [Team::fromId($team->getVideoTeamIds()[0]), Team::fromId($team->getVideoTeamIds()[1])];
$videos = [Video::getVideo(Reason::SOLUTION, $receivers[0], Video::ACCEPTED),
Video::getVideo(Reason::SOLUTION, $receivers[1], Video::ACCEPTED)];
$questions = [Question::getQuestions($team, $receivers[0]),
Question::getQuestions($team, $receivers[1])];
require_once "server_files/views/poser_questions.php";

View File

@ -60,6 +60,9 @@
case Phase::PHASE1: ?>
<li><a href="<?= $URL_BASE ?>/envoyer-video-1">Envoyer ma vidéo (phase 1)</a></li>
<?php break;
case Phase::PHASE2: ?>
<li><a href="<?= $URL_BASE ?>/poser-questions-2">Poser des questions (phase 2)</a></li>
<?php break;
}
} ?>
<?php } ?>

View File

@ -0,0 +1,37 @@
<?php
require_once "header.php";
for ($i = 0; $i < 2; ++$i) {
$receiver = $receivers[$i];
$video = $videos[$i]; ?>
<h2>Questions pour l'équipe <?= $receiver->getName() ?> (<?= $receiver->getTrigram() ?>) :</h2>
Lien de la vidéo : <a href="<?= $video->getLink() ?>"><?= $video->getLink() ?></a><br/>
<?php displayVideo($video->getLink()) ?>
<br/>
<form method="POST">
<input type="hidden" name="to" value="<?= $receiver->getTrigram() ?>"/>
<table style="width: 100%;">
<tbody>
<?php
for ($j = 0; $j < 6; ++$j) { ?>
<tr>
<td style="width: 30%;">
<label for="question_<?= $j + 1 ?>">Question <?= $j + 1 ?> :</label>
</td>
<td style="width: 70%;">
<textarea style="width: 100%;" id="question_<?= $j + 1 ?>" name="question_<?= $j + 1 ?>"><?= $questions[$i][$j]->getQuestion() ?></textarea>
</td>
</tr>
<?php } ?>
<tr>
<td colspan="2">
<input style="width: 100%;" type="submit" name="give_questions" value="Poser les questions" />
</td>
</tr>
</tbody>
</table>
</form>
<hr/>
<?php }
require_once "footer.php";