From 132481fda08532b2168b64b3500927fe64a9dbe4 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Tue, 5 May 2020 01:06:57 +0200 Subject: [PATCH] First week fixes --- assets/Fiche synthèse.pdf | Bin 0 -> 71958 bytes assets/Fiche synthèse.tex | 194 +++++++++++++++++++ dispatcher.php | 2 + server_files/classes/Document.php | 17 +- server_files/classes/Tournament.php | 60 ++++-- server_files/config.php | 2 + server_files/controllers/ajouter_tournoi.php | 21 +- server_files/controllers/equipe.php | 38 +++- server_files/controllers/informations.php | 3 +- server_files/controllers/mon_equipe.php | 88 +++++++++ server_files/controllers/syntheses.php | 13 +- server_files/controllers/tournoi.php | 16 +- server_files/controllers/view_file.php | 13 +- server_files/model.php | 2 + server_files/utils.php | 2 +- server_files/views/ajouter_tournoi.php | 19 +- server_files/views/equipe.php | 4 + server_files/views/header.php | 4 +- server_files/views/mon_equipe.php | 35 ++++ server_files/views/syntheses.php | 28 ++- server_files/views/syntheses_orga.php | 3 +- server_files/views/tournoi.php | 36 +++- 22 files changed, 541 insertions(+), 59 deletions(-) create mode 100644 assets/Fiche synthèse.pdf create mode 100644 assets/Fiche synthèse.tex diff --git a/assets/Fiche synthèse.pdf b/assets/Fiche synthèse.pdf new file mode 100644 index 0000000000000000000000000000000000000000..af8ed1c09bcb31004a2cc47160405bbcd5031e1b GIT binary patch literal 71958 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�FYRkCZlZE&@3ur!j=l3Ok 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 = $data["file_id"]; $this->team_id = $data["team"]; $this->tournament_id = $data["tournament"]; - $this->dest = DestType::fromName($data["dest"]); + $this->dest = $data["dest"]; + $this->round = $data["round"]; $this->uploaded_at = $data["uploaded_at"]; $this->version = isset($data["version"]) ? $data["version"] : 1; } @@ -207,10 +209,15 @@ class Synthesis return $this->tournament_id; } - public function getDest() - { - return $this->dest; - } + public function getDest() + { + return $this->dest; + } + + public function getRound() + { + return $this->round; + } public function getUploadedAt() { diff --git a/server_files/classes/Tournament.php b/server_files/classes/Tournament.php index e404e7d..6860bad 100644 --- a/server_files/classes/Tournament.php +++ b/server_files/classes/Tournament.php @@ -12,7 +12,9 @@ class Tournament private $date_start, $date_end; private $date_inscription; private $date_solutions; - private $date_syntheses; + private $date_syntheses; + private $date_solutions_2; + private $date_syntheses_2; private $final; private $organizers = []; private $year; @@ -98,8 +100,10 @@ class Tournament $this->date_start = $data["date_start"]; $this->date_end = $data["date_end"]; $this->date_inscription = $data["date_inscription"]; - $this->date_solutions = $data["date_solutions"]; - $this->date_syntheses = $data["date_syntheses"]; + $this->date_solutions = $data["date_solutions"]; + $this->date_solutions_2 = $data["date_solutions_2"]; + $this->date_syntheses = $data["date_syntheses"]; + $this->date_syntheses_2 = $data["date_syntheses_2"]; $this->final = $data["final"] == true; $this->year = $data["year"]; @@ -224,17 +228,41 @@ class Tournament $DB->prepare("UPDATE `tournaments` SET `date_solutions` = ? WHERE `id` = ?;")->execute([$date, $this->id]); } - public function getSynthesesDate() - { - return $this->date_syntheses; - } + public function getSynthesesDate() + { + return $this->date_syntheses; + } - public function setSynthesesDate($date) - { - global $DB; - $this->date_syntheses = $date; - $DB->prepare("UPDATE `tournaments` SET `date_syntheses` = ? WHERE `id` = ?;")->execute([$date, $this->id]); - } + public function setSynthesesDate($date) + { + global $DB; + $this->date_syntheses = $date; + $DB->prepare("UPDATE `tournaments` SET `date_syntheses` = ? WHERE `id` = ?;")->execute([$date, $this->id]); + } + + public function getSolutionsDate2() + { + return $this->date_solutions_2; + } + + public function setSolutionsDate2($date) + { + global $DB; + $this->date_solutions_2 = $date; + $DB->prepare("UPDATE `tournaments` SET `date_solutions_2` = ? WHERE `id` = ?;")->execute([$date, $this->id]); + } + + public function getSynthesesDate2() + { + return $this->date_syntheses_2; + } + + public function setSynthesesDate2($date) + { + global $DB; + $this->date_syntheses_2 = $date; + $DB->prepare("UPDATE `tournaments` SET `date_syntheses_2` = ? WHERE `id` = ?;")->execute([$date, $this->id]); + } public function isFinal() { @@ -343,9 +371,9 @@ class Tournament global $DB; $req = $DB->query("SELECT * FROM `syntheses` AS `t1` " - . "INNER JOIN (SELECT `team`, `dest`, `tournament`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `syntheses` GROUP BY `tournament`, `team`, `dest`) `t2` " - . "ON `t1`.`team` = `t2`.`team` AND `t1`.`dest` = `t2`.`dest` AND `t1`.`tournament` = `t2`.`tournament` " - . "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`tournament` = $this->id " . ($team_id == -1 ? "" : "AND `t1`.`team` = $team_id") . " ORDER BY `t1`.`team`, `t1`.`dest`;"); + . "INNER JOIN (SELECT `team`, `dest`, `round`, `tournament`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `syntheses` GROUP BY `tournament`, `team`, `dest`, `round`) `t2` " + . "ON `t1`.`team` = `t2`.`team` AND `t1`.`dest` = `t2`.`dest` AND `t1`.`tournament` = `t2`.`tournament` AND `t1`.`round` = `t2`.`round` " + . "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`tournament` = $this->id " . ($team_id == -1 ? "" : "AND `t1`.`team` = $team_id") . " ORDER BY `t1`.`team`, `t1`.`round`, `t1`.`dest`;"); $syntheses = []; diff --git a/server_files/config.php b/server_files/config.php index 00b9ff3..7fba1c6 100644 --- a/server_files/config.php +++ b/server_files/config.php @@ -25,5 +25,7 @@ catch (Exception $ex) { die("Erreur lors de la connexion à la base de données : " . $ex->getMessage()); } +date_default_timezone_set("Europe/Paris"); + session_start(); setlocale(LC_ALL, "fr_FR.utf8"); diff --git a/server_files/controllers/ajouter_tournoi.php b/server_files/controllers/ajouter_tournoi.php index 4efc6f2..6618de7 100644 --- a/server_files/controllers/ajouter_tournoi.php +++ b/server_files/controllers/ajouter_tournoi.php @@ -30,8 +30,12 @@ class NewTournament { public $time_inscription; public $date_solutions; public $time_solutions; - public $date_syntheses; - public $time_syntheses; + public $date_syntheses; + public $time_syntheses; + public $date_solutions_2; + public $time_solutions_2; + public $date_syntheses_2; + public $time_syntheses_2; public $description; public $final; public $tournament; @@ -72,7 +76,9 @@ class NewTournament { ensure(dateWellFormed($this->date_end), "La date de fin n'est pas valide."); ensure(dateWellFormed($this->date_inscription . " " . $this->time_inscription), "La date de clôture des inscriptions n'est pas valide."); ensure(dateWellFormed($this->date_solutions . " " . $this->time_solutions), "La date limite de remise des solutions n'est pas valide."); - ensure(dateWellFormed($this->date_syntheses . " " . $this->time_syntheses), "La date limite de remise des notes de synthèse n'est pas valide."); + ensure(dateWellFormed($this->date_syntheses . " " . $this->time_syntheses), "La date limite de remise des notes de synthèse pour le tour 1 n'est pas valide."); + ensure(dateWellFormed($this->date_solutions_2 . " " . $this->time_solutions_2), "La date limite de visibilité des solutions du tour 2 n'est pas valide."); + ensure(dateWellFormed($this->date_syntheses . " " . $this->time_syntheses), "La date limite de remise des notes de synthèse pour le tour 2 n'est pas valide."); $this->final = $this->final ? 1 : 0; @@ -84,10 +90,13 @@ class NewTournament { global $DB, $YEAR; $req = $DB->prepare("INSERT INTO `tournaments` (`name`, `size`, `place`, `price`, `description`, - `date_start`, `date_end`, `date_inscription`, `date_solutions`, `date_syntheses`, `final`, `year`) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"); + `date_start`, `date_end`, `date_inscription`, `date_solutions`, `date_syntheses`, + `date_solutions_2`, `date_syntheses_2`, `final`, `year`) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"); $req->execute([$this->name, $this->size, $this->place, $this->price, $this->description, $this->date_start, $this->date_end, - "$this->date_inscription $this->time_inscription", "$this->date_solutions $this->time_solutions", "$this->date_syntheses $this->time_syntheses", $this->final ? 1 : 0, $YEAR]); + "$this->date_inscription $this->time_inscription", "$this->date_solutions $this->time_solutions", + "$this->date_syntheses $this->time_syntheses", "$this->date_solutions_2 $this->time_solutions_2", + "$this->date_syntheses_2 $this->time_syntheses_2", $this->final ? 1 : 0, $YEAR]); $this->tournament = Tournament::fromName($this->name); diff --git a/server_files/controllers/equipe.php b/server_files/controllers/equipe.php index 9e9a2eb..d50748e 100644 --- a/server_files/controllers/equipe.php +++ b/server_files/controllers/equipe.php @@ -37,7 +37,7 @@ elseif (isset($_POST["unvalidate"])) { if (isset($_POST["select"])) { $team->selectForFinal(true); - $team->setValidationStatus(ValidationStatus::NOT_READY); + # $team->setValidationStatus(ValidationStatus::NOT_READY); $sols = $tournament->getAllSolutions($team->getId()); /** @var Solution $sol */ foreach ($sols as $sol) { @@ -49,7 +49,7 @@ if (isset($_POST["select"])) { copy("$LOCAL_PATH/files/$old_id", "$LOCAL_PATH/files/$id"); $req = $DB->prepare("INSERT INTO `solutions`(`file_id`, `team`, `tournament`, `problem`) VALUES (?, ?, ?, ?);"); - $req->execute([$id, $team->getId(), $FINAL->getId(), $sol->getFileId()]); + $req->execute([$id, $team->getId(), $FINAL->getId(), $sol->getProblem()]); } } @@ -86,6 +86,19 @@ if (isset($_POST["select_tournament"])) { $tournament = $new_tournament; } +if (isset($_POST["delete_team"])) { + foreach ($team->getEncadrants() as $encadrant_id) { + quitTeam($encadrant_id); + } + foreach ($team->getParticipants() as $participant_id) { + quitTeam($participant_id); + } + + header("Location: /"); + return; + +} + class EditTeam { public $name; @@ -136,4 +149,25 @@ $documents_final = null; if ($team->isSelectedForFinal()) $documents_final = $FINAL->getAllDocuments($team->getId()); +$emails = []; + +if ($_SESSION["role"] == Role::ORGANIZER || $_SESSION["role"] == Role::ADMIN) { + foreach ($team->getEncadrants() as $encadrant_id) { + $encadrant = User::fromId($encadrant_id); + if ($encadrant != null) { + $emails[] = $encadrant->getEmail(); + } + } + + foreach ($team->getParticipants() as $participant_id) { + $participant = User::fromId($participant_id); + if ($participant != null) { + $emails[] = $participant->getEmail(); + if ($participant->getResponsibleEmail() != null) { + $emails[] = $participant->getResponsibleEmail(); + } + } + } +} + require_once "server_files/views/equipe.php"; diff --git a/server_files/controllers/informations.php b/server_files/controllers/informations.php index b45e68a..cdb0047 100644 --- a/server_files/controllers/informations.php +++ b/server_files/controllers/informations.php @@ -23,7 +23,8 @@ if ($user === null) require_once "server_files/404.php"; if ($team != null) { - $documents = $user->getAllDocuments($team->getTournamentId()); + $documents = $user->getAllDocuments($team->getTournamentId()); + $documents_final = $user->getAllDocuments($FINAL->getId()); $payment = $user->getPayment(); $tournament = Tournament::fromId($team->getTournamentId()); } diff --git a/server_files/controllers/mon_equipe.php b/server_files/controllers/mon_equipe.php index f83957c..e165dcb 100644 --- a/server_files/controllers/mon_equipe.php +++ b/server_files/controllers/mon_equipe.php @@ -47,6 +47,94 @@ if (isset($_POST["request_validation"])) { } } +$DUMPS = [ + ["TKT", 6, "PGA", 3, "IRD", 1], + ["OUI", 8, "LEP", 1, "REX", 7], + ["ASP", 1, "ABC", 3, "TDP", 6], + ["GIF", 8, "ETM", 1, "LPC", 3], + ["MST", 6, "LQF", 1, "WAL", 2], +]; + +$DUMPS_2 = [ + ["TKT", 4, "PGA", 1, "IRD", 6], + ["LEP", 6, "OUI", 5, "REX", 8], + ["ASP", 5, "ABC", 8, "TDP", 4], + ["ETM", 8, "LPC", 4, "GIF", 6], + ["MST", 5, "LQF", 4, "WAL", 8], +]; + +foreach ($DUMPS as $dump) { + $team1 = Team::fromTrigram($dump[0]); + $team2 = Team::fromTrigram($dump[2]); + $team3 = Team::fromTrigram($dump[4]); + $problem1 = $dump[1]; + $problem2 = $dump[3]; + $problem3 = $dump[5]; + + $req1 = $DB->prepare("SELECT * FROM `solutions` WHERE `team` = ? AND `problem` = ? ORDER BY uploaded_at DESC LIMIT 1"); + $req1->execute([$team1->getId(), $problem1]); + $data1 = $req1->fetch(); + $sol1 = Solution::fromData($data1); + $req2 = $DB->prepare("SELECT * FROM `solutions` WHERE `team` = ? AND `problem` = ? ORDER BY uploaded_at DESC LIMIT 1"); + $req2->execute([$team2->getId(), $problem2]); + $data2 = $req2->fetch(); + $sol2 = Solution::fromData($data2); + $req3 = $DB->prepare("SELECT * FROM `solutions` WHERE `team` = ? AND `problem` = ? ORDER BY uploaded_at DESC LIMIT 1"); + $req3->execute([$team3->getId(), $problem3]); + $data3 = $req3->fetch(); + $sol3 = Solution::fromData($data3); + + $req1 = $DB->prepare("UPDATE `teams` SET `opposed_problem` = ?, `rapported_problem` = ? WHERE `id` = ?;"); + $req1->execute([$sol2->getFileId(), $sol3->getFileId(), $team1->getId()]); + + $req2 = $DB->prepare("UPDATE `teams` SET `opposed_problem` = ?, `rapported_problem` = ? WHERE `id` = ?;"); + $req2->execute([$sol3->getFileId(), $sol1->getFileId(), $team2->getId()]); + + $req3 = $DB->prepare("UPDATE `teams` SET `opposed_problem` = ?, `rapported_problem` = ? WHERE `id` = ?;"); + $req3->execute([$sol1->getFileId(), $sol2->getFileId(), $team3->getId()]); +} + +foreach ($DUMPS_2 as $dump) { + $team1 = Team::fromTrigram($dump[0]); + $team2 = Team::fromTrigram($dump[2]); + $team3 = Team::fromTrigram($dump[4]); + $problem1 = $dump[1]; + $problem2 = $dump[3]; + $problem3 = $dump[5]; + + $req1 = $DB->prepare("SELECT * FROM `solutions` WHERE `team` = ? AND `problem` = ? ORDER BY uploaded_at DESC LIMIT 1"); + $req1->execute([$team1->getId(), $problem1]); + $data1 = $req1->fetch(); + $sol1 = Solution::fromData($data1); + $req2 = $DB->prepare("SELECT * FROM `solutions` WHERE `team` = ? AND `problem` = ? ORDER BY uploaded_at DESC LIMIT 1"); + $req2->execute([$team2->getId(), $problem2]); + $data2 = $req2->fetch(); + $sol2 = Solution::fromData($data2); + $req3 = $DB->prepare("SELECT * FROM `solutions` WHERE `team` = ? AND `problem` = ? ORDER BY uploaded_at DESC LIMIT 1"); + $req3->execute([$team3->getId(), $problem3]); + $data3 = $req3->fetch(); + $sol3 = Solution::fromData($data3); + + $req1 = $DB->prepare("UPDATE `teams` SET `opposed_problem_2` = ?, `rapported_problem_2` = ? WHERE `id` = ?;"); + $req1->execute([$sol2->getFileId(), $sol3->getFileId(), $team1->getId()]); + + $req2 = $DB->prepare("UPDATE `teams` SET `opposed_problem_2` = ?, `rapported_problem_2` = ? WHERE `id` = ?;"); + $req2->execute([$sol3->getFileId(), $sol1->getFileId(), $team2->getId()]); + + $req3 = $DB->prepare("UPDATE `teams` SET `opposed_problem_2` = ?, `rapported_problem_2` = ? WHERE `id` = ?;"); + $req3->execute([$sol1->getFileId(), $sol2->getFileId(), $team3->getId()]); +} + + +$req = $DB->prepare("SELECT opposed_problem, rapported_problem, opposed_problem_2, rapported_problem_2 FROM teams WHERE id = ?;"); +$req->execute([$team->getId()]); +$data = $req->fetch(); + +$opposed_solution = Solution::fromId($data["opposed_problem"]); +$rapported_solution = Solution::fromId($data["rapported_problem"]); +$opposed_solution_2 = Solution::fromId($data["opposed_problem_2"]); +$rapported_solution_2 = Solution::fromId($data["rapported_problem_2"]); + class MyTeam { public $name; diff --git a/server_files/controllers/syntheses.php b/server_files/controllers/syntheses.php index 38be9cf..804618d 100644 --- a/server_files/controllers/syntheses.php +++ b/server_files/controllers/syntheses.php @@ -29,19 +29,24 @@ if ($team->isSelectedForFinal()) class SaveSynthesis { private $dest; + private $round; private $file; public function __construct() { $this->file = $_FILES["synthese"]; + $this->round = htmlspecialchars($_POST["round"]); $this->dest = DestType::fromName(strtoupper(htmlspecialchars($_POST["dest"]))); } public function makeVerifications() { - global $LOCAL_PATH; + global $LOCAL_PATH, $tournament; - ensure($this->dest != DestType::DEFENSEUR, "Le destinataire est invalide."); + ensure($this->dest != DestType::DEFENSEUR, "La source est invalide."); + ensure($this->round == 1 || $this->round == 2, "Le tour est invalide."); + $now = date("Y-m-d H:i"); + ensure($this->round == 1 && $now < $tournament->getSynthesesDate() || $this->round == 2 && $now < $tournament->getSynthesesDate2(), "Vous ne pouvez plus rendre de note de synthèse pour le tour $this->round."); 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."); @@ -58,8 +63,8 @@ class SaveSynthesis if (!rename($this->file["tmp_name"], "$LOCAL_PATH/files/$id")) throw new AssertionError("Une erreur est survenue lors de l'envoi du fichier."); - $req = $DB->prepare("INSERT INTO `syntheses`(`file_id`, `team`, `tournament`, `dest`) VALUES (?, ?, ?, ?);"); - $req->execute([$id, $team->getId(), $team->isSelectedForFinal() ? $FINAL->getId() : $tournament->getId(), $this->dest]); + $req = $DB->prepare("INSERT INTO `syntheses`(`file_id`, `team`, `tournament`, `round`, `dest`) VALUES (?, ?, ?, ?, ?);"); + $req->execute([$id, $team->getId(), $team->isSelectedForFinal() ? $FINAL->getId() : $tournament->getId(), $this->round, $this->dest]); return false; } diff --git a/server_files/controllers/tournoi.php b/server_files/controllers/tournoi.php index 0cc0155..e34bb9a 100644 --- a/server_files/controllers/tournoi.php +++ b/server_files/controllers/tournoi.php @@ -39,8 +39,12 @@ class UpdateTournament public $time_inscription; public $date_solutions; public $time_solutions; - public $date_syntheses; - public $time_syntheses; + public $date_syntheses; + public $time_syntheses; + public $date_solutions_2; + public $time_solutions_2; + public $date_syntheses_2; + public $time_syntheses_2; public $description; public $final; @@ -89,7 +93,9 @@ class UpdateTournament ensure(dateWellFormed($this->date_end), "La date de fin n'est pas valide."); ensure(dateWellFormed($this->date_inscription . " " . $this->time_inscription), "La date de clôture des inscriptions n'est pas valide."); ensure(dateWellFormed($this->date_solutions . " " . $this->time_solutions), "La date limite de remise des solutions n'est pas valide."); - ensure(dateWellFormed($this->date_syntheses . " " . $this->time_syntheses), "La date limite de remise des notes de synthèse n'est pas valide."); + ensure(dateWellFormed($this->date_syntheses . " " . $this->time_syntheses), "La date limite de remise des notes de synthèse pour le tour 1 n'est pas valide."); + ensure(dateWellFormed($this->date_solutions_2 . " " . $this->time_solutions_2), "La date limite de visibilité des solutions du tour 2 n'est pas valide."); + ensure(dateWellFormed($this->date_syntheses_2 . " " . $this->time_syntheses_2), "La date limite de remise des notes de synthèse pour le tour 2 n'est pas valide."); } public function updateTournament() @@ -104,7 +110,9 @@ class UpdateTournament $tournament->setEndDate($this->date_end); $tournament->setInscriptionDate("$this->date_inscription $this->time_inscription"); $tournament->setSolutionsDate("$this->date_solutions $this->time_solutions"); - $tournament->setSynthesesDate("$this->date_syntheses $this->time_syntheses"); + $tournament->setSynthesesDate("$this->date_syntheses $this->time_syntheses"); + $tournament->setSolutionsDate2("$this->date_solutions_2 $this->time_solutions_2"); + $tournament->setSynthesesDate2("$this->date_syntheses_2 $this->time_syntheses_2"); $tournament->setDescription($this->description); foreach ($this->organizers as $organizer) { diff --git a/server_files/controllers/view_file.php b/server_files/controllers/view_file.php index 98c2dcc..cdc4904 100644 --- a/server_files/controllers/view_file.php +++ b/server_files/controllers/view_file.php @@ -34,12 +34,19 @@ if ($file !== null) { $problem = $file->getProblem(); $name = "Problème $problem $trigram"; - if (($_SESSION["role"] == Role::PARTICIPANT || $_SESSION["role"] == Role::ENCADRANT) && (!isset($_SESSION["team"]) || $_SESSION["team"]->getId() != $team->getId())) - require_once "server_files/403.php"; + if (($_SESSION["role"] == Role::PARTICIPANT || $_SESSION["role"] == Role::ENCADRANT) && (!isset($_SESSION["team"]) || $_SESSION["team"]->getId() != $team->getId())) { + $req = $DB->prepare("SELECT opposed_problem, rapported_problem, opposed_problem_2, rapported_problem_2 FROM teams WHERE id = ?;"); + $req->execute([$_SESSION["team"]->getId()]); + $data = $req->fetch(); + if ($id != $data["opposed_problem"] && $id != $data["rapported_problem"]) { + if (date("Y-m-d H:i") < $tournament->getSolutionsDate2() || ($id != $data["opposed_problem_2"] && $id != $data["rapported_problem_2"])) + require_once "server_files/403.php"; + } + } } else if ($type == DocumentType::SYNTHESIS) { $dest = $file->getDest(); - $name = "Note de synthèse $trigram pour " . ($dest == DestType::OPPOSANT ? "l'opposant" : "le rapporteur"); + $name = "Note de synthèse $trigram " . ($dest == DestType::OPPOSANT ? "de l'opposant" : "du rapporteur"); if (($_SESSION["role"] == Role::PARTICIPANT || $_SESSION["role"] == Role::ENCADRANT) && (!isset($_SESSION["team"]) || $_SESSION["team"]->getId() != $team->getId())) require_once "server_files/403.php"; diff --git a/server_files/model.php b/server_files/model.php index a292815..e650c24 100644 --- a/server_files/model.php +++ b/server_files/model.php @@ -166,6 +166,8 @@ function canValidate(Team $team, Tournament $tournament) $d = $req->fetch(); $can_validate &= $d["version"] > 0;*/ + $can_validate &= date("Y-m-d H:i:s") <= $tournament->getInscriptionDate(); + return $can_validate; } diff --git a/server_files/utils.php b/server_files/utils.php index 3fa8116..2bc4ce5 100644 --- a/server_files/utils.php +++ b/server_files/utils.php @@ -9,7 +9,7 @@ function ensure($bool, $error_msg = "") function formatDate($date = NULL, $with_time = false) { if ($date == NULL) - $date = date("Y-m-d H:i:s"); + $date = date("Y-m-d H:i"); return strftime("%d %B %G" . ($with_time ? " %H:%M" : ""), strtotime($date)); } diff --git a/server_files/views/ajouter_tournoi.php b/server_files/views/ajouter_tournoi.php index bf5ae09..2570da3 100644 --- a/server_files/views/ajouter_tournoi.php +++ b/server_files/views/ajouter_tournoi.php @@ -85,7 +85,7 @@ if (isset($tournament) && !$has_error) { ?> value="time_solutions: date('H:i') ?>"/>

- +
+
+
+ + + +
+
+ + + +
+
+
-getSynthesesDate()) { ?> +getSynthesesDate2()) { + if (date("Y-m-d H:i:s") < $tournament->getSynthesesDate()) { + ?> +
+ Attention : la date butoir de soumission des notes de synthèse pour le tour 1 est passée. Les prochaines notes de synthèses compteront pour le second tour. +
+
-
- +
+
-
+
+ + +
+ +
@@ -43,8 +57,9 @@ if (isset($save_synthesis) && !$has_error) { ?> foreach ($syntheses as $synthesis) { $file_id = $synthesis->getFileId(); $dest = $synthesis->getDest(); + $round = $synthesis->getRound(); $version = $synthesis->getVersion(); - echo "
Note de synthèse pour " . ($dest == DestType::OPPOSANT ? "l'opposant" : "le rapporteur") . " (version $version) : Télécharger
"; + echo "
Note de synthèse " . ($dest == DestType::OPPOSANT ? "de l'opposant" : "du rapporteur") . ", tour $round (version $version) : Télécharger
"; } if ($team->isSelectedForFinal()) { ?> @@ -56,8 +71,9 @@ if ($team->isSelectedForFinal()) { ?> foreach ($syntheses_final as $synthesis) { $file_id = $synthesis->getFileId(); $dest = $synthesis->getDest(); + $round = $synthesis->getRound(); $version = $synthesis->getVersion(); - echo "
Note de synthèse pour " . ($dest == DestType::OPPOSANT ? "l'opposant" : "le rapporteur") . " (version $version) : Télécharger
"; + echo "
Note de synthèse " . ($dest == DestType::OPPOSANT ? "de l'opposant" : "du rapporteur") . ", tour $round (version $version) : Télécharger
"; } } diff --git a/server_files/views/syntheses_orga.php b/server_files/views/syntheses_orga.php index 477c143..9106b65 100644 --- a/server_files/views/syntheses_orga.php +++ b/server_files/views/syntheses_orga.php @@ -15,12 +15,13 @@ foreach ($tournaments as $tournament) { foreach ($syntheses as $synthesis) { $file_id = $synthesis->getFileId(); $dest = $synthesis->getDest(); + $round = $synthesis->getRound(); $version = $synthesis->getVersion(); $team = Team::fromId($synthesis->getTeamId()); $team_name = $team->getName(); $team_trigram = $team->getTrigram(); echo "
Note de synthèse de l'équipe $team_name ($team_trigram) pour " . ($dest == DestType::OPPOSANT ? "l'opposant" : "le rapporteur") - . ", version $version : Télécharger
"; + . ", tour $round, version $version : Télécharger
"; } echo "\n"; diff --git a/server_files/views/tournoi.php b/server_files/views/tournoi.php index 52190a7..9b54849 100644 --- a/server_files/views/tournoi.php +++ b/server_files/views/tournoi.php @@ -48,7 +48,13 @@ Date limite d'envoi des solutions : getSolutionsDate(), true) ?>
- Date limite d'envoi des notes de synthèse : getSynthesesDate(), true) ?> + Date limite d'envoi des notes de synthèse - tour 1 : getSynthesesDate(), true) ?> +
+
+ Date à partir de laquelle les solutions du tour 2 sont disponibles : getSolutionsDate2(), true) ?> +
+
+ Date limite d'envoi des notes de synthèse - tour 2 : getSynthesesDate2(), true) ?>
Description : getDescription() ?> @@ -60,8 +66,8 @@ if ($tournament->isFinal()) organize($_SESSION["user_id"]))) { ?> @@ -186,21 +192,37 @@ else {
- +
- +
- + + value="getSynthesesDate(), 11, 5) ?>" required/> +
+
+ +
+
+ + + +
+ +
+ + +
diff --git a/server_files/views/equipe.php b/server_files/views/equipe.php index 3cdc9b4..6744110 100644 --- a/server_files/views/equipe.php +++ b/server_files/views/equipe.php @@ -59,6 +59,10 @@ ?>
+
+
diff --git a/server_files/views/header.php b/server_files/views/header.php index b00d87e..f503e23 100644 --- a/server_files/views/header.php +++ b/server_files/views/header.php @@ -82,10 +82,10 @@ Paiement --> diff --git a/server_files/views/mon_equipe.php b/server_files/views/mon_equipe.php index b9eb97e..b86b5d7 100644 --- a/server_files/views/mon_equipe.php +++ b/server_files/views/mon_equipe.php @@ -146,4 +146,39 @@ require_once "header.php"; +getValidationStatus() == ValidationStatus::VALIDATED) { ?> +
+

Solutions à opposer/rapporter

+
+ Modèle vierge de note de synthèse (PDF -- TEX) +
+ +
+ Les solutions du tour 1 seront disponibles sur cette page peu après le tirage. +
+ getSolutionsDate2()) { ?> +
+ Les solutions du tour 2 pourront être téléchargées sur cette page à partir du getSolutionsDate2(), true) ?>. +
+getFileId(); + $problem = $sol->getProblem(); + $t = Team::fromId($sol->getTeamId()); + $trigram = $t->getTrigram(); + echo "
getSolutionsDate2() ? "danger" : "info") . "\">Problème $problem " + . " de l'équipe $trigram " . ($source == DestType::OPPOSANT ? "opposé" : "rapporté") . ", tour $round : Télécharger
\n"; + } + ?> + + + \ No newline at end of file diff --git a/server_files/views/syntheses.php b/server_files/views/syntheses.php index f423615..3b746a3 100644 --- a/server_files/views/syntheses.php +++ b/server_files/views/syntheses.php @@ -12,19 +12,33 @@ if (isset($save_synthesis) && !$has_error) { ?>