getRole() == Role::PARTICIPANT ? $_SESSION["team"] : Team::fromTrigram($_GET["trigram"]); if ($team == null) require_once "server_files/404.php"; if ($user->getRole() == Role::ENCADRANT && $team->getEncadrantId() != $user->getId() || $team->getValidationStatus() != ValidationStatus::VALIDATED) require_once "server_files/403.php"; $has_error = false; $error_message = null; if (isset($_POST["give_questions"])) { $give_questions = new GiveQuestions($_POST, $_FILES); try { $give_questions->makeVerifications(); $give_questions->giveQuestions(); } catch (AssertionError $e) { $has_error = true; $error_message = $e->getMessage(); } } class GiveQuestions { private $to; /** * @var Team $to_team */ private $to_team; private $question_0; private $question_1; private $question_2; private $question_3; private $question_4; private $question_5; private $question_6; private $questions; private $no_drawing; private $has_files; private $files; public function __construct($data, $files) { foreach ($data as $key => $value) { $this->$key = $value; } $this->files = []; $this->has_files = false; for ($i = 0; $i <= 6; ++$i) { if (strlen($files["file_$i"]["name"]) > 0) { $this->files[] = $files["file_$i"]; $this->has_files = true; } else $this->files[] = null; } $this->questions = [$this->question_0, $this->question_1, $this->question_2, $this->question_3, $this->question_4, $this->question_5, $this->question_6]; } public function makeVerifications() { global $LOCAL_PATH, $team; $this->to_team = Team::fromTrigram($this->to); ensure($this->to_team, "L'équipe indiquée n'existe pas."); ensure($team->getProblem() == $this->to_team->getProblem(), "Les équipes ne travaillent pas sur le même problème."); ensure($this->question_1 != null && $this->question_1 != "" && $this->question_2 != null && $this->question_2 != "" && $this->question_3 != null && $this->question_3 != "", "Vous devez poser au moins 3 questions."); ensure(!$this->has_files || $this->no_drawing, "Vous devez confirmer ne pas avoir inclus de texte dans vos pièces jointes."); for ($i = 4; $i <= 6; ++$i) { if ($this->questions[$i] == "") $this->questions[$i] = null; } for ($i = 0; $i <= 6; ++$i) { ensure($this->files[$i]["size"] <= 2e6, "Le fichier doit peser moins que 2 Mo."); ensure(!$this->files[$i]["error"], "Une erreur est survenue. Veuillez vérifier vos pièces jointes. Elles ne doivent pas peser plus de 2 Mo chacune."); } ensure(is_dir("$LOCAL_PATH/files") || mkdir("$LOCAL_PATH/files"), "Un problème est survenue dans l'envoi du fichier. Veuillez contacter l'administrateur du serveur."); } public function giveQuestions() { global $LOCAL_PATH, $team; /** @var Question[] $questions */ $questions = Question::getQuestions($team, $this->to_team); for ($i = 0; $i <= 6; ++$i) { $question = $questions[$i]; if ($question->getQuestion() != $this->questions[$i] && $question->getAttachedFile() != null) { unlink("$LOCAL_PATH/files/" . $question->getAttachedFile()); $question->setAttachedFile(null); } $question->setQuestion($this->questions[$i]); if ($this->files[$i] != null) { do $file_id = genRandomPhrase(64); while (file_exists("$LOCAL_PATH/files/$file_id")); if (!rename($this->files[$i]["tmp_name"], "$LOCAL_PATH/files/$file_id")) throw new AssertionError("Une erreur est survenue lors de l'envoi du fichier."); $question->setAttachedFile($file_id); } } } } /** * @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";