Changer le regex, et ranger les fonctions.php

This commit is contained in:
Bess1k 2026-02-24 13:01:13 +01:00 committed by GitHub
parent 1648e2bf46
commit e7830a516a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -8,62 +8,14 @@
class UserCtrl extends MotherCtrl { class UserCtrl extends MotherCtrl {
public function login(){ /**
* Fonction d'inscription d'un utilisateur
$strMail = $_POST['user_mail']??""; * Effectue les validations du formulaire,
$strPwd = $_POST['user_password']??""; * vérifie l'unicité du mail et du pseudo,
* puis insère l'utilisateur en base de données
// Tester le formulaire * @return void
$arrError = []; */
if (count($_POST) > 0) { public function signup(){
// Vérifier le formulaire
if ($strMail == ""){
$arrError['mail'] = "Le mail est obligatoire";
}
if ($strPwd == ""){
$arrError['pwd'] = "Le mot de passe est obligatoire";
}
// Si le formulaire est rempli correctement
if (count($arrError) == 0){
// Vérifier l'utilisateur en BDD
$objUserModel = new UserModel;
$arrResult = $objUserModel->verifUser($strMail, $strPwd);
//var_dump($arrResult);
if ($arrResult === false){ // Si la base de données ne renvoie rien
$arrError[] = "Mail ou mot de passe invalide";
}else{
// Ajoute l'utilisateur en session
$_SESSION['user'] = $arrResult;
$_SESSION['success'] = "Bienvenue, vous êtes bien connecté";
header("Location:index.php");
exit;
}
}
}
$this->_arrData['arrError'] = $arrError;
$this->_display("login");
}
public function logout(){
session_start();
/*session_destroy();
session_start();*/
// on supprime l'utilisateur en session
unset($_SESSION['user']);
$_SESSION['success'] = "Vous êtes bien déconnecté";
header("Location:index.php");
exit;
}
public function signin(){
// Entité pour réafficher les valeurs dans le formulaire // Entité pour réafficher les valeurs dans le formulaire
$objUser = new User(); $objUser = new User();
@ -101,33 +53,40 @@ class UserCtrl extends MotherCtrl {
} }
if (trim($objUser->getMail()) === "") { if (trim($objUser->getMail()) === "") {
$arrError['user_mail'] = "Le mail est obligatoire"; $arrError['user_mail'] = "L'adresse e-mail est obligatoire";
} elseif (!filter_var($objUser->getMail(), FILTER_VALIDATE_EMAIL)) { } elseif (!filter_var($objUser->getMail(), FILTER_VALIDATE_EMAIL)) {
$arrError['user_mail'] = "Le format du mail n'est pas correct"; $arrError['user_mail'] = "Le format de l'adresse e-mail est invalide";
} }
if (trim($objUser->getPseudo()) === "") { if (trim($objUser->getPseudo()) === "") {
$arrError['user_pseudo'] = "Le pseudo est obligatoire"; $arrError['user_pseudo'] = "Le pseudo est obligatoire";
} }
$strRegex = "/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{16,}$/"; $strRegex = "/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{15,}$/";
if ($objUser->getPwd() == ""){ if ($objUser->getPwd() == ""){
$arrError['user_password'] = "Le mot de passe est obligatoire"; $arrError['user_password'] = "Le mot de passe est obligatoire";
}else if (!preg_match($strRegex, $objUser->getPwd())){ }else if (!preg_match($strRegex, $objUser->getPwd())){
$arrError['user_password'] = "Le mot de passe ne correspond pas aux règles"; $arrError['user_password'] = "Le mot de passe ne respecte pas les critères";
}else if($objUser->getPwd() != $strPwdConfirm){ }else if($objUser->getPwd() != $strPwdConfirm){
$arrError['pwd_confirm'] = "Le mot de passe et sa confirmation ne sont pas identiques"; $arrError['pwd_confirm'] = "La confirmation du mot de passe ne correspond pas";
} }
// Si pas d'erreurs => insertion // Si pas d'erreurs => insertion
if (count($arrError) === 0) { if (count($arrError) === 0) {
$objUserModel = new UserModel(); $objUserModel = new UserModel();
// Vérif mail
if ($objUserModel->mailExists($objUser->getMail())) { if ($objUserModel->mailExists($objUser->getMail())) {
$arrError['user_mail'] = "Impossible de créer le compte avec ces informations";
}
$arrError['user_mail'] = "Ce mail existe déjà"; // Vérif pseudo
} else { if ($objUserModel->pseudoExists($objUser->getPseudo())) {
$arrError['user_pseudo'] = "Ce pseudo existe déjà";
}
// Si aucune erreur => insert
if (count($arrError) === 0) {
$boolInsert = $objUserModel->insert($objUser); $boolInsert = $objUserModel->insert($objUser);
if ($boolInsert === true) { if ($boolInsert === true) {
@ -142,16 +101,80 @@ class UserCtrl extends MotherCtrl {
} }
// Affichage de la vue inscription // Affichage de la vue inscription
$this->_arrData["arrError"] = $arrError; $this->_arrData['objUser'] = $objUser;
$this->_display("inscription"); $this->_arrData['arrError'] = $arrError;
$this->_display("signup");
} }
/**
* Fonction de connexion d'un utilisateur
* Vérifie les informations envoyées par le formulaire
* et crée la session si les identifiants sont valides
* @return void
*/
public function login(){
$strMail = $_POST['user_mail']??"";
$strPwd = $_POST['user_password']??"";
// Tester le formulaire
$arrError = [];
if (count($_POST) > 0) {
// Vérifier le formulaire
if ($strMail == ""){
$arrError['mail'] = "L'adresse e-mail est obligatoire";
}
if ($strPwd == ""){
$arrError['pwd'] = "Le mot de passe est obligatoire";
}
// Si le formulaire est rempli correctement
if (count($arrError) == 0){
// Vérifier l'utilisateur en BDD
$objUserModel = new UserModel;
$arrResult = $objUserModel->verifUser($strMail, $strPwd);
//var_dump($arrResult);
if ($arrResult === false){ // Si la base de données ne renvoie rien
$arrError[] = "Identifiants incorrects";
}else{
// Ajoute l'utilisateur en session
$_SESSION['user'] = $arrResult;
$_SESSION['success'] = "Bienvenue, vous êtes bien connecté";
header("Location:index.php");
exit;
}
}
}
$this->_arrData['arrError'] = $arrError;
$this->_display("login");
}
public function logout(){
session_start();
/*session_destroy();
session_start();*/
// on supprime l'utilisateur en session
unset($_SESSION['user']);
$_SESSION['success'] = "Vous êtes bien déconnecté";
header("Location:index.php");
exit;
}
/** /**
* le controlleur affichage de la page user * le controlleur affichage de la page user
*/ */
public function user(){ public function user(){
$intId = isset($_GET['id']) ? (int)$_GET['id'] : 0; /**$intId = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($intId <= 0) { if ($intId <= 0) {
header("Location: index.php"); header("Location: index.php");
@ -162,16 +185,27 @@ class UserCtrl extends MotherCtrl {
$objUserModel = new UserModel; $objUserModel = new UserModel;
$arrUserData = $objUserModel->findUserById($intId); $arrUserData = $objUserModel->findUserById($intId);
if ($arrUserData === false) {
header("Location: index.php");
exit;
}*/
$strPseudo = $_GET['pseudo']??'';
$objUserModel = new UserModel;
$arrUserData = $objUserModel->findUserByPseudo($strPseudo);
if ($arrUserData === false) { if ($arrUserData === false) {
header("Location: index.php"); header("Location: index.php");
exit; exit;
} }
$objUser = new User; $objUser = new User;
$objUser->hydrate($arrUserData); $objUser->hydrate($arrUserData);
//affichage projet de l'utilisateur //affichage projet de l'utilisateur
$objProjectModel = new ProjectModel; $objProjectModel = new ProjectModel;
$arrProjects = $objProjectModel->findAll(0,'',$intId); $arrProjects = $objProjectModel->findAll(0,'',$objUser->getId());
$arrProjectToDisplay = array(); $arrProjectToDisplay = array();
foreach($arrProjects as $projectData) { foreach($arrProjects as $projectData) {
@ -185,4 +219,118 @@ class UserCtrl extends MotherCtrl {
$this->_display("user"); $this->_display("user");
} }
public function edit(){
if(!isset($_SESSION['user'])){
header("Location: index.php");
exit;
}
$objUserModel = new UserModel;
$arrError = [];
$objUser = new User;
$arrUserData = $objUserModel->findUserById($_SESSION['user']['user_id']);
$objUser->hydrate($arrUserData);
if (!empty($_POST)) {
if ($objUserModel->mailExists($_POST['user_mail']) && ($_POST['user_mail'] != $objUser->getMail())) {
$arrError['user_mail'] = "Ce mail est déjà associé";
} else {
if ($objUserModel->pseudoExists($_POST['user_pseudo']) && ($_POST['user_pseudo'] != $objUser->getPseudo())){
$arrError['user_pseudo'] = "Ce pseudo est déjà utiliser";
}else{
$objUser->hydrate($_POST);
$objUser->setId($_SESSION['user']['user_id']);
// Vérification de l'image
$arrTypeAllowed = array('image/jpeg', 'image/png', 'image/webp');
$boolImageOk = true;
if ($_FILES['image']['error'] != 4) {
if (!in_array($_FILES['image']['type'], $arrTypeAllowed)) {
$arrError['image'] = "Le type de fichier n'est pas autorisé";
} else {
switch ($_FILES['image']['error']) {
case 0:
$strImageName = uniqid() . ".webp";
$strOldImg = $objUser->getImage();
$objUser->setImage($strImageName);
break;
case 1:
case 2:
$arrError['image'] = "Le fichier est trop volumineux";
break;
case 3:
$arrError['image'] = "Le fichier a été partiellement téléchargé";
break;
case 6:
$arrError['image'] = "Le répertoire temporaire est manquant";
break;
default:
$arrError['image'] = "Erreur sur l'image";
break;
}
}
}
// Traitement de l'image si pas d'erreur
if (count($arrError) == 0 && isset($strImageName)) {
$strDest = $_ENV['IMG_USER_PATH'] . $strImageName;
$strSource = $_FILES['image']['tmp_name'];
list($intWidth, $intHeight) = getimagesize($strSource);
$intDestWidth = 200; $intDestHeight = 200;
$fltDestRatio = $intDestWidth / $intDestHeight;
$fltSourceRatio = $intWidth / $intHeight;
if ($fltSourceRatio > $fltDestRatio) {
$intCropHeight = $intHeight;
$intCropWidth = (int)round($intHeight * $fltDestRatio);
$intCropX = (int)(($intWidth - $intCropWidth) / 2);
$intCropY = 0;
} else {
$intCropWidth = $intWidth;
$intCropHeight = (int)round($intWidth / $fltDestRatio);
$intCropX = 0;
$intCropY = (int)(($intHeight - $intCropHeight) / 2);
}
$objDest = imagecreatetruecolor($intDestWidth, $intDestHeight);
switch ($_FILES['image']['type']) {
case 'image/jpeg': $objSource = imagecreatefromjpeg($strSource); break;
case 'image/png': $objSource = imagecreatefrompng($strSource); break;
case 'image/webp': $objSource = imagecreatefromwebp($strSource); break;
}
imagecopyresampled($objDest, $objSource, 0, 0, $intCropX, $intCropY, $intDestWidth, $intDestHeight, $intCropWidth, $intCropHeight);
$boolImageOk = imagewebp($objDest, $strDest);
imagedestroy($objDest);
imagedestroy($objSource);
}
$boolInsert = $objUserModel->update($objUser);
if ($boolInsert === true) {
if (isset($strOldImg) && !empty($strOldImg) && isset($strImageName)) {
$strOldFile = $_ENV['IMG_USER_PATH'] . $strOldImg;
if (file_exists($strOldFile)) unlink($strOldFile);
}
$arrNewInfo = $objUserModel->findUserByPseudo($objUser->getPseudo());
$_SESSION['user'] = $arrNewInfo;
$_SESSION['success'] = "Compte modifier avec succès";
header("Location:?ctrl=user&action=user&pseudo=".$objUser->getPseudo());
exit;
} else {
$arrError['global'] = "Erreur lors de l'update";
}
}
}
}
$this->_arrData["arrError"] = $arrError;
$this->_arrData['objUser'] = $objUser;
$this->_display("useredit");
}
} }