From 9b611a7cc551cac405146aa0af5e998a99cb4f33 Mon Sep 17 00:00:00 2001 From: Emre KARTAL Date: Mon, 12 Dec 2022 15:28:32 +0100 Subject: [PATCH] Logout, user profile page and deletion of their account have been done, also the generic front controller now works perfectly --- src/.htaccess | 5 +- src/config/Validation.php | 9 +++ src/config/config.php | 2 +- src/controller/CtrlUtilisateur.php | 48 ++++++++++-- src/controller/CtrlVisiteur.php | 59 +++++++------- src/controller/FrontControleur.php | 53 +++++++------ src/modele/MdlUtilisateur.php | 34 +++++++- src/modele/gateway/UtilisateurGateway.php | 10 +-- src/vue/html/NavBar.php | 8 +- src/vue/html/erreur.php | 6 +- src/vue/html/profil.php | 95 +++++++++++++++++++++++ 11 files changed, 256 insertions(+), 73 deletions(-) create mode 100644 src/vue/html/profil.php diff --git a/src/.htaccess b/src/.htaccess index c73690a..94a2b2f 100644 --- a/src/.htaccess +++ b/src/.htaccess @@ -12,4 +12,7 @@ RewriteEngine On RewriteRule ^login$ index.php?action=redirectionLogin [L] RewriteRule ^inscription$ index.php?action=redirectionInscription [L] -RewriteRule ^VueListePublic$ index.php?action=redirectionListePublic [L] \ No newline at end of file +RewriteRule ^VueListePublic$ index.php?action=redirectionListePublic [L] +RewriteRule ^logout$ index.php?action=logout [L] +RewriteRule ^MonProfil$ index.php?action=redirectionProfil [L] +RewriteRule ^supprimerCompte$ index.php?action=supprimerCompte [L] \ No newline at end of file diff --git a/src/config/Validation.php b/src/config/Validation.php index e79c088..5e9da10 100755 --- a/src/config/Validation.php +++ b/src/config/Validation.php @@ -62,6 +62,15 @@ class Validation { return $str; } + static function cleanMail(string &$str) { + $str = preg_replace('/[^A-Za-z\-\^0-9\.\@]/', '', $str); + if($str == null || $str == '') + { + return null; + } + return $str; + } + static function val_mail(string &$mail) { if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { diff --git a/src/config/config.php b/src/config/config.php index 97db9eb..2001310 100755 --- a/src/config/config.php +++ b/src/config/config.php @@ -14,6 +14,6 @@ $vues['inscription']='vue/html/inscription.php'; $vues['listPublic']='vue/html/PageListePublic.php'; $vues['login']='vue/html/login.php'; $vues['NavBar']='vue/html/NavBar.php'; - +$vues['profil']='vue/html/profil.php'; ?> diff --git a/src/controller/CtrlUtilisateur.php b/src/controller/CtrlUtilisateur.php index d50bfdb..9db8492 100644 --- a/src/controller/CtrlUtilisateur.php +++ b/src/controller/CtrlUtilisateur.php @@ -6,7 +6,7 @@ class CtrlUtilisateur { global $rep,$vues; - $dVueEreur = array (); + $dVueErreur = array (); try{ $action=NULL; @@ -18,14 +18,23 @@ class CtrlUtilisateur { case NULL: - $this->($dVueEreur); + $this->ConsulterListePublic($dVueErreur); break; - + case "logout": + $this->SeDeconnecter($dVueErreur); + break; + + case "redirectionProfil": + $this->redirectionProfil($dVueErreur); + break; + + case "supprimerCompte": + $this->supprimerCompte($dVueErreur); + break; - default: - $dVueEreur[] = "Erreur d'appel php"; + $dVueErreur[] = "Erreur d'appel php"; require ($rep.$vues['home']); break; } @@ -48,6 +57,35 @@ class CtrlUtilisateur { exit(0); }//fin constructeur + function ConsulterListePublic(array $dVueErreur) { + global $rep,$vues; + $listes = MdlVisiteur::RecupererListePublic(); + $taches = MdlVisiteur::RecupererTache(); + $action=NULL; + require ($rep.$vues['listPublic']); + } + + function SeDeconnecter(array $dVueErreur){ + global $rep,$vues; + MdlUtilisateur::déconnexion(); + $action=NULL; + require ($rep.$vues['login']); + } + + function redirectionProfil(array $dVueErreur){ + global $rep,$vues; + $action=NULL; + $user=MdlUtilisateur::isConnected(); + require ($rep.$vues['profil']); + } + + function supprimerCompte(array $dVueErreur){ + global $rep,$vues; + $action=NULL; + $user=MdlUtilisateur::suppressionUtilisateur(); + require ($rep.$vues['login']); + } + }//fin class ?> diff --git a/src/controller/CtrlVisiteur.php b/src/controller/CtrlVisiteur.php index e9a6c19..aea80f7 100644 --- a/src/controller/CtrlVisiteur.php +++ b/src/controller/CtrlVisiteur.php @@ -6,7 +6,7 @@ class CtrlVisiteur { global $rep,$vues; - $dVueEreur = array (); + $dVueErreur = array (); try{ $action=NULL; @@ -18,54 +18,54 @@ class CtrlVisiteur { //pas d'action, on réinitialise 1er appel case NULL: - $this->ConsulterListePublic($dVueEreur); + $this->ConsulterListePublic($dVueErreur); break; case "validationFormulaire": - $this->ValidationFormulaire($dVueEreur); + $this->ValidationFormulaire($dVueErreur); break; case "seConnecter": - $this->seConnecter($dVueEreur); + $this->seConnecter($dVueErreur); break; case "redirectionListePublic": - $this->ConsulterListePublic($dVueEreur); + $this->ConsulterListePublic($dVueErreur); break; case "redirectionLogin": - $this->redirectionLogin($dVueEreur); + $this->redirectionLogin($dVueErreur); break; case "redirectionInscription": - $this->redirectionInscription($dVueEreur); + $this->redirectionInscription($dVueErreur); break; case "SupprimerTache": - $this->SupprimerTache(); + $this->SupprimerTache($dVueErreur); break; case "SupprimerListe": - $this->SupprimerListe(); + $this->SupprimerListe($dVueErreur); break; //mauvaise action default: - $dVueEreur[] = "Erreur d'appel php"; - require ($rep.$vues['home']); + $dVueErreur[] = "Erreur d'appel php"; + require ($rep.$vues['erreur']); break; } } catch (PDOException $e) { //si erreur BD, pas le cas ici - $dVueEreur[] = "Erreur: Connexion a la base de données impossible! "; + $dVueErreur[] = "Erreur: Connexion a la base de données impossible! "; require ($rep.$vues['erreur']); } catch (Exception $e) { - $dVueEreur[] = "Erreur venue de nulle part"; + $dVueErreur[] = "Erreur venue de nulle part"; require ($rep.$vues['erreur']); } @@ -74,34 +74,37 @@ class CtrlVisiteur { exit(0); }//fin constructeur - function ValidationFormulaire(array $dVueEreur) { + function ValidationFormulaire(array $dVueErreur) { global $rep,$vues; - $val = MdlVisiteur::CreerUtilisateur(); - if($val==null){ - $this->redirectionInscription($dVueEreur); - }else { + + try{ + $val = MdlVisiteur::CreerUtilisateur(); + $result=MdlUtilisateur::Connection(); $action=NULL; - $this->redirectionLogin($dVueEreur); + $this->ConsulterListePublic($dVueErreur); + } + catch (Exception $e) + { + require ($rep.$vues['inscription']); } - } - function redirectionLogin(array $dVueEreur) { + function redirectionLogin(array $dVueErreur) { global $rep,$vues; require ($rep.$vues['login']); } - function redirectionInscription(array $dVueEreur) { + function redirectionInscription(array $dVueErreur) { global $rep,$vues; require ($rep.$vues['inscription']); } - function seConnecter(array $dVueEreur) { + function seConnecter(array $dVueErreur) { global $rep,$vues; try{ $result=MdlUtilisateur::Connection(); $action=NULL; - $this->ConsulterListePublic($dVueEreur); + $this->ConsulterListePublic($dVueErreur); } catch (Exception $e) { @@ -111,7 +114,7 @@ class CtrlVisiteur { } - function ConsulterListePublic(array $dVueEreur) { + function ConsulterListePublic(array $dVueErreur) { global $rep,$vues; $listes = MdlVisiteur::RecupererListePublic(); $taches = MdlVisiteur::RecupererTache(); @@ -119,7 +122,7 @@ class CtrlVisiteur { require ($rep.$vues['listPublic']); } - function SupprimerTache(){ + function SupprimerTache(array $dVueErreur){ global $rep,$vues; $tache = MdlVisiteur::SupprimerTache(); $listes = MdlVisiteur::RecupererListePublic(); @@ -129,7 +132,7 @@ class CtrlVisiteur { } - function SupprimerListe(){ + function SupprimerListe(array $dVueErreur){ global $rep,$vues; $liste = MdlVisiteur::SupprimerListe(); $listes = MdlVisiteur::RecupererListePublic(); @@ -138,6 +141,8 @@ class CtrlVisiteur { require ($rep.$vues['listPublic']); } + }//fin class ?> + diff --git a/src/controller/FrontControleur.php b/src/controller/FrontControleur.php index ffd4492..31a8138 100644 --- a/src/controller/FrontControleur.php +++ b/src/controller/FrontControleur.php @@ -4,38 +4,43 @@ class FrontControleur { function __construct(){ session_start(); try { - // $string_actor=' '; - // $listeActions=array( - // 'Utilisateur' => array('fqds','fdqs'), - // 'Admin' => array() - // ); + global $rep,$vues; + $string_actor=' '; + $listeActions=array( + 'Utilisateur' => array('logout','redirectionProfil','supprimerCompte'), + 'Admin' => array() + ); - // //On récupère l'action - // $action=$_REQUEST['action']; - - // //On vérifie si l'action fait partie des listes d'actions - // $string_actor=quelListe($action,$listeActions); - // if($string_actor!=NULL){ - // $mdl=new mdl.$string_actor; - // $actor=$mdl.isMdl; - // if($actor==NULL){ - // require('login'.$string_actor); - // } - // else{ - // $ctrl=new Ctrl.$string_actor ; + //On récupère l'action + $action=NULL; + if(isset($_REQUEST['action'])){ + $action = $_REQUEST["action"]; + } - // } - // } - // else - new CtrlVisiteur(); + //On vérifie si l'action fait partie des listes d'actions + $string_actor=FrontControleur::quelListe($action,$listeActions); + if($string_actor!=NULL){ + $class= 'Mdl'.$string_actor; + $mdl=new $class(); + $actor=$mdl->isConnected(); + if($actor==NULL){ + require($rep.$vues['login']); + } + else{ + $ctrl='Ctrl'.$string_actor; + new $ctrl(); + } + } + else + new CtrlVisiteur(); } catch (Exception $e) { $dVueEreur[] = "Erreur inattendue!!! "; require ($rep.$vues['erreur']); } } - + public static function quelListe($action,$listeActions){ foreach($listeActions as $a){ if(in_array($action, $a)){ @@ -46,4 +51,4 @@ class FrontControleur { } } -?> +?> \ No newline at end of file diff --git a/src/modele/MdlUtilisateur.php b/src/modele/MdlUtilisateur.php index e314da2..528c794 100644 --- a/src/modele/MdlUtilisateur.php +++ b/src/modele/MdlUtilisateur.php @@ -9,12 +9,12 @@ class MdlUtilisateur public function connection(){ $gtw=new UtilisateurGateway(); - $mail=Validation::cleanString($_POST['mail']); - $mdp=Validation::cleanString($_POST['password']); + $mail=Validation::cleanMail($_POST['mail']); + $mdp=$_POST['password']; $verif_pass=$gtw->getCredentials($mail); if(password_verify($mdp,$verif_pass)){ $userCurrent=$gtw->RechercheUtilisateurViaEmail($mail); - $_SESSION['role']='user'; + $_SESSION['role']='user'; $_SESSION['id']=$userCurrent->getId(); $_SESSION['nom']=$userCurrent->getNom(); $_SESSION['prenom']=$userCurrent->getPrenom(); @@ -23,7 +23,33 @@ class MdlUtilisateur return $userCurrent; } else throw new Exception('Mot de passe incorrect*'); - } + } + + public function isConnected(){ + if(isset($_SESSION['id']) && isset($_SESSION['role'])) { + $id=Validation::cleanInt($_SESSION['id']); + $nom=Validation::cleanString($_SESSION['nom']); + $prenom=Validation::cleanString($_SESSION['prenom']); + $pseudo=Validation::cleanString($_SESSION['pseudo']); + $email=Validation::cleanMail($_SESSION['email']); + return new Utilisateur($id,$nom,$prenom,$pseudo,$email); + } + else return null; + } + + + public static function déconnexion(){ + session_unset(); + session_destroy(); + $_SESSION = array(); + } + + public function suppressionUtilisateur(){ + $userGtw = new UtilisateurGateway(); + $id=Validation::cleanInt($_SESSION['id']); + $userGtw->SupprimerUtilisateur(intval($id)); + MdlUtilisateur::déconnexion(); + } public static function RecupererListePublic(){ $userGtw = new ListeGateway(); diff --git a/src/modele/gateway/UtilisateurGateway.php b/src/modele/gateway/UtilisateurGateway.php index 42dd98b..af2a420 100644 --- a/src/modele/gateway/UtilisateurGateway.php +++ b/src/modele/gateway/UtilisateurGateway.php @@ -8,7 +8,7 @@ class UtilisateurGateway{ } public function AjouterUtilisateur(string $nom,string $prenom, string $pseudo, string $email, string $mdp){ - $query='INSERT INTO ToDoList_Utilisateur(nom,prenom,pseudo,email,motDePasse) values (:nom,:prenom,:pseudo,:email,:mdp);'; + $query="INSERT INTO ToDoList_Utilisateur(nom,prenom,pseudo,email,motDePasse) values (:nom,:prenom,:pseudo,:email,:mdp)"; $this->con->executeQuery($query, array( 'nom' => array($nom, PDO::PARAM_STR), 'prenom' => array($prenom, PDO::PARAM_STR), @@ -18,9 +18,9 @@ class UtilisateurGateway{ } public function SupprimerUtilisateur(int $id){ - $query='DELETE FROM ToDoList_Utilisateur WHERE id=:id;'; + $query="DELETE FROM ToDoList_Utilisateur WHERE id=:id"; $this->con->executeQuery($query, array( - 'id' => array($id, PDO::PARAM_INT))); + 'id' => array($id, PDO::PARAM_STR))); } public function getCredentials(string $mail){ @@ -37,7 +37,7 @@ class UtilisateurGateway{ public function RechercheUtilisateurViaEmail(string $mail){ $query = 'SELECT * FROM ToDoList_Utilisateur WHERE email=:mail'; - $this->con->executeQuery($query, array('mail' => array($mail, PDO::PARAM_INT))); + $this->con->executeQuery($query, array('mail' => array($mail, PDO::PARAM_STR))); $results=$this->con->getResults(); if($results!=null){ return new Utilisateur($results[0]['id'],$results[0]['nom'],$results[0]['prenom'],$results[0]['pseudo'],$results[0]['email']); @@ -46,4 +46,4 @@ class UtilisateurGateway{ } } } -?> \ No newline at end of file +?> diff --git a/src/vue/html/NavBar.php b/src/vue/html/NavBar.php index f61673e..4848b29 100644 --- a/src/vue/html/NavBar.php +++ b/src/vue/html/NavBar.php @@ -18,9 +18,11 @@