From f5e73ae2ed8ea0bf53088af386d5b52ff1583755 Mon Sep 17 00:00:00 2001 From: galaxyoyo Date: Tue, 10 Sep 2019 00:55:51 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20du=20code=20de=20la=20page?= =?UTF-8?q?=20des=20solutions=20(vue=20=C3=A9quipe)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server_files/controllers/solutions.php | 69 +++++++++++++++----------- server_files/views/solutions.php | 13 +++-- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/server_files/controllers/solutions.php b/server_files/controllers/solutions.php index e1fa85e..5b6a86c 100644 --- a/server_files/controllers/solutions.php +++ b/server_files/controllers/solutions.php @@ -10,8 +10,18 @@ if (!isset($_SESSION["team"])) $team = $_SESSION["team"]; $tournament = Tournament::fromId($team->getTournamentId()); +$has_error = false; +$error_message = null; + if (isset($_POST["send_solution"])) { - $error_message = saveSolution(); + $save_solution = new SaveSolution(); + try { + $save_solution->makeVerifications(); + $save_solution->saveSolution(); + } catch (AssertionError $e) { + $has_error = true; + $error_message = $e->getMessage(); + } } $solutions = $tournament->getAllSolutions($team->getId()); @@ -19,40 +29,43 @@ $solutions_final = null; if ($team->isSelectedForFinal()) $solutions_final = $FINAL->getAllSolutions($team->getId()); -function saveSolution() { - global $LOCAL_PATH, $DB, $team, $tournament, $FINAL; +class SaveSolution +{ + private $problem; + private $file; - try { - $problem = $_POST["problem"]; - if ($problem < 1 || $problem > 9) - return "Le numéro de problème est invalide."; - } - catch (Throwable $t) { - return "Le numéro de problème n'est pas valide. Merci de ne pas créer vos propres requêtes."; - } + public function __construct() + { + $this->file = $_FILES["document"]; + $this->problem = htmlspecialchars($_POST["problem"]); + } - $file = $_FILES["solution"]; + public function makeVerifications() + { + global $LOCAL_PATH; - if ($file["size"] > 5000000 || $file["error"]) - return "Une erreur est survenue. Merci de vérifier que le fichier pèse moins que 5 Mo."; + ensure(preg_match("#[1-9]#", $this->problem), "Le numéro du problème est invalide."); + ensure($this->file["size"] <= 2e6, "Le fichier doit peser moins que 2 Mo."); + ensure(!$this->file["error"], "Une erreur est survenue."); + ensure(finfo_file(finfo_open(FILEINFO_MIME_TYPE), $this->file["tmp_name"]) == "application/pdf", "Le fichier doit être au format PDF."); + 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."); + } - if (finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file["tmp_name"]) != 'application/pdf') - return "Le fichier doit être au format PDF."; + public function saveSolution() + { + global $LOCAL_PATH, $DB, $team, $tournament, $FINAL; + do + $id = genRandomPhrase(64); + while (file_exists("$LOCAL_PATH/files/$id")); - if (!is_dir("$LOCAL_PATH/files") && !mkdir("$LOCAL_PATH/files")) - return "Les droits sont insuffisants. Veuillez contacter l'administrateur du serveur."; + if (!rename($this->file["tmp_name"], "$LOCAL_PATH/files/$id")) + throw new AssertionError("Une erreur est survenue lors de l'envoi du fichier."); - do - $id = genRandomPhrase(64); - while (file_exists("$LOCAL_PATH/files/$id")); + $req = $DB->prepare("INSERT INTO `solutions`(`file_id`, `team`, `tournament`, `problem`) VALUES (?, ?, ?, ?);"); + $req->execute([$id, $team->getId(), $team->isSelectedForFinal() ? $FINAL->getId() : $tournament->getId(), $this->problem]); - if (!rename($file["tmp_name"], "$LOCAL_PATH/files/$id")) - return "Une erreur est survenue lors de l'envoi du fichier."; - - $req = $DB->prepare("INSERT INTO `solutions`(`file_id`, `team`, `tournament`, `problem`) VALUES (?, ?, ?, ?);"); - $req->execute([$id, $team->getId(), $team->isSelectedForFinal() ? $FINAL->getId() : $tournament->getId(), $problem]); - - return false; + return false; + } } require_once "server_files/views/solutions.php"; diff --git a/server_files/views/solutions.php b/server_files/views/solutions.php index 4312d55..cb9ae33 100644 --- a/server_files/views/solutions.php +++ b/server_files/views/solutions.php @@ -1,13 +1,12 @@ Erreur : " . $error_message . ""; - } else { - echo "

Le fichier a été correctement envoyé !

"; - } -} ?> +if ($has_error) { + echo "

Erreur : " . $error_message . "

"; +} elseif (isset($save_solution)) { + echo "

Le fichier a été correctement envoyé !

"; +} +?> getSolutionsDate()) { ?>