From 8b9087708828eb91ef4abcb9723fdf3fcc432e13 Mon Sep 17 00:00:00 2001 From: galaxyoyo Date: Mon, 26 Aug 2019 20:14:29 +0200 Subject: [PATCH] Organisateurs multiples, modification des tournois --- .htaccess | 1 + server_files/ajouter_tournoi.php | 78 ++++---- server_files/solutions_orga.php | 4 +- server_files/syntheses_orga.php | 4 +- server_files/tournoi.php | 293 +++++++++++++++++++++++++++---- 5 files changed, 310 insertions(+), 70 deletions(-) diff --git a/.htaccess b/.htaccess index 4f6016d..ac61a1f 100644 --- a/.htaccess +++ b/.htaccess @@ -25,5 +25,6 @@ RewriteRule ^solutions$ server_files/solutions.php [L] RewriteRule ^solutions_orga$ server_files/solutions_orga.php [L] RewriteRule ^syntheses$ server_files/syntheses.php [L] RewriteRule ^syntheses_orga$ server_files/syntheses_orga.php [L] +RewriteRule ^tournoi/(.*?)/(.*?)$ server_files/tournoi.php?nom=$1&$2 [L] RewriteRule ^tournoi/(.*?)$ server_files/tournoi.php?nom=$1 [L] RewriteRule ^tournois$ server_files/tournois.php [L] diff --git a/server_files/ajouter_tournoi.php b/server_files/ajouter_tournoi.php index 434897f..829edee 100644 --- a/server_files/ajouter_tournoi.php +++ b/server_files/ajouter_tournoi.php @@ -17,20 +17,21 @@ function registerTournament() { if ($result->fetch()) return "Un tournoi existe déjà avec ce nom."; - try { - $organizer_id = intval(htmlspecialchars($_POST["organizer"])); - } - catch (Exception $ex) { - return "Un problème a eu lieu concernant le choix de l'organisateur. Merci de ne pas formuler vous-même vos requêtes."; - } + if (!isset($_POST["organizer"]) || sizeof($_POST["organizer"]) == 0) + return "Aucun organisateur n'a été choisi."; - $result = $DB->query("SELECT `role`, `email` FROM `users` WHERE `id` = '" . $organizer_id . "' AND `year` = '$YEAR';"); - $data = $result->fetch(); - if ($data === FALSE) - return "L'organisateur spécifié n'existe pas."; - if ($data["role"] != "ORGANIZER" && $data["role"] != "ADMIN") - return "L'organisateur indiqué ne peut pas organiser de tournoi."; - $organize_mail = $data["email"]; + $organizers = $_POST["organizer"]; + $orga_mails = []; + + foreach ($organizers as $orga) { + $result = $DB->query("SELECT `role`, `email` FROM `users` WHERE `id` = '" . $orga . "' AND `year` = '$YEAR';"); + $data = $result->fetch(); + if ($data === FALSE) + return "L'organisateur spécifié n'existe pas."; + if ($data["role"] != "ORGANIZER" && $data["role"] != "ADMIN") + return "L'organisateur indiqué ne peut pas organiser de tournoi."; + $orga_mails[] = $data["email"]; + } try { $size = intval(htmlspecialchars($_POST["size"])); @@ -80,13 +81,22 @@ function registerTournament() { $description = htmlspecialchars($_POST["description"]); - $req = $DB->prepare("INSERT INTO `tournaments` (`name`, `organizer`, `size`, `place`, `description`, + $req = $DB->prepare("INSERT INTO `tournaments` (`name`, `size`, `place`, `price`, `description`, `date_start`, `date_end`, `date_inscription`, `date_solutions`, `date_syntheses`, `year`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"); - $result = $req->execute([$name, $organizer_id, $size, $place, $description, $date_start, $date_end, + $req->execute([$name, $size, $place, $price, $description, $date_start, $date_end, "$date_inscription $time_inscription", "$date_solutions $time_solutions", "$date_syntheses $time_syntheses", $YEAR]); - mail($organize_mail, "Organisateur TFJM² " . $name, "Vous venez d'être promu organisateur du tournoi " . $name . " pour le TFJM² $YEAR !", "From: $MAIL_ADDRESS"); + $req = $DB->query("SELECT `id` FROM `tournaments` WHERE `name` = '$name' AND `year` = $YEAR;"); + $tournament_id = $req->fetch()["id"]; + + foreach ($organizers as $orga) { + $req = $DB->prepare("INSERT INTO `organizers`(`organizer`, `tournament`) VALUES(?, ?);"); + $req->execute([$orga, $tournament_id]); + } + + foreach ($orga_mails as $orga_mail) + mail($orga_mail, "Organisateur TFJM² " . $name, "Vous venez d'être promu organisateur du tournoi " . $name . " pour le TFJM² $YEAR !", "From: $MAIL_ADDRESS"); return false; } @@ -112,14 +122,14 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") {
- +
- - @@ -127,7 +137,7 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -149,7 +159,7 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -157,7 +167,7 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -165,7 +175,7 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -173,8 +183,8 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -182,8 +192,8 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -191,8 +201,8 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { @@ -200,12 +210,12 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { - diff --git a/server_files/solutions_orga.php b/server_files/solutions_orga.php index c464893..041fd32 100644 --- a/server_files/solutions_orga.php +++ b/server_files/solutions_orga.php @@ -44,9 +44,9 @@ if (isset($_POST["download_zip"])) { query("SELECT `id`, `name` FROM `tournaments` WHERE " +$req = $DB->query("SELECT `tournaments`.`id`, `name` FROM `tournaments` JOIN `organizers` ON `tournament` = `tournaments`.`id` WHERE " . ($_SESSION["role"] == "ADMIN" ? "" : "`organizer` = '" . $_SESSION["user_id"] . "' AND ") - . "`year` = $YEAR ORDER BY `name`;"); + . "`year` = $YEAR GROUP BY `tournament` ORDER BY `name`;"); while (($data_tournament = $req->fetch()) !== false) { echo "

Tournoi de " . $data_tournament["name"] . "

\n"; diff --git a/server_files/syntheses_orga.php b/server_files/syntheses_orga.php index a2adc23..91d69a4 100644 --- a/server_files/syntheses_orga.php +++ b/server_files/syntheses_orga.php @@ -44,9 +44,9 @@ if (isset($_POST["download_zip"])) { query("SELECT `id`, `name` FROM `tournaments` WHERE " +$req = $DB->query("SELECT `tournaments`.`id`, `name` FROM `tournaments` JOIN `organizers` ON `tournament` = `tournaments`.`id` WHERE " . ($_SESSION["role"] == "ADMIN" ? "" : "`organizer` = '" . $_SESSION["user_id"] . "' AND ") - . "`year` = $YEAR ORDER BY `name`;"); + . "`year` = $YEAR GROUP BY `tournament` ORDER BY `name`;"); while (($data_tournament = $req->fetch()) !== false) { echo "

Tournoi de " . $data_tournament["name"] . "

\n"; diff --git a/server_files/tournoi.php b/server_files/tournoi.php index b0780eb..5110c18 100644 --- a/server_files/tournoi.php +++ b/server_files/tournoi.php @@ -8,18 +8,129 @@ $response = $DB->prepare("SELECT * FROM `tournaments` WHERE `name` = ? AND `year $response->execute([$tournament_name]); $data = $response->fetch(); -$orga_data = $DB->query("SELECT `surname`, `first_name` FROM `users` WHERE `id` = " . $data["organizer"] . " AND `year` = $YEAR;")->fetch(); -$orga_name = $orga_data["first_name"] . " " . $orga_data["surname"]; +$orgas_req = $DB->query("SELECT `surname`, `first_name` FROM `users` JOIN `organizers` ON `users`.`id` = `organizer` WHERE `tournament` = " . $data["id"] . ";"); +$orgas = []; +while (($orga_data = $orgas_req->fetch()) !== false) { + $orgas[] = $orga_data["first_name"] . " " . $orga_data["surname"]; +} + +if (isset($_POST["edit_tournament"])) { + $error_message = updateTournament(); +} $teams_response = $DB->query("SELECT `id`, `name`, `trigram`, `inscription_date`, `validation_status` FROM `teams` WHERE `tournament` = " . $data["id"] . " AND `year` = $YEAR;"); +$orgas_response = $DB->query("SELECT `id`, `surname`, `first_name` FROM `users` WHERE (`role` = 'ORGANIZER' OR `role` = 'ADMIN') AND `year` = '$YEAR';"); + +function updateTournament() { + global $DB, $URL_BASE, $YEAR, $MAIL_ADDRESS, $data; + + $tournament_id = $data["id"]; + + $name = htmlspecialchars($_POST["name"]); + + $result = $DB->query("SELECT `id` FROM `tournaments` WHERE `name` = '" . $name . "' AND `id` != $tournament_id AND `year` = '$YEAR';"); + if ($result->fetch()) + return "Un tournoi existe déjà avec ce nom."; + + if (!isset($_POST["organizer"]) || sizeof($_POST["organizer"]) == 0) + return "Aucun organisateur n'a été choisi."; + + if ($_SESSION["role"] == "ADMIN") { + $organizers = $_POST["organizer"]; + $orga_mails = []; + + foreach ($organizers as $orga) { + $result = $DB->query("SELECT `role`, `email` FROM `users` WHERE `id` = '" . $orga . "' AND `year` = '$YEAR';"); + $data = $result->fetch(); + if ($data === FALSE) + return "L'organisateur spécifié n'existe pas."; + if ($data["role"] != "ORGANIZER" && $data["role"] != "ADMIN") + return "L'organisateur indiqué ne peut pas organiser de tournoi."; + $orga_mails[] = $data["email"]; + } + } + + try { + $size = intval(htmlspecialchars($_POST["size"])); + } + catch (Exception $ex) { + return "Le nombre d'équipes indiqué n'est pas un entier valide."; + } + + if ($size < 3 || $size > 12) + return "Un tournoi doit comporter entre 3 et 12 équipes."; + + $place = htmlspecialchars($_POST["place"]); + + try { + $price = intval(htmlspecialchars($_POST["price"])); + } + catch (Throwable $t) { + return "Le tarif pour les participants n'est pas un nombre valide."; + } + + if ($price < 0) + return "Le TFJM² ne va pas payer les élèves pour venir."; + + if ($price > 50) + return "Soyons raisonnable sur le prix."; + + $date_start = htmlspecialchars($_POST["date_start"]); + $date_start_parsed = date_parse_from_format("yyyy-mm-dd", $date_start); + + $date_end = htmlspecialchars($_POST["date_end"]); + $date_end_parsed = date_parse_from_format("yyyy-mm-dd", $date_end); + + $date_inscription = htmlspecialchars($_POST["date_inscription"]); + $time_inscription = htmlspecialchars($_POST["time_inscription"]); + $date_inscription_parsed = date_parse_from_format("yyyy-mm-dd", $date_inscription . ' ' . $time_inscription); + + $date_solutions = htmlspecialchars($_POST["date_solutions"]); + $time_solutions = htmlspecialchars($_POST["time_solutions"]); + $date_solutions_parsed = date_parse_from_format("yyyy-mm-dd", $date_solutions . ' ' . $time_solutions); + + $date_syntheses = htmlspecialchars($_POST["date_syntheses"]); + $time_syntheses = htmlspecialchars($_POST["time_syntheses"]); + $date_syntheses_parsed = date_parse_from_format("yyyy-mm-dd", $date_syntheses . ' ' . $time_syntheses); + + if (!$date_start_parsed || !$date_end_parsed || !$date_inscription_parsed || !$date_solutions_parsed || !$date_syntheses_parsed) + return "Une date est mal formée."; + + $description = htmlspecialchars($_POST["description"]); + + $req = $DB->prepare("UPDATE `tournaments` SET `name` = ?, `size` = ?, `place` = ?, `price` = ?, `description` = ?, + `date_start` = ?, `date_end` = ?, `date_inscription` = ?, `date_solutions` = ?, `date_syntheses` = ? + WHERE `id` = $tournament_id;"); + $req->execute([$name, $size, $place, $price, $description, $date_start, $date_end, + "$date_inscription $time_inscription", "$date_solutions $time_solutions", "$date_syntheses $time_syntheses"]); + + if ($_SESSION["role"] == "ADMIN") { + $DB->exec("DELETE FROM `organizers` WHERE `tournament` = $tournament_id;"); + foreach ($organizers as $orga) { + $req = $DB->prepare("INSERT INTO `organizers`(`organizer`, `tournament`) VALUES(?, ?);"); + $req->execute([$orga, $tournament_id]); + } + } + + header("Location: $URL_BASE/tournoi/" . $name); + exit(); +} + ?>

Tournoi de

- Organisateur :
+ Organisateur= 2 ? 's' : '' ?> : + +
Nombre d'équipes maximal :
Lieu :
Prix par partipant :
@@ -27,7 +138,12 @@ $teams_response = $DB->query("SELECT `id`, `name`, `trigram`, `inscription_date` Clôture des inscriptions :
Date limite d'envoi des solutions :
Date limite d'envoi des notes de synthèse :
- Description : + Description :
+ + + /modifier">Éditer le tournoi + +

Équipes inscrites à ce tournoi :

@@ -49,42 +165,42 @@ $teams_response = $DB->query("SELECT `id`, `name`, `trigram`, `inscription_date` - fetch()) != false) { - ?> + fetch()) != false) { + ?> - + @@ -104,4 +220,117 @@ $teams_response = $DB->query("SELECT `id`, `name`, `trigram`, `inscription_date`
+ - + +
- fetch()) !== FALSE) { echo "\n"; @@ -141,7 +151,7 @@ if (!isset($_SESSION["role"]) or $_SESSION["role"] != "ADMIN") { - +
- +
- +
- Du au + Du au
- - + +
- - + +
- - + +
- +
- + +
- " . $team_data["name"] . ""; - else - echo $team_data["name"]; - ?> + " . $team_data["name"] . ""; + else + echo $team_data["name"]; + ?> - +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + " required /> +
+ + + +
+ + + " required /> +
+ + + " required /> +
+ + + " required /> +
+ + + Du " required /> + au " required /> +
+ + + " required /> + " required /> +
+ + + " required /> + " required /> +
+ + + " required /> + " required /> +
+ + + +
+ +
+
+ + \ No newline at end of file