359 lines
14 KiB
PHP
359 lines
14 KiB
PHP
<?php
|
|
|
|
require_once 'config.php';
|
|
|
|
$tournament_name = htmlspecialchars($_GET["nom"]);
|
|
|
|
$response = $DB->prepare("SELECT * FROM `tournaments` WHERE `name` = ? AND `year` = $YEAR;");
|
|
$response->execute([$tournament_name]);
|
|
$data = $response->fetch();
|
|
|
|
if ($data === false)
|
|
require_once "404.php";
|
|
|
|
$orgas_req = $DB->query("SELECT `users`.`id` AS `id`, `surname`, `first_name` FROM `users` JOIN `organizers` ON `users`.`id` = `organizer` WHERE `tournament` = " . $data["id"] . ";");
|
|
$orgas = [];
|
|
$orgas_id = [];
|
|
while (($orga_data = $orgas_req->fetch()) !== false) {
|
|
$orgas[] = $orga_data["first_name"] . " " . $orga_data["surname"];
|
|
$orgas_id[] = $orga_data["id"];
|
|
}
|
|
|
|
if (isset($_GET["modifier"]) && $_SESSION["role"] != "ADMIN" && !in_array($_SESSION["user_id"], $orgas_id))
|
|
require_once "403.php";
|
|
|
|
if (isset($_POST["edit_tournament"])) {
|
|
$error_message = updateTournament();
|
|
}
|
|
|
|
if ($data["final"])
|
|
$teams_response = $DB->query("SELECT `id`, `name`, `trigram`, `inscription_date`, `validation_status` FROM `teams` WHERE `final_selection` AND `year` = $YEAR;");
|
|
else
|
|
$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, $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();
|
|
}
|
|
|
|
?>
|
|
|
|
<?php require_once "header.php" ?>
|
|
|
|
<h2>Tournoi de <?php echo $data["name"] ?></h2>
|
|
|
|
<strong>Organisateur<?= sizeof($orgas) >= 2 ? 's' : '' ?> :</strong>
|
|
<?php
|
|
$s = "";
|
|
for ($i = 0; $i < sizeof($orgas); ++$i) {
|
|
if ($_SESSION["role"] == "ORGANIZER" || $_SESSION["role"] == "ADMIN")
|
|
$s .= "<a href=\"$URL_BASE/informations/$orgas_id[$i]/$orgas[$i]\">$orgas[$i]</a>";
|
|
else
|
|
$s .= $orgas[$i];
|
|
$s .= ", ";
|
|
}
|
|
echo substr($s, 0, -2);
|
|
?>
|
|
<br />
|
|
<strong>Nombre d'équipes maximal :</strong> <?php echo $data["size"] ?><br />
|
|
<strong>Lieu :</strong> <?php echo $data["place"] ?><br />
|
|
<strong>Prix par partipant :</strong> <?php echo $data["price"] == 0 ? "Gratuit" : $data["price"] . " €" ?><br />
|
|
<strong>Dates :</strong> Du <?php echo echo_date($data["date_start"]) ?> au <?php echo echo_date($data["date_end"]) ?><br />
|
|
<strong>Clôture des inscriptions :</strong> <?php echo echo_date($data["date_inscription"], true) ?><br />
|
|
<strong>Date limite d'envoi des solutions :</strong> <?php echo echo_date($data["date_solutions"], true) ?><br />
|
|
<strong>Date limite d'envoi des notes de synthèse :</strong> <?php echo echo_date($data["date_syntheses"], true) ?><br />
|
|
<strong>Description :</strong> <?php echo $data["description"] ?><br />
|
|
<?php
|
|
if ($data["final"])
|
|
echo "<strong>Ce tournoi est la finale nationale du TFJM² 2020.</strong><br />";
|
|
?>
|
|
|
|
<?php if (!isset($_GET["modifier"]) && ($_SESSION["role"] == "ADMIN" || $_SESSION["role"] == "ORGANIZER" && in_array($_SESSION["user_id"], $orgas_id))) { ?>
|
|
<a href="<?= $URL_BASE ?>/tournoi/<?= $data["name"] ?>/modifier">Éditer le tournoi</a>
|
|
<?php } ?>
|
|
|
|
|
|
<?php if (!isset($_GET["modifier"])) { ?>
|
|
<hr/>
|
|
|
|
<h2>Équipes inscrites à ce tournoi :</h2>
|
|
|
|
<table style="border: 1px solid black; width: 100%;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
Équipe
|
|
</th>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
Trigramme
|
|
</th>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
Date d'inscription
|
|
</th>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
État de validation de l'inscription
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php
|
|
while (($team_data = $teams_response->fetch()) != false) {
|
|
?>
|
|
<tr>
|
|
<td style="border: 1px solid black; text-align: center">
|
|
<?php
|
|
if (isset($_SESSION["role"]) && ($_SESSION["role"] == "ADMIN" || ($_SESSION["role"] == "ORGANIZER" && in_array($_SESSION["user_id"], $orgas_id))))
|
|
echo "<a href=\"$URL_BASE/equipe/" . $team_data["trigram"] . "\">" . $team_data["name"] . "</a>";
|
|
else
|
|
echo $team_data["name"];
|
|
?>
|
|
</td>
|
|
<td style="border: 1px solid black; text-align: center"><?php echo $team_data["trigram"] ?></td>
|
|
<td style="border: 1px solid black; text-align: center"><?php echo echo_date($team_data["inscription_date"]) ?></td>
|
|
<td style="border: 1px solid black; text-align: center">
|
|
<?php
|
|
switch ($team_data["validation_status"]) {
|
|
case "NOT_READY":
|
|
echo "Inscription non terminée";
|
|
break;
|
|
case "WAITING":
|
|
echo "En attente de validation";
|
|
break;
|
|
case "VALIDATED":
|
|
echo "Inscription validée";
|
|
break;
|
|
default:
|
|
echo "Statut inconnu";
|
|
break;
|
|
}
|
|
?>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
?>
|
|
</tbody>
|
|
<tfoot>
|
|
<tr>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
Équipe
|
|
</th>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
Trigramme
|
|
</th>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
Date d'inscription
|
|
</th>
|
|
<th style="border: 1px solid black; text-align: center">
|
|
État de validation de l'inscription
|
|
</th>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
|
|
<?php
|
|
}
|
|
else {
|
|
?>
|
|
<form method="POST">
|
|
<input type="hidden" name="submitted" value="true" />
|
|
<table style="width: 100%;">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width: 30%;">
|
|
<label for="name">Nom :</label>
|
|
</td>
|
|
<td style="width: 70%;">
|
|
<input style="width: 100%;" type="text" id="name" name="name" value="<?= $data["name"] ?>" required />
|
|
</td>
|
|
</tr>
|
|
<?php if ($_SESSION["role"] == "ADMIN") { ?>
|
|
<tr>
|
|
<td>
|
|
<label for="organizer">Organisateur :</label>
|
|
</td>
|
|
<td>
|
|
<select style="width: 100%;" id="organizer" name="organizer[]" multiple size="4" required>
|
|
<?php
|
|
while (($orga_data = $orgas_response->fetch()) !== FALSE) {
|
|
echo "<option value=\"" . $orga_data["id"] . "\" " . (in_array($orga_data["first_name"] . " " . $orga_data["surname"], $orgas) ? "selected" : "")
|
|
. ">" . $orga_data["first_name"] . " " . $orga_data["surname"] . "</option>\n";
|
|
}
|
|
?>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<?php } ?>
|
|
<tr>
|
|
<td>
|
|
<label for="size">Nombre d'équipes :</label>
|
|
</td>
|
|
<td>
|
|
<input style="width: 100%;" type="number" id="size" name="size" min="3" max="12" value="<?= $data["size"] ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="place">Lieu :</label>
|
|
</td>
|
|
<td>
|
|
<input style="width: 100%;" type="text" id="place" name="place" value="<?= $data["place"] ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="price">Prix par participant</label>
|
|
</td>
|
|
<td>
|
|
<input style="width: 100%;" type="number" id="price" name="price" min="0" max="21" value="<?= $data["price"] ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="date_start">Dates :</label>
|
|
</td>
|
|
<td>
|
|
Du <input style="width: 45%;" type="date" id="date_start" name="date_start" value="<?= $data["date_start"] ?>" required />
|
|
au <input style="width: 45%;" type="date" id="date_end" name="date_end" value="<?= $data["date_end"] ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="date_inscription">Date limite d'inscription :</label>
|
|
</td>
|
|
<td>
|
|
<input style="width: 49%;" type="date" id="date_inscription" name="date_inscription" value="<?= substr($data["date_inscription"], 0, 10) ?>" required />
|
|
<input style="width: 49%;" type="time" id="time_inscription" name="time_inscription" value="<?= substr($data["date_inscription"], 11) ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="date_solutions">Date limite pour rendre les solutions :</label>
|
|
</td>
|
|
<td>
|
|
<input style="width: 49%;" type="date" id="date_solutions" name="date_solutions" value="<?= substr($data["date_solutions"], 0, 10) ?>" required />
|
|
<input style="width: 49%;" type="time" id="time_solutions" name="time_solutions" value="<?= substr($data["date_solutions"],11) ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="date_syntheses">Date limite pour rendre les notes de synthèse :</label>
|
|
</td>
|
|
<td>
|
|
<input style="width: 100%;" type="date" id="date_syntheses" name="date_syntheses" value="<?= substr($data["date_syntheses"], 0, 10) ?>" required />
|
|
<input style="width: 100%;" type="time" id="time_syntheses" name="time_syntheses" value="<?= substr($data["date_syntheses"], 11) ?>" required />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="description">Description :</label>
|
|
</td>
|
|
<td>
|
|
<textarea style="width: 100%;" name="description" id="description" required><?= $data["description"] ?></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<input style="width: 100%;" type="submit" name="edit_tournament" value="Modifier le tournoi" />
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</form>
|
|
<?php
|
|
}
|
|
?>
|
|
|
|
<?php require_once "footer.php" ?>
|