From 50667d57ac552456be13c29ce986638e3d195b73 Mon Sep 17 00:00:00 2001 From: stiti Date: Thu, 6 Jun 2024 17:06:11 +0200 Subject: [PATCH] Commit de Marco : Ajout de messages de confirmations --- .../application/config/routes.php | 3 +- .../application/controllers/Utilisateur.php | 213 ++++++++++++++---- .../application/models/Utilisateur_model.php | 21 +- .../application/views/confirmation.php | 23 ++ .../assets/css/confirmation.css | 56 +++++ 5 files changed, 267 insertions(+), 49 deletions(-) create mode 100644 CodeIgniter-3.1.13/application/views/confirmation.php create mode 100644 CodeIgniter-3.1.13/assets/css/confirmation.css diff --git a/CodeIgniter-3.1.13/application/config/routes.php b/CodeIgniter-3.1.13/application/config/routes.php index d54b555..afc829c 100644 --- a/CodeIgniter-3.1.13/application/config/routes.php +++ b/CodeIgniter-3.1.13/application/config/routes.php @@ -58,7 +58,6 @@ $route['artiste/(:num)'] = 'artiste/index/$1'; $route['search'] = 'search/index'; $route['mentions-legals'] = 'MentionsLegales/index'; $route['playlists/add_artist/(:num)'] = 'playlists/add_artist/$1'; - - +$route['utilisateur/confirmation'] = 'utilisateur/confirmation'; diff --git a/CodeIgniter-3.1.13/application/controllers/Utilisateur.php b/CodeIgniter-3.1.13/application/controllers/Utilisateur.php index 0819d4f..116fb18 100644 --- a/CodeIgniter-3.1.13/application/controllers/Utilisateur.php +++ b/CodeIgniter-3.1.13/application/controllers/Utilisateur.php @@ -19,7 +19,6 @@ class Utilisateur extends CI_Controller { } public function inscription(){ - // Définir les règles de validation $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[utilisateur.email]'); $this->form_validation->set_rules('nom', 'Nom', 'required'); $this->form_validation->set_rules('prenom', 'Prénom', 'required'); @@ -29,43 +28,135 @@ class Utilisateur extends CI_Controller { )); if ($this->form_validation->run() == FALSE) { - - $data['title']="Inscription"; - $data['css']="assets/css/inscription"; - - // Charger la vue avec les erreurs - $this->load->view('layout/header_dark',$data); + $data['title'] = "Inscription"; + $data['css'] = "assets/css/inscription"; + + $this->load->view('layout/header_dark', $data); $this->load->view('inscription'); $this->load->view('layout/footer_dark'); } else { - // Récupérer les données du formulaire + $code = rand(100000, 999999); // Générer un code de confirmation à 6 chiffres $data = array( 'email' => $this->input->post('email'), 'nom' => $this->input->post('nom'), 'prenom' => $this->input->post('prenom'), - 'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT) // Hasher le mot de passe + 'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT), + 'confirmation_code' => $code, + 'code_sent_at' => date('Y-m-d H:i:s') ); - // Insérer les données dans la base de données if ($this->Utilisateur_model->insert_user($data)) { - // Envoyer un email de confirmation - $this->send_confirmation_email($data['email'], $data['prenom'], $data['nom']); - - $this->session->set_flashdata('success', 'Inscription réussie. Vous pouvez maintenant vous connecter.'); - redirect('utilisateur/connexion'); + $this->send_confirmation_code_email($data['email'], $data['prenom'], $data['nom'], $code); + $this->session->set_flashdata('success', 'Inscription réussie. Un code de confirmation a été envoyé à votre adresse email.'); + redirect('utilisateur/confirmer'); } else { $data['error'] = 'Une erreur est survenue. Veuillez réessayer.'; - - $data['title']="Inscription"; - $data['css']="assets/css/inscription"; - - $this->load->view('layout/header_dark',$data); - $this->load->view('inscription',$data); + $data['title'] = "Inscription"; + $data['css'] = "assets/css/inscription"; + + $this->load->view('layout/header_dark', $data); + $this->load->view('inscription', $data); $this->load->view('layout/footer_dark'); } } } + private function send_confirmation_code_email($to_email, $prenom, $nom, $code) { + $mail = new PHPMailer(true); + try { + // Configuration du serveur SMTP + $mail->isSMTP(); + $mail->Host = 'smtp.gmail.com'; + $mail->SMTPAuth = true; + $mail->Username = 'onzeur.contact@gmail.com'; + $mail->Password = 'ofoi hjpo isxf azdk'; + $mail->SMTPSecure = 'tls'; + $mail->Port = 587; + + // Destinataires + $mail->setFrom('onzeur.contact@gmail.com', 'Support Onzeur'); + $mail->addAddress($to_email); + + // Contenu de l'email + $mail->isHTML(true); + $mail->Subject = 'Votre code de confirmation - Onzeur'; + + $mail_body = ' + + + + + + + + +
+
+ Logo Onzeur +
+
+

Bonjour, '.$prenom.' '.$nom.' !

+

Merci de vous être inscrit sur Onzeur. Pour finaliser votre inscription, veuillez utiliser le code de confirmation suivant :

+

Code de confirmation : '.$code.'

+

Ce code est valable pendant 1 minute.

+

Si vous n\'avez pas demandé cette inscription, veuillez ignorer cet email.

+

Cordialement,
L\'équipe Onzeur

+
+ +
+ + '; + + $mail->Body = $mail_body; + + $mail->send(); + } catch (Exception $e) { + log_message('error', 'Erreur lors de l\'envoi de l\'email: ' . $mail->ErrorInfo); + } + } + + + private function send_confirmation_email($to_email, $prenom, $nom) { $mail = new PHPMailer(true); try { @@ -166,6 +257,35 @@ class Utilisateur extends CI_Controller { } } + public function confirmer() { + $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); + $this->form_validation->set_rules('code', 'Code de confirmation', 'required|exact_length[6]'); + + if ($this->form_validation->run() == FALSE) { + $data['title'] = "Confirmation - Onzeur"; + $data['css'] = "assets/css/confirmation"; + + $this->load->view('layout/header_dark', $data); + $this->load->view('confirmation'); + $this->load->view('layout/footer_dark'); + } else { + $email = $this->input->post('email'); + $code = $this->input->post('code'); + + $user = $this->Utilisateur_model->get_user_by_email($email); + if ($user && $user['confirmation_code'] == $code && strtotime($user['code_sent_at']) > strtotime('-1 minute')) { + // Mettre à jour le statut de l'utilisateur pour confirmer l'inscription + $this->Utilisateur_model->confirm_user($email); + $this->session->set_flashdata('success', 'Votre inscription a été confirmée. Vous pouvez maintenant vous connecter.'); + redirect('utilisateur/connexion'); + } else { + $this->session->set_flashdata('error', 'Code de confirmation invalide ou expiré. Veuillez réessayer.'); + redirect('utilisateur/confirmer'); + } + } + } + + public function ajouter_avis() { if(!$this->session->userdata('user_id')) { redirect('utilisateur/connexion'); @@ -394,16 +514,15 @@ class Utilisateur extends CI_Controller { } - public function connexion(){ + public function connexion() { // Définir les règles de validation $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); $this->form_validation->set_rules('password', 'Mot de passe', 'required'); if ($this->form_validation->run() == FALSE) { - - $data['title']="Connexion"; - $data['css']="assets/css/inscription"; - + $data['title'] = "Connexion"; + $data['css'] = "assets/css/inscription"; + // Charger la vue avec les erreurs $this->load->view('layout/header_dark', $data); $this->load->view('connexion'); @@ -417,29 +536,41 @@ class Utilisateur extends CI_Controller { $user = $this->Utilisateur_model->get_user($email); if ($user && password_verify($password, $user->password)) { - // Connexion réussie, enregistrer l'utilisateur dans la session - $this->session->set_userdata('user_id', $user->id); - // Définir un cookie pour indiquer que l'utilisateur est connecté - $cookie = array( - 'name' => 'user_logged_in', - 'value' => '1', - 'expire' => '86500', // durée de vie du cookie (1 jour) - 'secure' => TRUE - ); - $this->input->set_cookie($cookie); - redirect('utilisateur/dashboard'); + // Vérifier si l'utilisateur a confirmé son compte + if ($user->is_confirmed) { + // Connexion réussie, enregistrer l'utilisateur dans la session + $this->session->set_userdata('user_id', $user->id); + // Définir un cookie pour indiquer que l'utilisateur est connecté + $cookie = array( + 'name' => 'user_logged_in', + 'value' => '1', + 'expire' => '86500', // durée de vie du cookie (1 jour) + 'secure' => TRUE + ); + $this->input->set_cookie($cookie); + redirect('utilisateur/dashboard'); + } else { + $data['error'] = 'Votre compte n\'a pas encore été confirmé. Veuillez nous contacter pour vérifier votre identitée. Cliquez ici pour nous contacter.'; + + $data['title'] = "Connexion"; + $data['css'] = "assets/css/inscription"; + + $this->load->view('layout/header_dark', $data); + $this->load->view('connexion', $data); + $this->load->view('layout/footer_dark'); + } } else { $data['error'] = 'Email ou mot de passe incorrect.'; - $data['title']="Connexion"; - $data['css']="assets/css/inscription"; + $data['title'] = "Connexion"; + $data['css'] = "assets/css/inscription"; - $this->load->view('layout/header_dark',$data); + $this->load->view('layout/header_dark', $data); $this->load->view('connexion', $data); $this->load->view('layout/footer_dark'); } } - } + } public function deconnexion(){ // Détruire la session de l'utilisateur diff --git a/CodeIgniter-3.1.13/application/models/Utilisateur_model.php b/CodeIgniter-3.1.13/application/models/Utilisateur_model.php index f355dea..fe0e34e 100644 --- a/CodeIgniter-3.1.13/application/models/Utilisateur_model.php +++ b/CodeIgniter-3.1.13/application/models/Utilisateur_model.php @@ -12,15 +12,19 @@ class Utilisateur_model extends CI_Model { return $this->db->insert('utilisateur', $data); } - public function get_user($email) { - $query = $this->db->get_where('utilisateur', array('email' => $email)); - return $query->row(); + public function confirm_user($email){ + $this->db->where('email', $email); + return $this->db->update('utilisateur', array('is_confirmed' => 1, 'confirmation_code' => NULL, 'code_sent_at' => NULL)); } - public function get_user_by_email($email) { + public function get_user($email) { $this->db->where('email', $email); - $query = $this->db->get('utilisateur'); // Assurez-vous que 'utilisateurs' est le nom de votre table d'utilisateurs - return $query->row(); // Retourne le premier résultat + $query = $this->db->get('utilisateur'); + return $query->row(); + } + + public function get_user_by_email($email){ + return $this->db->get_where('utilisateur', array('email' => $email))->row_array(); } public function get_user_by_id($id) { @@ -65,6 +69,11 @@ class Utilisateur_model extends CI_Model { public function supprimer_avis($avis_id) { return $this->db->delete('avis', array('id' => $avis_id)); } + + public function mettre_a_jour_code_confirmation($email, $nouveau_code) { + $this->db->where('email', $email); + return $this->db->update('utilisateur', array('confirmation_code' => $nouveau_code)); + } } ?> diff --git a/CodeIgniter-3.1.13/application/views/confirmation.php b/CodeIgniter-3.1.13/application/views/confirmation.php new file mode 100644 index 0000000..a299f7b --- /dev/null +++ b/CodeIgniter-3.1.13/application/views/confirmation.php @@ -0,0 +1,23 @@ +

Confirmation d'inscription

+session->flashdata('success')): ?> +

session->flashdata('success'); ?>

+ +session->flashdata('error')): ?> +

session->flashdata('error'); ?>

+ + + 'confirmation-form')); ?> +
+ + + +
+
+ + + +
+
+ +
+ diff --git a/CodeIgniter-3.1.13/assets/css/confirmation.css b/CodeIgniter-3.1.13/assets/css/confirmation.css new file mode 100644 index 0000000..6483023 --- /dev/null +++ b/CodeIgniter-3.1.13/assets/css/confirmation.css @@ -0,0 +1,56 @@ +/* Styles pour le formulaire de confirmation d'inscription */ + +/* Conteneur principal du formulaire */ +.confirmation-form { + max-width: 400px; + margin: 0 auto; + padding: 20px; + background-color: #f9f9f9; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +/* Style des étiquettes */ +.confirmation-form label { + display: block; + margin-bottom: 5px; + font-weight: bold; +} + +/* Style des champs de texte */ +.confirmation-form input[type="text"] { + width: 100%; + padding: 10px; + margin-bottom: 15px; + border: 1px solid #ccc; + border-radius: 5px; + box-sizing: border-box; +} + +/* Style des boutons */ +.confirmation-form button { + display: inline-block; + padding: 10px 20px; + background-color: #8400ff; + color: #fff; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 16px; +} + +.confirmation-form button:hover { + background-color: #6e00b3; +} + +/* Style des messages d'erreur */ +.confirmation-error { + color: #ff0000; + margin-top: -10px; + margin-bottom: 10px; + text-align: center; +} + +.confirmation-title { + text-align: center; +} \ No newline at end of file