diff --git a/server_files/controllers/rejoindre_equipe.php b/server_files/controllers/rejoindre_equipe.php
index 494ab1c..dadcf35 100644
--- a/server_files/controllers/rejoindre_equipe.php
+++ b/server_files/controllers/rejoindre_equipe.php
@@ -3,48 +3,64 @@
if (isset($_SESSION["team"]) || !isset($_SESSION["user"]) || ($_SESSION["role"] != Role::PARTICIPANT && $_SESSION["role"] != Role::ENCADRANT))
require_once "server_files/403.php";
+$has_error = false;
+$error_message = null;
+
if (isset($_POST["submitted"])) {
- $error_message = joinTeam();
+ $join_team = new JoinTeam($_POST);
+ try {
+ $join_team->makeVerifications();
+ $join_team->joinTeam();
+ } catch (AssertionError $e) {
+ $has_error = true;
+ $error_message = $e->getMessage();
+ }
}
-function joinTeam() {
- global $access_code;
-
- $access_code = htmlspecialchars($_POST["access_code"]);
-
- if (!isset($access_code) || strlen($access_code) != 6)
- return "Le code d'accès doit comporter 6 caractères.";
+class JoinTeam
+{
+ private $access_code;
+ private $team;
+ private $min_null_index;
- /** @var User $user */
- $user = $_SESSION["user"];
- $team = Team::fromAccessCode($access_code);
- if ($team === null)
- return "Ce code d'accès est invalide.";
-
- if ($team->getValidationStatus() != ValidationStatus::NOT_READY)
- return "Cette équipe est déjà en cours de validation ou validée, vous ne pouvez pas la rejoindre.";
-
- for ($i = 1; $i <= $_SESSION["role"] == Role::PARTICIPANT ? 6 : 2; ++$i) {
- if (($_SESSION["role"] == Role::PARTICIPANT ? $team->getParticipants()[$i - 1] : $team->getEncadrants()[$i - 1]) == NULL)
- break;
+ public function __construct($data)
+ {
+ $this->access_code = strtolower(htmlspecialchars($data["access_code"]));
+ $this->team = Team::fromAccessCode($this->access_code);
}
-
- if ($_SESSION["role"] == Role::PARTICIPANT && $i == 7 || $_SESSION["role"] == Role::ENCADRANT && $i == 3)
- return "Il n'y a plus de place pour vous dans l'équipe.";
- $user->setTeamId($team->getId());
+ public function makeVerifications()
+ {
+ ensure(preg_match("#[a-z0-9]{6}#", $this->access_code), "Le code d'accès doit comporter 6 caractères alphanumériques.");
+ ensure($this->team != null, "Ce code d'accès est invalide.");
+ ensure($this->team->getValidationStatus() == ValidationStatus::NOT_READY, "Cette équipe est déjà validée ou en cours de validation, vous ne pouvez pas la rejoindre.");
- if ($_SESSION["role"] == Role::ENCADRANT)
- $team->setEncadrant($i, $user->getId());
- else
- $team->setParticipant($i, $user->getId());
+ for ($i = 1; $i <= $_SESSION["role"] == Role::PARTICIPANT ? 6 : 2; ++$i) {
+ if (($_SESSION["role"] == Role::PARTICIPANT ? $this->team->getParticipants()[$i - 1] : $this->team->getEncadrants()[$i - 1]) == NULL)
+ break;
+ }
- $_SESSION["team"] = $team;
- $tournament = $_SESSION["tournament"] = Tournament::fromId($team->getTournamentId());
+ $this->min_null_index = $i;
- Mailer::sendJoinTeamMail($user, $team, $tournament);
-
- return false;
+ ensure($_SESSION["role"] == Role::PARTICIPANT && $this->min_null_index <= 6 || $_SESSION["role"] == Role::ENCADRANT && $this->min_null_index <= 2, "Il n'y a plus de place pour vous dans l'équipe.");
+ }
+
+ public function joinTeam()
+ {
+ $user = $_SESSION["user"];
+
+ $user->setTeamId($this->team->getId());
+
+ if ($_SESSION["role"] == Role::ENCADRANT)
+ $this->team->setEncadrant($this->min_null_index, $user->getId());
+ else
+ $this->team->setParticipant($this->min_null_index, $user->getId());
+
+ $_SESSION["team"] = $this->team;
+ $tournament = $_SESSION["tournament"] = Tournament::fromId($this->team->getTournamentId());
+
+ Mailer::sendJoinTeamMail($user, $this->team, $tournament);
+ }
}
require_once "server_files/views/rejoindre_equipe.php";
diff --git a/server_files/views/equipe.php b/server_files/views/equipe.php
index 4f0d332..af1315c 100644
--- a/server_files/views/equipe.php
+++ b/server_files/views/equipe.php
@@ -7,7 +7,7 @@
Tournoi : getName() ?>">= $tournament->getName() ?>
getEncadrants()[$i] == NULL)
+ if ($team->getEncadrants()[$i - 1] == NULL)
continue;
$encadrant = User::fromId($team->getEncadrants()[$i - 1]);
$id = $encadrant->getId();
diff --git a/server_files/views/rejoindre_equipe.php b/server_files/views/rejoindre_equipe.php
index ce75669..de638ee 100644
--- a/server_files/views/rejoindre_equipe.php
+++ b/server_files/views/rejoindre_equipe.php
@@ -1,11 +1,11 @@
+if (isset($join_team) && !$has_error) { ?>
Vous avez bien rejoint l'équipe = $_SESSION["team"]->getName() ?> !
- Erreur : " . $error_message . ""; ?>
+ Erreur : " . $error_message . ""; ?>