mirror of
				https://gitlab.com/animath/si/plateforme-corres2math.git
				synced 2025-11-04 01:32:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
if (!isset($_SESSION["user_id"]) || $_SESSION["role"] != Role::PARTICIPANT && $_SESSION["role"] != Role::ENCADRANT || Phase::getCurrentPhase() != Phase::PHASE2)
 | 
						|
	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, $_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_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 = 1; $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_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 = 3; $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"; |