From 5771a15a32a8aeacc2867ddd9fbef54eac156f7e Mon Sep 17 00:00:00 2001 From: Yohann Date: Sun, 8 Sep 2019 12:45:48 +0200 Subject: [PATCH] Optimisation de l'envoi de mails --- server_files/controllers/ajouter_equipe.php | 2 +- .../controllers/ajouter_organisateur.php | 2 +- server_files/controllers/ajouter_tournoi.php | 3 +- server_files/controllers/connexion.php | 41 ++-- server_files/controllers/inscription.php | 2 +- server_files/controllers/mon_compte.php | 6 +- server_files/controllers/rejoindre_equipe.php | 7 +- server_files/services/mail.php | 197 +++++++++++------- .../add_organizer_for_tournament.html | 5 +- .../services/mail_templates/add_team.html | 3 +- .../mail_templates/change_email_address.html | 16 ++ .../mail_templates/change_password.html | 18 ++ .../mail_templates/confirm_email.html | 18 ++ .../mail_templates/forgotten_password.html | 19 ++ .../services/mail_templates/join_team.html | 17 ++ .../services/mail_templates/register.html | 1 + 16 files changed, 241 insertions(+), 116 deletions(-) create mode 100644 server_files/services/mail_templates/change_email_address.html create mode 100644 server_files/services/mail_templates/change_password.html create mode 100644 server_files/services/mail_templates/confirm_email.html create mode 100644 server_files/services/mail_templates/forgotten_password.html create mode 100644 server_files/services/mail_templates/join_team.html diff --git a/server_files/controllers/ajouter_equipe.php b/server_files/controllers/ajouter_equipe.php index 013720b..f3a25c1 100644 --- a/server_files/controllers/ajouter_equipe.php +++ b/server_files/controllers/ajouter_equipe.php @@ -59,7 +59,7 @@ class NewTeam { $_SESSION["team"] = Team::fromTrigram($this->trigram); $_SESSION["user"]->setTeamId($_SESSION["team"]->getId()); - sendAddTeamMail($_SESSION["user"], $_SESSION["team"], $this->tournament); + Mailer::sendAddTeamMail($_SESSION["user"], $_SESSION["team"], $this->tournament); } } diff --git a/server_files/controllers/ajouter_organisateur.php b/server_files/controllers/ajouter_organisateur.php index 35c8f9c..469c4c8 100644 --- a/server_files/controllers/ajouter_organisateur.php +++ b/server_files/controllers/ajouter_organisateur.php @@ -53,7 +53,7 @@ class NewOrganizer { VALUES (?, ?, ?, ?, ?, ?);"); $req->execute([$this->email, password_hash($this->password, PASSWORD_BCRYPT), $this->surname, $this->first_name, $this->admin ? "ADMIN" : "ORGANIZER", $YEAR]); - sendAddOrganizerMail($this); + Mailer::sendAddOrganizerMail($this); } } diff --git a/server_files/controllers/ajouter_tournoi.php b/server_files/controllers/ajouter_tournoi.php index d6a9998..dcc437d 100644 --- a/server_files/controllers/ajouter_tournoi.php +++ b/server_files/controllers/ajouter_tournoi.php @@ -93,10 +93,11 @@ class NewTournament { $this->tournament = Tournament::fromName($this->name); + /** @var User $organizer */ foreach ($this->organizers as $organizer) { $req = $DB->prepare("INSERT INTO `organizers`(`organizer`, `tournament`) VALUES(?, ?);"); $req->execute([$organizer->getId(), $this->tournament->getId()]); - sendAddOrganizerForTournamentMail($organizer, $this->tournament); + Mailer::sendAddOrganizerForTournamentMail($organizer, $this->tournament); } } } diff --git a/server_files/controllers/connexion.php b/server_files/controllers/connexion.php index 41f14f7..862b51f 100644 --- a/server_files/controllers/connexion.php +++ b/server_files/controllers/connexion.php @@ -1,5 +1,7 @@ query("SELECT `id`, `email` FROM `users` WHERE `forgotten_password` = '" . htmlspecialchars($_GET["token"]) . "';")->fetch(); + $reset_data = $DB->query("SELECT `id` FROM `users` WHERE `forgotten_password` = '" . htmlspecialchars($_GET["token"]) . "';")->fetch(); if ($reset_data === FALSE) { header("Location: $URL_BASE/connexion"); exit(); @@ -34,7 +36,7 @@ function login() { $password = htmlspecialchars($_POST["password"]); $user = User::fromEmail($email); - if ($user === FALSE) + if ($user === null) return "Le compte n'existe pas."; if ($user->getConfirmEmailToken() !== NULL) { @@ -52,8 +54,6 @@ function login() { } function recuperateAccount() { - global $MAIL_ADDRESS, $URL_BASE; - $email = htmlspecialchars($_POST["email"]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) @@ -66,22 +66,16 @@ function recuperateAccount() { $token = uniqid(); $user->setForgottenPasswordToken($token); - - $msg = "Bonjour,\r\n\r\n" - . "Vous avez indiqué avoir oublié votre mot de passe. Veuillez cliquer ici pour le réinitialiser : $URL_BASE/connexion/reinitialiser_mdp/$token\r\n\r\n" - . "Si vous n'êtes pas à l'origine de cette manipulation, vous pouvez ignorer ce message.\r\n\r\n" - . "Cordialement,\r\n\r\n" - . "Le comité national d'organisation du TFJM²."; - mail("$email", "Mot de passe oublié - TFJM²", $msg, "From: $MAIL_ADDRESS\r\n"); + + Mailer::sendForgottenPasswordProcedureMail($user); return false; } function resetPassword() { - global $DB, $MAIL_ADDRESS, $reset_data; + global $reset_data; $id = $reset_data["id"]; - $email = $reset_data["email"]; $password = htmlspecialchars($_POST["password"]); $confirm = htmlspecialchars($_POST["confirm_password"]); @@ -91,20 +85,17 @@ function resetPassword() { if ($password != $confirm) return "Les deux mots de passe sont différents."; - $hash = password_hash($password, PASSWORD_BCRYPT); + $user = User::fromId($id); + $user->setForgottenPasswordToken(null); + $user->setPassword($password); - $DB->prepare("UPDATE `users` SET `pwd_hash` = ?, `forgotten_password` = NULL WHERE `id` = ?;")->execute([$hash, $id]); - - $msg = "Bonjour,\r\n\r\nNous vous informons que votre mot de passe vient d'être modifié. " - . "Si vous n'êtes pas à l'origine de cette manipulation, veuillez immédiatement vérifier vos accès à votre boîte mail et changer votre mot de passe sur la plateforme d'inscription.\r\n\r\n" - . "Cordialement,\r\n\r\nLe comité national d'organisation du TFJM²"; - mail($email, "Mot de passe modifié TFJM²", $msg, "From: $MAIL_ADDRESS\r\n"); + Mailer::sendChangePasswordMail($user); return false; } function sendConfirmEmail() { - global $URL_BASE, $MAIL_ADDRESS, $YEAR; + global $URL_BASE; $email = htmlspecialchars($_SESSION["confirm_email"]); @@ -120,12 +111,8 @@ function sendConfirmEmail() { header("Location: $URL_BASE/connexion"); exit(); } - - $confirm_email_uid = $user->getConfirmEmailToken(); - - $msg = "Bonjour,\r\n\r\nPour confirmer votre adresse mail, cliquez ici : $URL_BASE/confirmer_mail/$confirm_email_uid\r\n\r\n" - . "Cordialement,\r\n\r\nLe comité national d'organisation du TFJM²"; - mail($email, "Confirmation d'adresse mail TFJM² $YEAR", $msg, "From: $MAIL_ADDRESS\r\n"); + + Mailer::sendConfirmEmail($user); return false; } diff --git a/server_files/controllers/inscription.php b/server_files/controllers/inscription.php index 245aead..1db055c 100644 --- a/server_files/controllers/inscription.php +++ b/server_files/controllers/inscription.php @@ -86,7 +86,7 @@ class NewUser $req->execute([$this->email, password_hash($this->password, PASSWORD_BCRYPT), $this->confirm_email_token, $this->surname, $this->first_name, $this->birth_date, $this->gender, $this->address, $this->postal_code, $this->city, $this->country, $this->phone_number, $this->school, SchoolClass::getName($this->class), Role::getName($this->role), $this->description, $YEAR]); - sendRegisterMail($this); + Mailer::sendRegisterMail($this); } } diff --git a/server_files/controllers/mon_compte.php b/server_files/controllers/mon_compte.php index f09b3d8..a41261b 100644 --- a/server_files/controllers/mon_compte.php +++ b/server_files/controllers/mon_compte.php @@ -14,7 +14,7 @@ if (isset($_POST["submitted"])) { function updateAccount() { - global $URL_BASE, $MAIL_ADDRESS, $user; + global $user; $surname = htmlspecialchars($_POST["surname"]); if (isset($surname) && $surname != "") @@ -93,10 +93,10 @@ function updateAccount() $email = htmlspecialchars($_POST["email"]); if (isset($email) && $email != "" && filter_var($email, FILTER_VALIDATE_EMAIL)) { $confirm_email_token = uniqid(); + $user->setEmail($email); $user->setConfirmEmailToken($confirm_email_token); - $msg = "Vous venez de changer votre adresse mail. Veuillez désormais confirmer votre adresse mail en cliquant ici : $URL_BASE/confirmer_mail/$confirm_email_token"; - mail($email, "Changement d'adresse mail - TFJM²", $msg, "From: $MAIL_ADDRESS\r\n"); + Mailer::sendChangeEmailAddressMail($user); } return false; diff --git a/server_files/controllers/rejoindre_equipe.php b/server_files/controllers/rejoindre_equipe.php index 8ae550e..494ab1c 100644 --- a/server_files/controllers/rejoindre_equipe.php +++ b/server_files/controllers/rejoindre_equipe.php @@ -8,7 +8,7 @@ if (isset($_POST["submitted"])) { } function joinTeam() { - global $YEAR, $MAIL_ADDRESS, $access_code; + global $access_code; $access_code = htmlspecialchars($_POST["access_code"]); @@ -42,10 +42,7 @@ function joinTeam() { $_SESSION["team"] = $team; $tournament = $_SESSION["tournament"] = Tournament::fromId($team->getTournamentId()); - $msg = "Bonjour " . $user->getFirstName() . " " . $user->getSurname() . ",\r\n\r\n"; - $msg .= "Vous venez de rejoindre l'équipe « " . $team->getName() . " » (" . $team->getTrigram() . ") pour le TFJM² de " . $tournament->getId() . " et nous vous en remercions.\r\n\r\n"; - $msg .= "Cordialement,\r\n\r\nL'organisation du TFJM² $YEAR"; - mail($_SESSION["email"], "Équipe rejointe TFJM² $YEAR", $msg, "From: $MAIL_ADDRESS\r\n"); + Mailer::sendJoinTeamMail($user, $team, $tournament); return false; } diff --git a/server_files/services/mail.php b/server_files/services/mail.php index cc45bec..51b2adb 100644 --- a/server_files/services/mail.php +++ b/server_files/services/mail.php @@ -1,81 +1,130 @@ first_name, $content); - $content = preg_replace("#{SURNAME}#", $new_user->surname, $content); - $content = preg_replace("#{TOKEN}#", $new_user->confirm_email_token, $content); - - sendMail($new_user->email, "Inscription au TFJM² $YEAR", $content); -} - -/** - * @param $user User - * @param $team Team - * @param $tournament Tournament - */ -function sendAddTeamMail($user, $team, $tournament) -{ - global $LOCAL_PATH, $YEAR; - - $content = file_get_contents("$LOCAL_PATH/server_files/services/mail_templates/add_team.html"); - $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); - $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); - $content = preg_replace("#{TEAM_NAME}#", $team->getName(), $content); - $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); - $content = preg_replace("#{TOURNAMENT_NAME}#", $tournament->getName(), $content); - $content = preg_replace("#{ACCESS_CODE}#", $team->getAccessCode(), $content); - - sendMail($user->getEmail(), "Ajout d'une équipe TFJM² $YEAR", $content); -} - -/** - * @param NewUser - */ -function sendAddOrganizerMail($new_orga) -{ - global $LOCAL_PATH, $YEAR; - - $content = file_get_contents("$LOCAL_PATH/server_files/services/mail_templates/add_organizer.html"); - $content = preg_replace("#{FIRST_NAME}#", $new_orga->first_name, $content); - $content = preg_replace("#{SURNAME}#", $new_orga->surname, $content); - $content = preg_replace("#{PASSWORD}#", $new_orga->password, $content); - - sendMail($new_orga->email, "Ajout d'un organisateur -- TFJM² $YEAR", $content); -} - -/** - * @param $organizer User - * @param $tournament Tournament - */ -function sendAddOrganizerForTournamentMail($organizer, $tournament) -{ - global $LOCAL_PATH, $YEAR; - - $content = file_get_contents("$LOCAL_PATH/server_files/services/mail_templates/add_organizer_for_tournament.html"); - $content = preg_replace("#{FIRST_NAME}#", $organizer->getFirstName(), $content); - $content = preg_replace("#{SURNAME}#", $organizer->getSurname(), $content); - $content = preg_replace("#{TOURNAMENT_NAME}#", $tournament->getName(), $content); - - sendMail($organizer->getEmail(), "Ajout d'un organisateur pour le tournoi " . $tournament->getName() . "-- TFJM² $YEAR", $content); + mail($email, $subject, $content, $headers); + } + + private static function getTemplate($name) + { + global $LOCAL_PATH; + return file_get_contents("$LOCAL_PATH/server_files/services/mail_templates/$name.html"); + } + + public static function sendRegisterMail(NewUser $new_user) + { + global $YEAR; + + $content = self::getTemplate("register"); + $content = preg_replace("#{FIRST_NAME}#", $new_user->first_name, $content); + $content = preg_replace("#{SURNAME}#", $new_user->surname, $content); + $content = preg_replace("#{TOKEN}#", $new_user->confirm_email_token, $content); + + self::sendMail($new_user->email, "Inscription au TFJM² $YEAR", $content); + } + + public static function sendConfirmEmail(User $user) + { + global $YEAR; + + $content = self::getTemplate("register"); + $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); + $content = preg_replace("#{TOKEN}#", $user->getConfirmEmailToken(), $content); + + self::sendMail($user->getEmail(), "Confirmation d'adresse e-mail – TFJM² $YEAR", $content); + } + + public static function sendChangeEmailAddressMail(User $user) + { + $content = self::getTemplate("change_email_address"); + $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); + $content = preg_replace("#{TOKEN}#", $user->getConfirmEmailToken(), $content); + + self::sendMail($user->getEmail(), "Changement d'adresse e-mail – TFJM²", $content); + } + + public static function sendForgottenPasswordProcedureMail(User $user) + { + $content = self::getTemplate("forgotten_password"); + $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); + $content = preg_replace("#{TOKEN}#", $user->getForgottenPasswordToken(), $content); + + self::sendMail($user->getEmail(), "Mot de passe oublié – TFJM²", $content); + } + + public static function sendChangePasswordMail(User $user) + { + $content = self::getTemplate("change_password"); + $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); + + self::sendMail($user->getEmail(), "Mot de passe changé – TFJM²", $content); + } + + public static function sendAddTeamMail(User $user, Team $team, Tournament $tournament) + { + global $YEAR; + + $content = self::getTemplate("add_team"); + $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); + $content = preg_replace("#{TEAM_NAME}#", $team->getName(), $content); + $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); + $content = preg_replace("#{TOURNAMENT_NAME}#", $tournament->getName(), $content); + $content = preg_replace("#{ACCESS_CODE}#", $team->getAccessCode(), $content); + + self::sendMail($user->getEmail(), "Ajout d'une équipe TFJM² $YEAR", $content); + } + + public static function sendJoinTeamMail(User $user, Team $team, Tournament $tournament) + { + global $YEAR; + + $content = self::getTemplate("join_team"); + $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); + $content = preg_replace("#{TEAM_NAME}#", $team->getName(), $content); + $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); + $content = preg_replace("#{TOURNAMENT_NAME}#", $tournament->getName(), $content); + + self::sendMail($user->getEmail(), "Équipe rejointe TFJM² $YEAR", $content); + } + + public static function sendAddOrganizerMail(NewOrganizer $new_orga) + { + global $YEAR; + + $content = self::getTemplate("add_organizer"); + $content = preg_replace("#{FIRST_NAME}#", $new_orga->first_name, $content); + $content = preg_replace("#{SURNAME}#", $new_orga->surname, $content); + $content = preg_replace("#{PASSWORD}#", $new_orga->password, $content); + + self::sendMail($new_orga->email, "Ajout d'un organisateur – TFJM² $YEAR", $content); + } + + public static function sendAddOrganizerForTournamentMail(User $organizer, Tournament $tournament) + { + global $YEAR; + + $content = self::getTemplate("add_organizer_for_tournament"); + $content = preg_replace("#{FIRST_NAME}#", $organizer->getFirstName(), $content); + $content = preg_replace("#{SURNAME}#", $organizer->getSurname(), $content); + $content = preg_replace("#{TOURNAMENT_NAME}#", $tournament->getName(), $content); + + self::sendMail($organizer->getEmail(), "Ajout d'un organisateur pour le tournoi " . $tournament->getName() . " – TFJM² $YEAR", $content); + } } diff --git a/server_files/services/mail_templates/add_organizer_for_tournament.html b/server_files/services/mail_templates/add_organizer_for_tournament.html index bbc6e03..a61ace2 100644 --- a/server_files/services/mail_templates/add_organizer_for_tournament.html +++ b/server_files/services/mail_templates/add_organizer_for_tournament.html @@ -1,8 +1,9 @@ - + + - Organisateur du tournoi de {TOURNAMENT_NAME} -- TFJM² + Organisateur du tournoi de {TOURNAMENT_NAME} – TFJM² Bonjour {FIRST_NAME} {SURNAME},
diff --git a/server_files/services/mail_templates/add_team.html b/server_files/services/mail_templates/add_team.html index ada9e56..ffd2b50 100644 --- a/server_files/services/mail_templates/add_team.html +++ b/server_files/services/mail_templates/add_team.html @@ -8,7 +8,8 @@ Bonjour {FIRST_NAME} {SURNAME},

