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() ?>">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 getName() ?> ! - Erreur : " . $error_message . ""; ?> + Erreur : " . $error_message . ""; ?>