From 9ffb2a0636a7de287a20b185be5698a52dfc15ed Mon Sep 17 00:00:00 2001 From: beaulaton Date: Tue, 3 Dec 2024 09:17:35 +0100 Subject: [PATCH] Modif info user sur page profil --- src/Controleur/FrontControler.php | 5 ++- src/Controleur/UserControler.php | 45 ++++++++++++++++++++- src/Gateway/UserGateway.php | 61 ++++++++++++++++++++-------- src/Model/UserModel.php | 67 ++++++++++++++++++++++--------- 4 files changed, 141 insertions(+), 37 deletions(-) diff --git a/src/Controleur/FrontControler.php b/src/Controleur/FrontControler.php index 42fae8d..cfd061a 100644 --- a/src/Controleur/FrontControler.php +++ b/src/Controleur/FrontControler.php @@ -13,7 +13,7 @@ Class FrontControler{ global $twig,$racine; $this->listAction = ['visitor' => array('accueil','search','quote','login','signin','validlogin','validsignin'), - 'user' => array('quiz','commentary','logout','addComment','favorite','profil','addFav','supFav'), + 'user' => array('quiz','commentary','logout','addComment','favorite','profil','addFav','supFav','changedata'), 'admin' => array('null')]; $dVueEreur = []; @@ -44,9 +44,10 @@ Class FrontControler{ $router->map('GET|POST', '/unlog', 'UserControler','unlog'); $router->map('GET|POST', '/signin', 'VisitorControler','signin'); $router->map('GET|POST', '/validlogin', 'VisitorControler','validlogin'); - $router->map('GET|POST', '/validsignin', 'VisitorControler','validsignin'); + $router->map('GET|POST', '/validsignin', 'VisitorControler','validsignin'); $router->map('GET|POST', '/addFav/[i:id]', 'UserControler','addFav'); $router->map('GET|POST', '/supFav/[i:id]', 'UserControler','supFav'); + $router->map('GET|POST', '/changedata', 'UserControler','changedata'); $match = $router->match(); diff --git a/src/Controleur/UserControler.php b/src/Controleur/UserControler.php index 6f2fdf9..53269f6 100644 --- a/src/Controleur/UserControler.php +++ b/src/Controleur/UserControler.php @@ -41,7 +41,7 @@ class UserControler { public function profil() { global $vues; - $p = $this->uMod->getUsername(Verification::verifChar($_SESSION["user"])); + $p = $this->uMod->getUsername($_SESSION["user"]); require_once $vues['profil']; } @@ -212,4 +212,47 @@ class UserControler { $this->uMod->supFavorite(Verification::verifChar($_SESSION["user"]),$id); header("Location:". $racine ."/quote/$id"); } + + public function changedata() : void + { + global $vues; + if ($_POST) + { + $newPseudo = $_POST['pseudo'] ?? null; + $newEmail = $_POST['email'] ?? null; + $newMdpFirst = $_POST['passwdFirst'] ?? null; + $newMdpSecond = $_POST['passwdSecond'] ?? null; + + + + //Modif le pseudo + if($newPseudo){ + $user = $this-> uMod->setUsername($_SESSION['user'], $newPseudo); + if($user == $newPseudo){ //Si le pseudo existe déjà + $_SESSION['user'] = $newPseudo; + } + + } + + + + else if($newEmail){ + $user = $this-> uMod->setEmail($_SESSION['user'], $newEmail); + } + + + else if($newMdpFirst && $newMdpSecond){ + + if($newMdpFirst == $newMdpSecond){ + + $option = ['cost' => 12]; + $newPassWd = password_hash($newMdpFirst, PASSWORD_BCRYPT, $option); + $user = $this-> uMod->setPassWd($_SESSION['user'], $newPassWd); + } + } + + } + header("Location: /~lebeaulato/WF-Website/profil"); + + } } diff --git a/src/Gateway/UserGateway.php b/src/Gateway/UserGateway.php index a211518..38d55c1 100644 --- a/src/Gateway/UserGateway.php +++ b/src/Gateway/UserGateway.php @@ -89,33 +89,57 @@ Class UserGateway extends Gateway{ return $this->co->getResults(); } + public function IsExisteUsername(string $username): bool { + $query = 'SELECT COUNT(*) as count FROM Users WHERE username = :username'; + $this->co->executeQuery($query, array(':username' => array($username, PDO::PARAM_STR))); + $results = $this->co->getResults(); + + return $results[0]['count'] > 0; // retourne true si "count" > 0) + } + + public function IsExisteEmail(string $email): bool { + $query = 'SELECT COUNT(*) as count FROM Users WHERE email = :email'; + $this->co->executeQuery($query, array(':email' => array($email, PDO::PARAM_STR))); + $results = $this->co->getResults(); + + return $results[0]['count'] > 0; // retourne true si "count" > 0) + } + // ===================== UPDATE FUNCTION ===================== - public function updateUsername(int $id, string $newUsername):bool{ + //Update Username + public function updateUsername(string $username, string $newUsername):array{ //Update le nom du user passé en paramètre - $queryUpdate = 'UPDATE Users SET username=:newUsername WHERE id_user=:idUser'; - $this->co->executeQuery($queryUpdate, array(':idUser'=>array($id, PDO::PARAM_STR), ':newUsername'=> array($newUsername, PDO::PARAM_STR))); + $queryUpdate = 'UPDATE Users SET username=:newUsername WHERE username=:username'; + $this->co->executeQuery($queryUpdate, array(':username'=>array($username, PDO::PARAM_STR), ':newUsername'=> array($newUsername, PDO::PARAM_STR))); //Renvoie le nouveau nom du user - $queryReponse = 'SELECT username FROM Users WHERE id_user=:idUser'; + $queryReponse = 'SELECT username FROM Users WHERE username=:idUser'; - return $this->co->executeQuery($queryReponse, array($id=>array($newUsername, PDO::PARAM_STR))); + $this->co->executeQuery($queryReponse, array(':idUser'=>array($newUsername, PDO::PARAM_STR))); + return $this->co->getResults(); } - public function updateEmail(int $id, string $newEmail):bool{ + + //Update Email + public function updateEmail(string $username, string $newEmail):array{ //Update le email du user passé en paramètre - $queryUpdate = 'UPDATE Users SET email=:newEmail WHERE id_user=:idUser'; - $this->co->executeQuery($queryUpdate, array(':idUser'=>array($id, PDO::PARAM_STR), ':newEmail'=> array($newEmail, PDO::PARAM_STR))); + $queryUpdate = 'UPDATE Users SET email=:newEmail WHERE username=:username'; + $this->co->executeQuery($queryUpdate, array(':username'=>array($username, PDO::PARAM_STR), ':newEmail'=> array($newEmail, PDO::PARAM_STR))); //Renvoie le nouveau email du user - $queryReponse = 'SELECT email FROM Users WHERE id_user=:idUser'; - return $this->co->executeQuery($queryReponse, array(':idUser'=>array($id, PDO::PARAM_STR))); + $queryReponse = 'SELECT email FROM Users WHERE username=:username'; + + $this->co->executeQuery($queryReponse, array(':username'=>array($username, PDO::PARAM_STR))); + return $this->co->getResults(); } - public function updateImg(int $id, int $newImg):array{ + + + public function updateImg(string $username, int $newImg):array{ //Update l'image du user passé en paramètre - $query = 'UPDATE Users SET img_prfl=:newImg WHERE id_user=:idUser'; - $this->co->executeQuery($query, array(':idUser'=>array($id, PDO::PARAM_STR), ':newImg'=> array($newImg, PDO::PARAM_STR))); + $query = 'UPDATE Users SET img_prfl=:newImg WHERE username=:username'; + $this->co->executeQuery($query, array(':username'=>array($username, PDO::PARAM_STR), ':newImg'=> array($newImg, PDO::PARAM_STR))); //Renvoie la nouvelle image du user $queryReponse = 'SELECT img_prfl FROM Users WHERE id_user=:idUser'; @@ -124,12 +148,17 @@ Class UserGateway extends Gateway{ return $result; } - public function updatePasswd(int $id, string $newPassWd):array{ + + public function updatePasswd(string $username, string $newPassWd):void{ //Update le passwd du user passé en paramètre - $query = 'UPDATE Users SET pssword=:newPassWd WHERE id_user=:idUser'; - $this->co->executeQuery($query, array(':idUser'=>array($id, PDO::PARAM_STR), ':newPassWd'=> array($newPassWd, PDO::PARAM_STR))); + $query = 'UPDATE Users SET password=:newPassWd WHERE username=:username'; + $this->co->executeQuery($query, array(':username'=>array($username, PDO::PARAM_STR), ':newPassWd'=> array($newPassWd, PDO::PARAM_STR))); } + + + + public function getIdUser(string $username):array{ $query = 'SELECT id_user FROM Users WHERE username=:username'; $this->co->executeQuery($query, array(':username'=>array($username, PDO::PARAM_STR))); diff --git a/src/Model/UserModel.php b/src/Model/UserModel.php index 41cffc0..6e79cd4 100644 --- a/src/Model/UserModel.php +++ b/src/Model/UserModel.php @@ -76,39 +76,64 @@ return null; } - public function setUsername(int $id, string $newUsername){ - $res = $this->gateway->updateUsername($id,$newUsername); - $src[] = $res[0]['username']; + public function IsExisteUsername(string $username):bool{ + return $this->gateway->IsExisteUsername($username); + } - return $src; + public function IsExisteEmail(string $email):bool{ + return $this->gateway->IsExisteEmail($email); } - public function setEmail(int $id, string $newEmail){ - $res = $this->gateway->updateEmail($id,$newEmail); - $src[] = $res[0]['email']; - return $src; + public function setUsername(string $username, string $newUsername): string { + + if ($this->IsExisteUsername($newUsername)) {// Vérifier si le nouveau nom d'utilisateur existe déjà + return $username;// Retourne l'ancien nom d'utilisateur sans modification + } + + $res = $this->gateway->updateUsername($username, $newUsername);// Sinon, mettre à jour le nom d'utilisateur + + // Retourner le nouveau nom d'utilisateur après modification + if (!empty($res) && isset($res[0]['username'])) { + return $res[0]['username']; + } + + // En cas d'échec, retourne l'ancien nom d'utilisateur + return $username; } + - public function setImg(int $id, int $newImg){ - $res = $this->gateway->updateImg($id,$newImg); - $src[] = $res[0]['img']; - return $src; + + public function setEmail(string $username, string $newEmail){ + if ($this->IsExisteEmail($newEmail)) { + return $email; + } + + $res = $this->gateway->updateEmail($username,$newEmail); + + if (!empty($res) && isset($res[0]['email'])) { + return $res[0]['email']; + } + + return $username;// En cas d'échec, retourne l'ancien email } - public function setPassWd(int $id, string $newPassWd){ - $res = $this->gateway->updatePasswd($id,$newPassWd); - $src[] = $res[0]['pssword']; + + + public function setImg(string $username, int $newImg){ + $res = $this->gateway->updateImg($id,$newImg); + $src[] = $res[0]['img']; return $src; } - public function getIdByUsername(string $username){ - $res = $this->gateway->getIdUser($username); - return $res[0]['id_user']; + public function setPassWd(string $username, string $newPassWd):void{ + $res = $this->gateway->updatePasswd($username,$newPassWd); } + + public function isFavorite(?string $username, int $idq): bool { if($_SESSION["user"] == NULL){ return false; @@ -119,6 +144,7 @@ } } + public function addFavorite(string $username, int $id){ $this->gateway->addFavorite($username,$id); } @@ -126,6 +152,11 @@ public function supFavorite(string $username, int $id){ $this->gateway->supFavorite($username,$id); } + + public function getIdByUsername(string $username){ + $res = $this->gateway->getIdUser($username); + return $res[0]['id_user']; + } } ?>