Vous venez de créer l'équipe « {TEAM_NAME} » ({TRIGRAM}) pour le TFJM2 de {TOURNAMENT_NAME} et nous vous en remercions.
-"Afin de permettre aux autres membres de votre équipe de vous rejoindre, veuillez leur transmettre le code d'accès : {ACCESS_CODE}
+Afin de permettre aux autres membres de votre équipe de vous rejoindre, veuillez leur transmettre le code d'accès : +{ACCESS_CODE}

Le comité national d'organisation du TFJM2 diff --git a/server_files/services/mail_templates/change_email_address.html b/server_files/services/mail_templates/change_email_address.html new file mode 100644 index 0000000..0adf015 --- /dev/null +++ b/server_files/services/mail_templates/change_email_address.html @@ -0,0 +1,16 @@ + + + + + + Changement d'adresse e-mail – TFJM² + + +Bonjour {FIRST_NAME} {SURNAME},
+
+Vous venez de changer votre adresse e-mail. Veuillez désormais la confirmer en cliquant ici : {URL_BASE}/confirmer_mail/{TOKEN}
+
+Le comité national d'organisation du TFJM2 + + \ No newline at end of file diff --git a/server_files/services/mail_templates/change_password.html b/server_files/services/mail_templates/change_password.html new file mode 100644 index 0000000..91d2cf1 --- /dev/null +++ b/server_files/services/mail_templates/change_password.html @@ -0,0 +1,18 @@ + + + + + Mot de passe changé – TFJM² + + +Bonjour {FIRST_NAME} {SURNAME},
+
+Nous vous informons que votre mot de passe vient d'être modifié. Si vous n'êtes pas à l'origine de cette manipulation, +veuillez immédiatement vérifier vos accès à votre boîte mail et changer votre mot de passe sur la plateforme +d'inscription.
+
+Cordialement,
+
+Le comité national d'organisation du TFJM2 + + \ No newline at end of file diff --git a/server_files/services/mail_templates/confirm_email.html b/server_files/services/mail_templates/confirm_email.html new file mode 100644 index 0000000..ba75174 --- /dev/null +++ b/server_files/services/mail_templates/confirm_email.html @@ -0,0 +1,18 @@ + + + + + + Inscription au TFJM² {YEAR} + + +Bonjour {FIRST_NAME} {SURNAME},
+
+Vous êtes inscrit au TFJM2 {YEAR} et nous vous en remercions.
+Pour valider votre adresse e-mail, veuillez cliquer sur le lien : {URL_BASE}/confirmer_mail/{TOKEN}
+
+Cordialement,
+
+Le comité national d'organisation du TFJM2 + + \ No newline at end of file diff --git a/server_files/services/mail_templates/forgotten_password.html b/server_files/services/mail_templates/forgotten_password.html new file mode 100644 index 0000000..1041695 --- /dev/null +++ b/server_files/services/mail_templates/forgotten_password.html @@ -0,0 +1,19 @@ + + + + + Mot de passe oublié – TFJM² + + +Bonjour,
+
+Vous avez indiqué avoir oublié votre mot de passe. Veuillez cliquer ici pour le réinitialiser : +$URL_BASE/connexion/reinitialiser_mdp/{TOKEN}
+
+Si vous n'êtes pas à l'origine de cette manipulation, vous pouvez ignorer ce message.
+
+Cordialement,
+
+Le comité national d'organisation du TFJM2 + + \ No newline at end of file diff --git a/server_files/services/mail_templates/join_team.html b/server_files/services/mail_templates/join_team.html new file mode 100644 index 0000000..3e51307 --- /dev/null +++ b/server_files/services/mail_templates/join_team.html @@ -0,0 +1,17 @@ + + + + + Équipe rejointe – TFJM² {YEAR} + + +Bonjour {FIRST_NAME} {SURNAME},
+
+Vous venez de rejoindre l'équipe « {TEAM_NAME} » ({TRIGRAM}) pour le TFJM² de {TOURNAMENT_NAME} et nous vous en +remercions.
+
+Cordialement,
+
+Le comité national d'organisation du TFJM2 + + \ No newline at end of file diff --git a/server_files/services/mail_templates/register.html b/server_files/services/mail_templates/register.html index 42bfe87..0334c01 100644 --- a/server_files/services/mail_templates/register.html +++ b/server_files/services/mail_templates/register.html @@ -1,4 +1,5 @@ +