check_exist_email($email); // Si non if (!$exist) { // Chiffrement du pass $crypt = $this->crypt_pass($pass); // Préparation de la requète $reqAddUser = " INSERT INTO ".$this->tableUserAccount." (email, password, inscriptionDate, userStatus) VALUES (?, ?, ?, ?)"; // Execution de la requète $this->exec_cmd($reqAddUser, array($email, $crypt, date("Y-m-d H:i:s"), $userStatus ) ); // Retourne 1 pour réussite return 1; } else { // Retourne 0 pour échec return 0; } } // Vérification de la combinaison email - pass pour authentification final public function check_user_credential($email, $pass) { // Préparation de la requète pour récupérer les infos ou l'email est présent $reqCheckCredential = " SELECT userId, password FROM ".$this->tableUserAccount." WHERE email = ? "; // Execution de la requète $result = $this->exec_cmd($reqCheckCredential, array($email))->fetchAll(PDO::FETCH_ASSOC); // Vérifiaction de correspondance email & pass foreach ($result as $rows) { if (password_verify($pass, $rows["password"])) { return $rows["userId"]; } } } // Mise à jour des infos d'un utilisateur final public function update_user_infos($userInfos, $userId, $isPro, $userJobs = null) { // Préparation de la requète pour mise à jour des infos // J'ai préféré faire deux requètes distinctes et ne pas utiliser des valeurs // passées par $POST ($key => $value) pour gérer les noms des colonnes // car je préfère les passer en "dur" dans mes requêtes (risque d'injection SQL?). $reqAddInfoClient = " REPLACE INTO ".$this->tableUserInfo." (lastname, firstname, phoneNumber, adress, zipCode, city, userId) VALUES (?, ?, ?, ?, ?, ?, ?)"; $reqAddInfoPro = " REPLACE INTO ".$this->tableUserInfo." (lastname, firstname, phoneNumber, adress, zipCode, city, degree, capability, description, userId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $reqAddInfoProJobs = " INSERT INTO ".$this->tableUserJob." (jobCategoryId, userId) VALUES (?, ?)"; $reqRemoveInfoProJobs = " DELETE FROM ".$this->tableUserJob." WHERE jobCategoryId = ? AND userId = ?"; if (!$isPro) { // Exécution de la requète // https://www.php.net/manual/fr/function.array-values.php // Pour passer de "dict" a "list" -> array_values() $args = array_values($userInfos); array_push($args, $userId); $this->exec_cmd($reqAddInfoClient, $args); } else { // https://stackoverflow.com/questions/15986235/how-to-use-json-stringify-and-json-decode-properly // Récupération des emplois dans le JSON et supression de ces derniers de la liste $selectedJobs = json_decode(html_entity_decode($userInfos["jobs"])); unset($userInfos["jobs"]); // array_value -> Qu'est ce qui est présent dans 1 mais pas dans 2 ? // Comparaison des jobs anciennement présent avec ceux sélectionnés, donc ajoutés. $jobsAdded = array_values(array_diff($selectedJobs, $userJobs)); // Comparaison des jobs deja présent avec ceux sélectionnés, donc ajoutés. $jobsRemoved = array_values(array_diff($userJobs, $selectedJobs)); // on continue classiquement avec les autres éléments $args = array_values($userInfos); array_push($args, $userId); $this->exec_cmd($reqAddInfoPro, $args); for ($i = 0; $i < count($jobsAdded); $i++) { $this->exec_cmd($reqAddInfoProJobs, array($jobsAdded[$i], $userId)); } for ($i = 0; $i < count($jobsRemoved); $i++) { $this->exec_cmd($reqRemoveInfoProJobs, array($jobsRemoved[$i], $userId)); } } } // **************************************************************************** // GESTION DU TOKEN AUTOLOGIN // **************************************************************************** // Vérification de la combinaison email - jeton d'auto-login pour authentification final public function check_token_autologin($email, $token) { // Préparation de la requète pour récupérer les infos ou l'email est présent $reqCheckToken = " SELECT userId, tokenAutoLogin FROM ".$this->tableUserAccount." WHERE email = ?"; // Exécution de la requète $result = $this->exec_cmd($reqCheckToken, array($email))->fetchAll(PDO::FETCH_ASSOC); // Vérifiaction de correspondance email & jeton d'auto-connection foreach ($result as $rows) { if ($rows["tokenAutoLogin"] == $token) { return $rows["userId"]; } } } // Mise à jour du jeton d'auto-login final public function update_token_autologin($email, $token) { // Préparation de la requète pour mise à jour du jeton d'auto-connection $reqUpdateToken = " UPDATE ".$this->tableUserAccount." SET tokenAutoLogin = ? WHERE email = ?"; // Execution de la requète $this->exec_cmd($reqUpdateToken, array($token, $email))->fetchAll(PDO::FETCH_ASSOC); } // Supression du jeton d'auto-login final public function del_token_autologin($email) { // Préparation de la requète pour supression du jeton d'auto-connection $reqDeleteToken = " UPDATE ".$this->tableUserAccount." SET tokenAutoLogin = NULL WHERE email = ?"; // Execution de la requète $this->exec_cmd($reqDeleteToken, array($email))->fetchAll(PDO::FETCH_ASSOC); } } ?>