diff --git a/dispatcher.php b/dispatcher.php index 9ad9e69..ec52e4e 100644 --- a/dispatcher.php +++ b/dispatcher.php @@ -8,6 +8,8 @@ require_once "server_files/classes/Team.php"; require_once "server_files/classes/Tournament.php"; require_once "server_files/classes/User.php"; require_once "server_files/classes/ValidationStatus.php"; +require_once "server_files/services/mail.php"; +require_once "server_files/utils.php"; require_once "server_files/model.php"; loadUserValues(); diff --git a/server_files/config.php b/server_files/config.php index b973cdf..a57349b 100644 --- a/server_files/config.php +++ b/server_files/config.php @@ -6,7 +6,9 @@ $YEAR = $_ENV["TFJM_YEAR"]; $URL_BASE = $_ENV["TFJM_URL_BASE"]; $LOCAL_PATH = $_ENV["TFJM_LOCAL_PATH"]; -$MAIL_ADDRESS = $_ENV["TFJM_MAIL_ADDRESS"]; +$MAIL_DOMAIN = $_ENV["TFJM_MAIL_DOMAIN"]; +// TODO Remove +$MAIL_ADDRESS = "contact@" . $MAIL_DOMAIN; /** * DB infos diff --git a/server_files/controllers/inscription.php b/server_files/controllers/inscription.php index 8cb136d..417576b 100644 --- a/server_files/controllers/inscription.php +++ b/server_files/controllers/inscription.php @@ -17,26 +17,26 @@ if (isset($_POST["submitted"])) { class NewUser { - public $email = null; - public $first_name = null; - public $surname = null; - public $birth_date = null; - public $gender = null; + public $email; + public $first_name; + public $surname; + public $birth_date; + public $gender; public $address = ""; - public $postal_code = null; + public $postal_code; public $city = ""; - public $country = null; - public $phone_number = null; - public $role = null; - public $school = null; - public $class = null; - public $responsible_name = null; - public $responsible_phone = null; - public $responsible_email = null; - public $description = null; - public $confirm_email_token = null; - private $password = null; - private $confirm_password = null; + public $country; + public $phone_number; + public $role; + public $school; + public $class; + public $responsible_name; + public $responsible_phone; + public $responsible_email; + public $description; + public $confirm_email_token; + private $password; + private $confirm_password; public function __construct($data) { @@ -46,15 +46,15 @@ class NewUser public function makeVerifications() { - global $DB, $YEAR; + global $YEAR; ensure(filter_var($this->email, FILTER_VALIDATE_EMAIL), "L'adresse e-mail entrée est invalide."); - ensure(!$DB->query("SELECT `email` FROM `users` WHERE `email` = '" . $this->email . "' AND `year` = '$YEAR';")->fetch(), "Un compte existe déjà avec cette adresse e-mail."); + ensure(userExists($this->email), "Un compte existe déjà avec cette adresse e-mail."); ensure(strlen($this->password) >= 8, "Le mot de passe doit comporter au moins 8 caractères."); ensure($this->password == $this->confirm_password, "Les deux mots de passe sont différents."); ensure($this->surname != "", "Le nom de famille est obligatoire."); ensure($this->first_name != "", "Le prénom est obligatoire."); - ensure(date_parse_from_format("yyyy-mm-dd", $this->birth_date) !== false, "La date de naissance est invalide."); + ensure(dateWellFormed($this->birth_date), "La date de naissance est invalide."); ensure($this->birth_date < $YEAR . "-01-01", "Vous devez être né."); ensure($this->gender == "M" || $this->gender == "F", "Le sexe indiqué est invalide."); ensure(preg_match("#^[0-9]{4}[0-9]?$#", $this->postal_code) && intval($this->postal_code) >= 01000 && intval($this->postal_code) <= 95999, "Le code postal est invalide."); @@ -73,13 +73,11 @@ class NewUser } $this->confirm_email_token = uniqid(); - - throw new AssertionError("erreur"); } public function register() { - global $DB, $YEAR, $URL_BASE, $MAIL_ADDRESS; + global $DB, $YEAR; $req = $DB->prepare("INSERT INTO `users`(`email`, `pwd_hash`, `confirm_email`, `surname`, `first_name`, `birth_date`, `gender`, `address`, `postal_code`, `city`, `country`, `phone_number`, `school`, `class`, `role`, `description`, `year`) @@ -87,10 +85,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]); - // TODO Mieux gérer l'envoi des mails avec une classe à part - - $msg = "Merci pour votre inscription au TFJM² $YEAR ! Veuillez désormais confirmer votre adresse mail en cliquant ici : $URL_BASE/confirmer_mail/" . $this->confirm_email_token; - mail($this->email, "Inscription au TFJM² $YEAR", $msg, "From: $MAIL_ADDRESS\r\n"); + sendRegisterMail($this); } } diff --git a/server_files/model.php b/server_files/model.php index 6e5eef3..bcb9db6 100644 --- a/server_files/model.php +++ b/server_files/model.php @@ -44,13 +44,6 @@ function loadUserValues() { } } -function echoDate($date = NULL, $with_time = false) { - if ($date == NULL) - $date = date("yyyy-mm-dd"); - - return strftime("%d %B %G" . ($with_time ? " %H:%M" : ""), strtotime($date)); -} - function quitTeam() { global $DB, $URL_BASE; @@ -96,7 +89,10 @@ function quitTeam() { unset($_SESSION["team"]); } -function ensure($bool, $error_msg = "") { - if (!$bool) - throw new AssertionError($error_msg); +function userExists($email) { + global $DB, $YEAR; + + $req = $DB->prepare("SELECT `email` FROM `users` WHERE `email` = ? AND `year` = '$YEAR';"); + $req->execute([$email]); + return !$req->fetch(); } \ No newline at end of file diff --git a/server_files/services/mail.php b/server_files/services/mail.php new file mode 100644 index 0000000..48fc5d8 --- /dev/null +++ b/server_files/services/mail.php @@ -0,0 +1,30 @@ +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); +} \ No newline at end of file diff --git a/server_files/services/mail_templates/register.html b/server_files/services/mail_templates/register.html new file mode 100644 index 0000000..42bfe87 --- /dev/null +++ b/server_files/services/mail_templates/register.html @@ -0,0 +1,15 @@ + + + + + Inscription au TFJM² {YEAR} + + +Bonjour {FIRST_NAME} {SURNAME},
+
+Vous venez de vous inscrire au TFJM2 {YEAR} et nous vous en remercions.
+Pour valider votre adresse e-mail, veuillez cliquer sur le lien : {URL_BASE}/confirmer_mail/{TOKEN}
+
+Le comité national d'organisation du TFJM2 + + \ No newline at end of file diff --git a/server_files/utils.php b/server_files/utils.php new file mode 100644 index 0000000..12671cb --- /dev/null +++ b/server_files/utils.php @@ -0,0 +1,17 @@ +getRole() == Role::PARTICIPANT || $user->getRole() == Role::ENCADRANT) { ?> Équipe : getTrigram() . "\">" . $team->getName() . " (" . $team->getTrigram() . ")" ?>
-Date de naissance : getBirthDate()) ?>
+Date de naissance : getBirthDate()) ?>
Sexe : getGender() == "M" ? "Masculin" : "Féminin" ?>
Adresse : getAddress() . ", " . $user->getPostalCode() . " " . $user->getCity() . ($user->getCountry() == "France" ? "" : ", " . $user->getCountry()) ?>
Adresse e-mail : getEmail() ?>
diff --git a/server_files/views/mon_compte.php b/server_files/views/mon_compte.php index 872d46d..c96e1be 100644 --- a/server_files/views/mon_compte.php +++ b/server_files/views/mon_compte.php @@ -42,7 +42,7 @@ if (isset($error_message) && $error_message === FALSE) { - getBirthDate()) ?> + getBirthDate()) ?> diff --git a/server_files/views/tournoi.php b/server_files/views/tournoi.php index ea99aea..1e5ec28 100644 --- a/server_files/views/tournoi.php +++ b/server_files/views/tournoi.php @@ -21,10 +21,10 @@ echo substr($s, 0, -2); Nombre d'équipes maximal : getSize() ?>
Lieu : getPlace() ?>
Prix par partipant : getPrice() == 0 ? "Gratuit" : $tournament->getPrice() . " €" ?>
-Dates : Du getStartDate()) ?> au getEndDate()) ?>
-Clôture des inscriptions : getInscriptionDate(), true) ?>
-Date limite d'envoi des solutions : getSolutionsDate(), true) ?>
-Date limite d'envoi des notes de synthèse : getSynthesesDate(), true) ?>
+Dates : Du getStartDate()) ?> au getEndDate()) ?>
+Clôture des inscriptions : getInscriptionDate(), true) ?>
+Date limite d'envoi des solutions : getSolutionsDate(), true) ?>
+Date limite d'envoi des notes de synthèse : getSynthesesDate(), true) ?>
Description : getDescription() ?>
isFinal()) @@ -73,7 +73,7 @@ if ($tournament->isFinal()) ?> - + "> - Du au - - + Du au + + "> - Du au - - + Du au + +