diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aafa768 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Thumbs.db \ No newline at end of file diff --git a/config/connexion_sql.php b/config/connexion_sql.php index 51ce3d2..852635d 100644 --- a/config/connexion_sql.php +++ b/config/connexion_sql.php @@ -2,7 +2,7 @@ // Connexion à la base de données try { - $bdd = new PDO('mysql:host=IP:3307;dbname=CARIA', 'user', 'mdp',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); + $bdd = new PDO('mysql:host=IP:3307;dbname=CARIA', 'USER', 'MDP',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } catch(Exception $e) { diff --git a/config/images/Thumbs.db b/config/images/Thumbs.db index 1a0e301..624941b 100644 Binary files a/config/images/Thumbs.db and b/config/images/Thumbs.db differ diff --git a/controleur/connexion.php b/controleur/connexion.php index db54195..f11bc60 100644 --- a/controleur/connexion.php +++ b/controleur/connexion.php @@ -5,20 +5,28 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $pseudoCo = $_POST['pseudo_connect'] ?? ''; $passwordCo = $_POST['password_connect'] ?? ''; - // Vérification des identifiants + // Vérification des identifiants en utilisant la méthode checkCredentials() $connexionModel = new Connexion(); - $userData = $connexionModel->check_Password($pseudoCo); + // Vérifier si l'utilisateur est bloqué + if ($connexionModel->isUserBlocked($pseudoCo)) { + // Afficher un message d'erreur indiquant que l'utilisateur est bloqué + require './vue/connexion.html'; + displayBlockedMessage(); + exit(); // Arrêter l'exécution du script + } + + $userData = $connexionModel->check_Password($pseudoCo); if ($userData && $connexionModel->checkCredentials($pseudoCo, $passwordCo)) { // Les identifiants sont corrects, connecter l'utilisateur - //require_once './vue/home.html'; - // displaySuccessMessage(); connectUser($userData); } else { + // Enregistrer une tentative de connexion infructueuse + $connexionModel->recordFailedLoginAttempt($pseudoCo); // Afficher un message d'erreur en cas de connexion échouée require './vue/connexion.html'; displayErrorMessage(); - } + } } // Fonction pour connecter l'utilisateur function connectUser($userData) { @@ -52,31 +60,27 @@ function displayErrorMessage() { }); '; } -// Fonction pour afficher un message de succès -function displaySuccessMessage() { +// Fonction pour afficher un message de bloquage +function displayBlockedMessage() { echo ''; } -?> \ No newline at end of file +?> diff --git a/controleur/gestion.php b/controleur/gestion.php index 4263727..548066c 100644 --- a/controleur/gestion.php +++ b/controleur/gestion.php @@ -1,64 +1,180 @@ getMessage()]); } +} +// Formulaire pour les nouveaux véhicules +if (!empty($_POST['plaque'])) { + try { + $plaque = $_POST['plaque']; + $marque = $_POST['marque']; + $modele = $_POST['modele']; + $annee = $_POST['annee']; + + // Validation des champs du formulaire + if (empty($plaque) || strlen($plaque) < 7 || strlen($plaque) > 9) { + $errors[] = "L'immatriculation doit comporter entre 7 et 9 caractères."; + } + + if (empty($marque) || strlen($marque) < 2 || strlen($marque) > 50) { + $errors[] = "La marque doit comporter entre 2 et 50 caractères."; + } + + if (empty($modele) || strlen($modele) < 2 || strlen($modele) > 50) { + $errors[] = "Le modèle doit comporter entre 2 et 50 caractères."; + } + + if (empty($annee) || !preg_match('/^\d{4}$/', $annee)) { + $errors[] = "L'année doit être un nombre de 4 chiffres."; + } + + if (!get_checkPlaque()) { + $errors[] = "Votre immatriculation est déjà utilisée par un véhicule."; + } + if (!empty($_FILES['image']['size'])) { - $extension_upload = strtolower(substr(strrchr($_FILES['image']['name'], '.'), 1)); + // Vérification de la taille maximale du fichier (par exemple, 5 Mo) + $maxFileSize = 5 * 1024 * 1024; // 5 Mo en octets + if ($_FILES['image']['size'] > $maxFileSize) { + $errors[] = "La taille de l'image dépasse la limite autorisée de 5 Mo."; + } + // Vérification de l'extension du fichier + $extensions_valides = array('jpg', 'jpeg', 'gif', 'png'); + $extension_upload = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION)); if (!in_array($extension_upload, $extensions_valides)) { - $i++; - $image_erreur3 = "Extension de l'image incorrecte"; + $errors[] = "Extension de l'image incorrecte. Seules les extensions JPG, JPEG, GIF et PNG sont autorisées."; + } + // Vérification du type MIME du fichier + $allowedMimeTypes = array('image/jpeg', 'image/png', 'image/gif'); + $fileMimeType = mime_content_type($_FILES['image']['tmp_name']); + if (!in_array($fileMimeType, $allowedMimeTypes)) { + $errors[] = "Type de fichier non pris en charge. Veuillez télécharger une image au format JPG, JPEG, GIF ou PNG."; } } - if ($i == 0) { - // Message de réussite - echo ' - '; - // Inclure à nouveau le formulaire pour permettre à l'utilisateur de ressaisir des valeurs - post_RegistreCar(); - header("Location: gestion.php"); // Redirigez vers la page appropriée après la suppression - exit(); - } else { - // Affichage des erreurs - $errorMessages = ''; - if ($plaque_erreur1) $errorMessages .= "$plaque_erreur1"; - if ($image_erreur3) $errorMessages .= "$image_erreur3"; - echo ' - '; + if (empty($errors)) { + // Enregistrement du véhicule + post_RegistreCar(); + require_once './vue/gestion.html'; + displayAddVehiculeSuccessMessage(); + exit(); + } else { + require_once './vue/gestion.html'; + displayAddVehiculeErrorMessage($errors); + } + } catch (Exception $e) { + // Afficher les messages d'erreur + require_once './vue/gestion.html'; + displayAddVehiculeErrorMessage(["Une erreur est survenue lors de l'enregistrement du véhicule."]); } } -require './vue/gestion.html'; +// Fonction pour afficher un message de succès +function displayDeleteVehiculeSuccessMessage() { + echo ''; +} +// Fonction pour afficher un message d'erreur +function displayAddVehiculeErrorMessage($errors) { + echo ''; +} +// Fonction pour afficher un message de succès +function displayAddVehiculeSuccessMessage() { + echo ''; +} +require_once './vue/gestion.html'; ?> \ No newline at end of file diff --git a/controleur/home.php b/controleur/home.php index 732c083..fd220c4 100644 --- a/controleur/home.php +++ b/controleur/home.php @@ -1,12 +1,8 @@ lastInsertId(); // Assurez-vous d'avoir accès à $bdd ici $_SESSION['privilege_session'] = 2; } + // Traitement de l'inscription if ($_SERVER['REQUEST_METHOD'] === 'POST') { $errors = []; - // On récupère les variables - $extensions_valides = array('jpg', 'jpeg', 'gif', 'png'); - $pseudo = $_POST['pseudo']; - $email = $_POST['email']; - $localisation = $_POST['localisation']; - $prenom = $_POST['prenom']; - $nom = $_POST['nom']; - $pass = md5($_POST['password']); - $confirm = md5($_POST['confirm']); - // Validation du pseudo - if (!isPseudoAvailable($pseudo)) { + // Validation de la taille et de la présence des champs + $nom = trim($_POST['nom']); + $prenom = trim($_POST['prenom']); + $pseudo = trim($_POST['pseudo']); + $email = trim($_POST['email']); + $password = $_POST['password']; + $confirm = $_POST['confirm']; + $localisation = trim($_POST['localisation']); + $phone = trim($_POST['phone']); + + if (empty($nom) || strlen($nom) < 3 || strlen($nom) > 25) { + $errors[] = "Le nom est requis et doit contenir entre 3 et 25 caractères."; + } + + if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 -]+$/', $nom)) { + $errors[] = "Le nom peut contenir uniquement des lettres, des chiffres, des tirets et des espaces."; + } + + if (preg_match('/^\s+$/', $nom)) { + $errors[] = "Le nom ne peut pas être composé uniquement d'espaces."; + } + + if (empty($prenom) || strlen($prenom) < 3 || strlen($prenom) > 25) { + $errors[] = "Le prénom est requis et doit contenir entre 3 et 25 caractères."; + } + + if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 -]+$/', $prenom)) { + $errors[] = "Le prénom peut contenir uniquement des lettres, des chiffres, des tirets et des espaces."; +} + + if (preg_match('/^\s+$/', $prenom)) { + $errors[] = "Le prénom ne peut pas être composé uniquement d'espaces."; + } + + if (empty($pseudo) || strlen($pseudo) < 3 || strlen($pseudo) > 25) { + $errors[] = "Le pseudo est requis et doit contenir entre 3 et 25 caractères."; + } + + if (!ctype_alnum($pseudo)) { + $errors[] = "Le pseudo ne doit contenir que des lettres alphabétiques ou des chiffres."; + } + + if (!get_checkPseudo($pseudo)) { $errors[] = "Votre pseudo est déjà utilisé par un membre."; } - // Validation du mot de passe - if ($pass !== $confirm || empty($confirm) || empty($pass)) { - $errors[] = "Votre mot de passe et la confirmation sont différents, ou sont vides."; + + if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { + $errors[] = "L'adresse e-mail est requise et doit être valide."; } - // Validation de l'email - if (!isEmailAvailable($email)) { + + if (!get_checkMail($email)) { $errors[] = "Votre adresse email est déjà utilisée par un membre."; } - // Validation de l'avatar s'il est uploadé + + if (empty($password) || strlen($password) < 6 || strlen($password) > 32) { + $errors[] = "Le mot de passe est requis et doit contenir entre 6 et 32 caractères."; + } + + if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&]).+$/', $password)) { + $errors[] = "Le mot de passe doit contenir au moins une lettre, un chiffre et un caractère spécial (@$!%*?&)"; + } + + if ($password !== $confirm) { + $errors[] = "Les mots de passe ne correspondent pas."; + } + + // Gestion des espaces vides pour le numéro de téléphone + if (empty($phone) || strlen($phone) < 10 || strlen($phone) > 15) { + $errors[] = "Le numéro de téléphone est requis et doit contenir entre 10 et 15 caractères."; + } + + if (preg_match('/^\s+$/', $phone)) { + $errors[] = "Le numéro de téléphone ne peut pas être composé uniquement d'espaces."; + } + + if (!preg_match('/^\d+$/', $phone)) { + $errors[] = "Le numéro de téléphone ne doit contenir que des chiffres."; + } + + if (empty($localisation) || strlen($localisation) < 6 || strlen($localisation) > 50) { + $errors[] = "L'adresse postale est requise et doit contenir entre 6 et 50 caractères."; + } + + if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 ]+$/', $localisation)) { + $errors[] = "L'adresse postale peut contenir uniquement des lettres, des chiffres et des espaces."; + } + + if (preg_match('/^\s+$/', $localisation)) { + $errors[] = "L'adresse ne peut pas être composé uniquement d'espaces."; + } + if (!empty($_FILES['avatar']['size'])) { - if (!isValidAvatarExtension($_FILES['avatar']['name'], $extensions_valides)) { - $errors[] = "Extension de l'avatar incorrecte."; + // Vérification de la taille maximale du fichier (par exemple, 5 Mo) + $maxFileSize = 5 * 1024 * 1024; // 5 Mo en octets + if ($_FILES['avatar']['size'] > $maxFileSize) { + $errors[] = "La taille de l'avatar dépasse la limite autorisée de 5 Mo."; + } + + // Vérification de l'extension du fichier + $extensions_valides = array('jpg', 'jpeg', 'gif', 'png'); + $extension_upload = strtolower(pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION)); + if (!in_array($extension_upload, $extensions_valides)) { + $errors[] = "Extension de l'avatar incorrecte. Seules les extensions JPG, JPEG, GIF et PNG sont autorisées."; + } + + // Vérification du type MIME du fichier + $allowedMimeTypes = array('image/jpeg', 'image/png', 'image/gif'); + $fileMimeType = mime_content_type($_FILES['avatar']['tmp_name']); + if (!in_array($fileMimeType, $allowedMimeTypes)) { + $errors[] = "Type de fichier non pris en charge. Veuillez télécharger une image au format JPG, JPEG, GIF ou PNG."; } } + +require_once './vue/inscription.html'; if (empty($errors)) { $userData = [ 'pseudo' => $pseudo, + 'password' => $password, 'email' => $email, - // Autres champs du formulaire + 'localisation' => $localisation, + 'prenom' => $prenom, + 'nom' => $nom, + 'phone' => $_POST['phone'], + 'avatar' => $_FILES['avatar'] ]; -require_once './vue/inscription.html'; - inscriptionUser($userData); - displayInscriptionSuccessMessage(); - exit; + inscriptionUser($userData); + displayInscriptionSuccessMessage(); + exit; } } + // Affichage du formulaire d'inscription avec les éventuelles erreurs require_once './vue/inscription.html'; if (!empty($errors)) { displayInscriptionErrorMessage($errors); } + // Fonction pour afficher un message d'erreur function displayInscriptionErrorMessage($errors) { echo ''; } + // Fonction pour afficher un message de succès function displayInscriptionSuccessMessage() { echo ''; } -?> \ No newline at end of file +?> diff --git a/controleur/profil.php b/controleur/profil.php index 060f1d9..b839a57 100644 --- a/controleur/profil.php +++ b/controleur/profil.php @@ -1,22 +1,29 @@ Cette action est impossible

'; } -function handleProfileModification(){ + +function handleProfileModification() { if (empty($_POST['sent'])) { - // On commence par s'assurer que le membre est connecté - // if ($id == 0) erreur(ERR_IS_NOT_CO); - // Les infos du membre - $data = get_MemberInfoId(); - require './vue/edit_profile_view.html'; + $userData = get_MemberInfoId(); + require_once './vue/edit_profile_view.html'; } else { - $i = 0; - $pass = /*md5*/($_POST['password']); - $confirm = /*md5*/($_POST['confirm']); + // Collecter les données du formulaire + $id = (int)$_SESSION['id_session']; + $pseudo = $_SESSION['pseudo_session']; + $password = $_POST['password']; + $confirm = $_POST['confirm']; $email = $_POST['email']; $localisation = $_POST['localisation']; $phone = $_POST['phone']; - $pseudo = $_SESSION['pseudo_session']; - $extensions_valides = array('jpg', 'jpeg', 'gif', 'png'); - // Vérification des champs du formulaire - if ($pass != $confirm || empty($confirm) || empty($pass)) { - $mdp_erreur = "Votre mot de passe et la confirmation sont différents ou sont vides"; - $i++; + $avatar = $_FILES['avatar']; + $errors = []; + + // Validation de l'email + if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { + $errors[] = "L'adresse e-mail est requise et doit être valide."; } + + if (!get_checkMyMail($email, $id)) { + $errors[] = "Votre adresse email est déjà utilisée par un membre."; + } + + // Validation du mot de passe + if (empty($password) || strlen($password) < 6 || strlen($password) > 32) { + $errors[] = "Le mot de passe est requis et doit contenir entre 6 et 32 caractères."; + } + + if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&]).+$/', $password)) { + $errors[] = "Le mot de passe doit contenir au moins une lettre, un chiffre et un caractère spécial (@$!%*?&)"; + } + + if ($password !== $confirm) { + $errors[] = "Les mots de passe ne correspondent pas."; + } + + // Validation du numéro de téléphone + if (empty($phone) || strlen($phone) < 10 || strlen($phone) > 15) { + $errors[] = "Le numéro de téléphone est requis et doit contenir entre 10 et 15 caractères."; + } + + if (preg_match('/^\s+$/', $phone)) { + $errors[] = "Le numéro de téléphone ne peut pas être composé uniquement d'espaces."; + } + + if (!preg_match('/^\d+$/', $phone)) { + $errors[] = "Le numéro de téléphone ne doit contenir que des chiffres."; + } + + // Validation de l'adresse postale + if (empty($localisation) || strlen($localisation) < 6 || strlen($localisation) > 50) { + $errors[] = "L'adresse postale est requise et doit contenir entre 6 et 50 caractères."; + } + + if (!preg_match('/^[A-Za-zÀ-ÖØ-öø-ÿ0-9 ]+$/', $localisation)) { + $errors[] = "L'adresse postale peut contenir uniquement des lettres, des chiffres et des espaces."; + } + + if (preg_match('/^\s+$/', $localisation)) { + $errors[] = "L'adresse ne peut pas être composée uniquement d'espaces."; + } + + // Validation de l'avatar if (!empty($_FILES['avatar']['size'])) { - $extension_upload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1)); + $maxFileSize = 5 * 1024 * 1024; // 5 Mo en octets + if ($_FILES['avatar']['size'] > $maxFileSize) { + $errors[] = "La taille de l'avatar dépasse la limite autorisée de 5 Mo."; + } + + $extensions_valides = ['jpg', 'jpeg', 'gif', 'png']; + $extension_upload = strtolower(pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION)); if (!in_array($extension_upload, $extensions_valides)) { - $i++; - $avatar_erreur3 = "Extension de l'avatar incorrecte"; + $errors[] = "Extension de l'avatar incorrecte. Seules les extensions JPG, JPEG, GIF et PNG sont autorisées."; + } + + $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif']; + $fileMimeType = mime_content_type($_FILES['avatar']['tmp_name']); + if (!in_array($fileMimeType, $allowedMimeTypes)) { + $errors[] = "Type de fichier non pris en charge. Veuillez télécharger une image au format JPG, JPEG, GIF ou PNG."; } } - if ($i == 0) { + + if (empty($errors)) { if (isset($_POST['delete'])) { post_RemoveAvatar($pseudo); } - // On modifie la table - post_UpdateProfile($pseudo, $pass, $email, $localisation, $phone); - $data = get_MemberInfoId(); // Récupérer les informations mises à jour + post_UpdateProfile($_SESSION['id_session'], $pseudo, $password, $email, $localisation, $phone, $avatar); + $userData = get_MemberInfoId(); // Récupérer les informations mises à jour require_once './vue/edit_profile_view.html'; displayModificationProfilSuccessMessage(); - exit; + exit(); } else { - $data = get_MemberInfoId(); // Récupérer les informations mises à jour - require_once './vue/edit_profile_view.html'; - displayModificationProfilErrorMessage($i, $avatar_erreur3 ?? null, $mdp_erreur ?? null); + $userData = get_MemberInfoId(); // Récupérer les informations pour afficher les erreurs + require_once './vue/edit_profile_view.html'; + displayModificationProfilErrorMessage($errors); } } } -// Fonction pour afficher un message de succès + +// Fonction pour afficher un message de succès lors de la modification du profil function displayModificationProfilSuccessMessage() { echo ''; } -function displayModificationProfilErrorMessage($i, $avatar_erreur3 = null, $mdp_erreur = null) { + +// Fonction pour afficher un message d'erreur lors de la modification du profil +function displayModificationProfilErrorMessage($errors) { echo ''; } + +// Fonction pour afficher un message de succès lors de la suppression du profil function displayDeleteProfilSuccessMessage() { echo ''; } -?> \ No newline at end of file +?> diff --git a/controleur/vehicule.php b/controleur/vehicule.php deleted file mode 100644 index a83f69e..0000000 --- a/controleur/vehicule.php +++ /dev/null @@ -1,61 +0,0 @@ - 9) { - $plaque_erreur2 = "Votre plaque est soit trop grande, soit trop petite"; - $i++; - } - if (!empty($_FILES['image']['size'])) { - $extension_upload = strtolower(substr(strrchr($_FILES['image']['name'], '.'), 1)); - if (!in_array($extension_upload, $extensions_valides)) { - $i++; - $image_erreur3 = "Extension de l'image incorrecte"; - } - } - if ($i == 0) { - // Affichage du message de réussite - echo ' -
-
-
-

Ajout du véhicule terminé


-
Le véhicule ' . stripslashes(htmlspecialchars($_POST['plaque'])) . ' a été ajouté au véhicule de la compagnie


-
-
-
'; - // Inclure à nouveau le formulaire pour permettre à l'utilisateur de ressaisir des valeurs - post_RegistreCars(); - } else { - // Affichage des erreurs et lien pour retourner au formulaire - echo ' -
-

Ajout du véhicule interrompu


-
' . $i . ' erreurs se sont produites lors de l\'ajout du véhicule

-
    '; - if ($plaque_erreur1) echo "

    $plaque_erreur1

    "; - if ($plaque_erreur2) echo "

    $plaque_erreur2

    "; - if ($image_erreur3) echo "

    $image_erreur3

    "; - echo ' -


-
'; - } -} -require './vue/vehicule.html'; -?> \ No newline at end of file diff --git a/images/avatars/Thumbs.db b/images/avatars/Thumbs.db index 808e96a..922d07e 100644 Binary files a/images/avatars/Thumbs.db and b/images/avatars/Thumbs.db differ diff --git a/images/avatars/sa/Thumbs.db b/images/avatars/sa/Thumbs.db index 1928a33..ad95c7d 100644 Binary files a/images/avatars/sa/Thumbs.db and b/images/avatars/sa/Thumbs.db differ diff --git a/images/avatars/sa/img_user.jpg b/images/avatars/sa/img_user.jpg index 9ee0e75..0414d72 100644 Binary files a/images/avatars/sa/img_user.jpg and b/images/avatars/sa/img_user.jpg differ diff --git a/images/avatars/utilisateur1/Thumbs.db b/images/avatars/utilisateur1/Thumbs.db index d9aa91a..bcced04 100644 Binary files a/images/avatars/utilisateur1/Thumbs.db and b/images/avatars/utilisateur1/Thumbs.db differ diff --git a/images/avatars/utilisateur10/Thumbs.db b/images/avatars/utilisateur10/Thumbs.db index 674f88e..0770af8 100644 Binary files a/images/avatars/utilisateur10/Thumbs.db and b/images/avatars/utilisateur10/Thumbs.db differ diff --git a/images/avatars/utilisateur11/Thumbs.db b/images/avatars/utilisateur11/Thumbs.db index 61b9c2f..a046323 100644 Binary files a/images/avatars/utilisateur11/Thumbs.db and b/images/avatars/utilisateur11/Thumbs.db differ diff --git a/images/avatars/utilisateur12/Thumbs.db b/images/avatars/utilisateur12/Thumbs.db index 882d134..e1e691b 100644 Binary files a/images/avatars/utilisateur12/Thumbs.db and b/images/avatars/utilisateur12/Thumbs.db differ diff --git a/images/avatars/utilisateur13/Thumbs.db b/images/avatars/utilisateur13/Thumbs.db index 9667c81..b87154a 100644 Binary files a/images/avatars/utilisateur13/Thumbs.db and b/images/avatars/utilisateur13/Thumbs.db differ diff --git a/images/avatars/utilisateur14/Thumbs.db b/images/avatars/utilisateur14/Thumbs.db index 6d92e56..2992ee2 100644 Binary files a/images/avatars/utilisateur14/Thumbs.db and b/images/avatars/utilisateur14/Thumbs.db differ diff --git a/images/avatars/utilisateur15/Thumbs.db b/images/avatars/utilisateur15/Thumbs.db index 4900d56..50a5bbc 100644 Binary files a/images/avatars/utilisateur15/Thumbs.db and b/images/avatars/utilisateur15/Thumbs.db differ diff --git a/images/avatars/utilisateur16/Thumbs.db b/images/avatars/utilisateur16/Thumbs.db index 47950e4..e3b6bd7 100644 Binary files a/images/avatars/utilisateur16/Thumbs.db and b/images/avatars/utilisateur16/Thumbs.db differ diff --git a/images/avatars/utilisateur17/Thumbs.db b/images/avatars/utilisateur17/Thumbs.db index 0958b2b..9e91f48 100644 Binary files a/images/avatars/utilisateur17/Thumbs.db and b/images/avatars/utilisateur17/Thumbs.db differ diff --git a/images/avatars/utilisateur18/Thumbs.db b/images/avatars/utilisateur18/Thumbs.db index 5b167d3..e5624bc 100644 Binary files a/images/avatars/utilisateur18/Thumbs.db and b/images/avatars/utilisateur18/Thumbs.db differ diff --git a/images/avatars/utilisateur19/Thumbs.db b/images/avatars/utilisateur19/Thumbs.db index 5df19be..5df09cc 100644 Binary files a/images/avatars/utilisateur19/Thumbs.db and b/images/avatars/utilisateur19/Thumbs.db differ diff --git a/images/avatars/utilisateur2/Thumbs.db b/images/avatars/utilisateur2/Thumbs.db index 30157de..7683058 100644 Binary files a/images/avatars/utilisateur2/Thumbs.db and b/images/avatars/utilisateur2/Thumbs.db differ diff --git a/images/avatars/utilisateur20/Thumbs.db b/images/avatars/utilisateur20/Thumbs.db index e60bc94..59c777a 100644 Binary files a/images/avatars/utilisateur20/Thumbs.db and b/images/avatars/utilisateur20/Thumbs.db differ diff --git a/images/avatars/utilisateur3/Thumbs.db b/images/avatars/utilisateur3/Thumbs.db index b5ac4d2..c7b5211 100644 Binary files a/images/avatars/utilisateur3/Thumbs.db and b/images/avatars/utilisateur3/Thumbs.db differ diff --git a/images/avatars/utilisateur4/Thumbs.db b/images/avatars/utilisateur4/Thumbs.db index 2ecf2a9..725578f 100644 Binary files a/images/avatars/utilisateur4/Thumbs.db and b/images/avatars/utilisateur4/Thumbs.db differ diff --git a/images/avatars/utilisateur5/Thumbs.db b/images/avatars/utilisateur5/Thumbs.db index b9a6cb2..cbc3171 100644 Binary files a/images/avatars/utilisateur5/Thumbs.db and b/images/avatars/utilisateur5/Thumbs.db differ diff --git a/images/avatars/utilisateur6/Thumbs.db b/images/avatars/utilisateur6/Thumbs.db index 0506850..05927f6 100644 Binary files a/images/avatars/utilisateur6/Thumbs.db and b/images/avatars/utilisateur6/Thumbs.db differ diff --git a/images/avatars/utilisateur7/Thumbs.db b/images/avatars/utilisateur7/Thumbs.db index 426951c..cbd0afb 100644 Binary files a/images/avatars/utilisateur7/Thumbs.db and b/images/avatars/utilisateur7/Thumbs.db differ diff --git a/images/avatars/utilisateur8/Thumbs.db b/images/avatars/utilisateur8/Thumbs.db index aeca80e..59ad15f 100644 Binary files a/images/avatars/utilisateur8/Thumbs.db and b/images/avatars/utilisateur8/Thumbs.db differ diff --git a/images/avatars/utilisateur9/Thumbs.db b/images/avatars/utilisateur9/Thumbs.db index 5ffeb4f..ec32135 100644 Binary files a/images/avatars/utilisateur9/Thumbs.db and b/images/avatars/utilisateur9/Thumbs.db differ diff --git a/images/vehicules/AA123AA/Thumbs.db b/images/vehicules/AA123AA/Thumbs.db index 84bb1c7..2fa077f 100644 Binary files a/images/vehicules/AA123AA/Thumbs.db and b/images/vehicules/AA123AA/Thumbs.db differ diff --git a/images/vehicules/AA123AA/img_vehicule.png b/images/vehicules/AA123AA/img_vehicule.png new file mode 100644 index 0000000..d9d0b4c Binary files /dev/null and b/images/vehicules/AA123AA/img_vehicule.png differ diff --git a/images/vehicules/BB456BB/Thumbs.db b/images/vehicules/BB456BB/Thumbs.db index a8e009d..aaf3132 100644 Binary files a/images/vehicules/BB456BB/Thumbs.db and b/images/vehicules/BB456BB/Thumbs.db differ diff --git a/images/vehicules/BB456BB/img_vehicule.png b/images/vehicules/BB456BB/img_vehicule.png new file mode 100644 index 0000000..e3e3fe4 Binary files /dev/null and b/images/vehicules/BB456BB/img_vehicule.png differ diff --git a/images/vehicules/BB456BB/img_voiture.png b/images/vehicules/BB456BB/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/BB456BB/img_voiture.png and /dev/null differ diff --git a/images/vehicules/CC789CC/Thumbs.db b/images/vehicules/CC789CC/Thumbs.db index 1afd15f..9a48a33 100644 Binary files a/images/vehicules/CC789CC/Thumbs.db and b/images/vehicules/CC789CC/Thumbs.db differ diff --git a/images/vehicules/CC789CC/img_vehicule.png b/images/vehicules/CC789CC/img_vehicule.png new file mode 100644 index 0000000..d6d3837 Binary files /dev/null and b/images/vehicules/CC789CC/img_vehicule.png differ diff --git a/images/vehicules/CC789CC/img_voiture.png b/images/vehicules/CC789CC/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/CC789CC/img_voiture.png and /dev/null differ diff --git a/images/vehicules/DD012DD/Thumbs.db b/images/vehicules/DD012DD/Thumbs.db index db29b16..5ccdea0 100644 Binary files a/images/vehicules/DD012DD/Thumbs.db and b/images/vehicules/DD012DD/Thumbs.db differ diff --git a/images/vehicules/DD012DD/img_vehicule.png b/images/vehicules/DD012DD/img_vehicule.png new file mode 100644 index 0000000..82d9acc Binary files /dev/null and b/images/vehicules/DD012DD/img_vehicule.png differ diff --git a/images/vehicules/DD012DD/img_voiture.png b/images/vehicules/DD012DD/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/DD012DD/img_voiture.png and /dev/null differ diff --git a/images/vehicules/EE345EE/Thumbs.db b/images/vehicules/EE345EE/Thumbs.db index eb042d7..7afc808 100644 Binary files a/images/vehicules/EE345EE/Thumbs.db and b/images/vehicules/EE345EE/Thumbs.db differ diff --git a/images/vehicules/EE345EE/img_vehicule.png b/images/vehicules/EE345EE/img_vehicule.png new file mode 100644 index 0000000..c6011f6 Binary files /dev/null and b/images/vehicules/EE345EE/img_vehicule.png differ diff --git a/images/vehicules/EE345EE/img_voiture.png b/images/vehicules/EE345EE/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/EE345EE/img_voiture.png and /dev/null differ diff --git a/images/vehicules/FF678FF/Thumbs.db b/images/vehicules/FF678FF/Thumbs.db index 0a5ec24..3f8fbde 100644 Binary files a/images/vehicules/FF678FF/Thumbs.db and b/images/vehicules/FF678FF/Thumbs.db differ diff --git a/images/vehicules/FF678FF/img_vehicule.png b/images/vehicules/FF678FF/img_vehicule.png new file mode 100644 index 0000000..842e167 Binary files /dev/null and b/images/vehicules/FF678FF/img_vehicule.png differ diff --git a/images/vehicules/FF678FF/img_voiture.png b/images/vehicules/FF678FF/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/FF678FF/img_voiture.png and /dev/null differ diff --git a/images/vehicules/GG901GG/Thumbs.db b/images/vehicules/GG901GG/Thumbs.db index 4fc4dd4..ee8f4ea 100644 Binary files a/images/vehicules/GG901GG/Thumbs.db and b/images/vehicules/GG901GG/Thumbs.db differ diff --git a/images/vehicules/GG901GG/img_vehicule.png b/images/vehicules/GG901GG/img_vehicule.png new file mode 100644 index 0000000..bce3aa2 Binary files /dev/null and b/images/vehicules/GG901GG/img_vehicule.png differ diff --git a/images/vehicules/GG901GG/img_voiture.png b/images/vehicules/GG901GG/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/GG901GG/img_voiture.png and /dev/null differ diff --git a/images/vehicules/GH209RH/img_voiture.png b/images/vehicules/GH209RH/img_vehicule.png similarity index 100% rename from images/vehicules/GH209RH/img_voiture.png rename to images/vehicules/GH209RH/img_vehicule.png diff --git a/images/vehicules/HH234HH/Thumbs.db b/images/vehicules/HH234HH/Thumbs.db index bc2288e..4731355 100644 Binary files a/images/vehicules/HH234HH/Thumbs.db and b/images/vehicules/HH234HH/Thumbs.db differ diff --git a/images/vehicules/HH234HH/img_vehicule.png b/images/vehicules/HH234HH/img_vehicule.png new file mode 100644 index 0000000..eac192b Binary files /dev/null and b/images/vehicules/HH234HH/img_vehicule.png differ diff --git a/images/vehicules/HH234HH/img_voiture.png b/images/vehicules/HH234HH/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/HH234HH/img_voiture.png and /dev/null differ diff --git a/images/vehicules/II567II/Thumbs.db b/images/vehicules/II567II/Thumbs.db index fd9317b..9b693bc 100644 Binary files a/images/vehicules/II567II/Thumbs.db and b/images/vehicules/II567II/Thumbs.db differ diff --git a/images/vehicules/II567II/img_vehicule.png b/images/vehicules/II567II/img_vehicule.png new file mode 100644 index 0000000..bd860ae Binary files /dev/null and b/images/vehicules/II567II/img_vehicule.png differ diff --git a/images/vehicules/II567II/img_voiture.png b/images/vehicules/II567II/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/II567II/img_voiture.png and /dev/null differ diff --git a/images/vehicules/IO334PO/img_voiture.png b/images/vehicules/IO334PO/img_vehicule.png similarity index 100% rename from images/vehicules/IO334PO/img_voiture.png rename to images/vehicules/IO334PO/img_vehicule.png diff --git a/images/vehicules/JJ890JJ/Thumbs.db b/images/vehicules/JJ890JJ/Thumbs.db index 797856f..aa993cf 100644 Binary files a/images/vehicules/JJ890JJ/Thumbs.db and b/images/vehicules/JJ890JJ/Thumbs.db differ diff --git a/images/vehicules/JJ890JJ/img_vehicule.png b/images/vehicules/JJ890JJ/img_vehicule.png new file mode 100644 index 0000000..ffe078f Binary files /dev/null and b/images/vehicules/JJ890JJ/img_vehicule.png differ diff --git a/images/vehicules/JJ890JJ/img_voiture.png b/images/vehicules/JJ890JJ/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/JJ890JJ/img_voiture.png and /dev/null differ diff --git a/images/vehicules/KK123KK/Thumbs.db b/images/vehicules/KK123KK/Thumbs.db index f0fee27..9fad2f8 100644 Binary files a/images/vehicules/KK123KK/Thumbs.db and b/images/vehicules/KK123KK/Thumbs.db differ diff --git a/images/vehicules/KK123KK/img_vehicule.png b/images/vehicules/KK123KK/img_vehicule.png new file mode 100644 index 0000000..0958e38 Binary files /dev/null and b/images/vehicules/KK123KK/img_vehicule.png differ diff --git a/images/vehicules/KK123KK/img_voiture.png b/images/vehicules/KK123KK/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/KK123KK/img_voiture.png and /dev/null differ diff --git a/images/vehicules/LL456LL/Thumbs.db b/images/vehicules/LL456LL/Thumbs.db index 20e86d1..82c627d 100644 Binary files a/images/vehicules/LL456LL/Thumbs.db and b/images/vehicules/LL456LL/Thumbs.db differ diff --git a/images/vehicules/LL456LL/img_vehicule.png b/images/vehicules/LL456LL/img_vehicule.png new file mode 100644 index 0000000..a87a5b9 Binary files /dev/null and b/images/vehicules/LL456LL/img_vehicule.png differ diff --git a/images/vehicules/LL456LL/img_voiture.png b/images/vehicules/LL456LL/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/LL456LL/img_voiture.png and /dev/null differ diff --git a/images/vehicules/MM789MM/Thumbs.db b/images/vehicules/MM789MM/Thumbs.db index 9b5b0bd..5342216 100644 Binary files a/images/vehicules/MM789MM/Thumbs.db and b/images/vehicules/MM789MM/Thumbs.db differ diff --git a/images/vehicules/MM789MM/img_vehicule.png b/images/vehicules/MM789MM/img_vehicule.png new file mode 100644 index 0000000..9257d37 Binary files /dev/null and b/images/vehicules/MM789MM/img_vehicule.png differ diff --git a/images/vehicules/MM789MM/img_voiture.png b/images/vehicules/MM789MM/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/MM789MM/img_voiture.png and /dev/null differ diff --git a/images/vehicules/NN012NN/Thumbs.db b/images/vehicules/NN012NN/Thumbs.db index 232ef70..526628e 100644 Binary files a/images/vehicules/NN012NN/Thumbs.db and b/images/vehicules/NN012NN/Thumbs.db differ diff --git a/images/vehicules/NN012NN/img_vehicule.png b/images/vehicules/NN012NN/img_vehicule.png new file mode 100644 index 0000000..564d451 Binary files /dev/null and b/images/vehicules/NN012NN/img_vehicule.png differ diff --git a/images/vehicules/NN012NN/img_voiture.png b/images/vehicules/NN012NN/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/NN012NN/img_voiture.png and /dev/null differ diff --git a/images/vehicules/OO345OO/Thumbs.db b/images/vehicules/OO345OO/Thumbs.db index 05e4e8e..79e4b44 100644 Binary files a/images/vehicules/OO345OO/Thumbs.db and b/images/vehicules/OO345OO/Thumbs.db differ diff --git a/images/vehicules/OO345OO/img_vehicule.png b/images/vehicules/OO345OO/img_vehicule.png new file mode 100644 index 0000000..dc8b2de Binary files /dev/null and b/images/vehicules/OO345OO/img_vehicule.png differ diff --git a/images/vehicules/OO345OO/img_voiture.png b/images/vehicules/OO345OO/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/OO345OO/img_voiture.png and /dev/null differ diff --git a/images/vehicules/PH940OP/img_voiture.png b/images/vehicules/PH940OP/img_vehicule.png similarity index 100% rename from images/vehicules/PH940OP/img_voiture.png rename to images/vehicules/PH940OP/img_vehicule.png diff --git a/images/vehicules/PP678PP/Thumbs.db b/images/vehicules/PP678PP/Thumbs.db index 0c5ae7b..be8874b 100644 Binary files a/images/vehicules/PP678PP/Thumbs.db and b/images/vehicules/PP678PP/Thumbs.db differ diff --git a/images/vehicules/PP678PP/img_vehicule.png b/images/vehicules/PP678PP/img_vehicule.png new file mode 100644 index 0000000..b095a8c Binary files /dev/null and b/images/vehicules/PP678PP/img_vehicule.png differ diff --git a/images/vehicules/PP678PP/img_voiture.png b/images/vehicules/PP678PP/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/PP678PP/img_voiture.png and /dev/null differ diff --git a/images/vehicules/QQ901QQ/Thumbs.db b/images/vehicules/QQ901QQ/Thumbs.db index 7c8970d..6465e21 100644 Binary files a/images/vehicules/QQ901QQ/Thumbs.db and b/images/vehicules/QQ901QQ/Thumbs.db differ diff --git a/images/vehicules/QQ901QQ/img_vehicule.png b/images/vehicules/QQ901QQ/img_vehicule.png new file mode 100644 index 0000000..0776f7d Binary files /dev/null and b/images/vehicules/QQ901QQ/img_vehicule.png differ diff --git a/images/vehicules/QQ901QQ/img_voiture.png b/images/vehicules/QQ901QQ/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/QQ901QQ/img_voiture.png and /dev/null differ diff --git a/images/vehicules/RR234RR/Thumbs.db b/images/vehicules/RR234RR/Thumbs.db index 7a2d706..5bdde45 100644 Binary files a/images/vehicules/RR234RR/Thumbs.db and b/images/vehicules/RR234RR/Thumbs.db differ diff --git a/images/vehicules/RR234RR/img_vehicule.png b/images/vehicules/RR234RR/img_vehicule.png new file mode 100644 index 0000000..21a61f9 Binary files /dev/null and b/images/vehicules/RR234RR/img_vehicule.png differ diff --git a/images/vehicules/RR234RR/img_voiture.png b/images/vehicules/RR234RR/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/RR234RR/img_voiture.png and /dev/null differ diff --git a/images/vehicules/SS567SS/Thumbs.db b/images/vehicules/SS567SS/Thumbs.db index 4f063c5..5764545 100644 Binary files a/images/vehicules/SS567SS/Thumbs.db and b/images/vehicules/SS567SS/Thumbs.db differ diff --git a/images/vehicules/SS567SS/img_vehicule.png b/images/vehicules/SS567SS/img_vehicule.png new file mode 100644 index 0000000..1c2a54d Binary files /dev/null and b/images/vehicules/SS567SS/img_vehicule.png differ diff --git a/images/vehicules/SS567SS/img_voiture.png b/images/vehicules/SS567SS/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/SS567SS/img_voiture.png and /dev/null differ diff --git a/images/vehicules/TT890TT/Thumbs.db b/images/vehicules/TT890TT/Thumbs.db index 60fe5d1..a837e82 100644 Binary files a/images/vehicules/TT890TT/Thumbs.db and b/images/vehicules/TT890TT/Thumbs.db differ diff --git a/images/vehicules/TT890TT/img_vehicule.png b/images/vehicules/TT890TT/img_vehicule.png new file mode 100644 index 0000000..03f58c3 Binary files /dev/null and b/images/vehicules/TT890TT/img_vehicule.png differ diff --git a/images/vehicules/TT890TT/img_voiture.png b/images/vehicules/TT890TT/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/TT890TT/img_voiture.png and /dev/null differ diff --git a/images/vehicules/Thumbs.db b/images/vehicules/Thumbs.db index b09ff0a..d24d5a2 100644 Binary files a/images/vehicules/Thumbs.db and b/images/vehicules/Thumbs.db differ diff --git a/images/vehicules/WSD754YH/img_voiture.png b/images/vehicules/WSD754YH/img_vehicule.png similarity index 100% rename from images/vehicules/WSD754YH/img_voiture.png rename to images/vehicules/WSD754YH/img_vehicule.png diff --git a/images/vehicules/XD738UJ/img_voiture.png b/images/vehicules/XD738UJ/img_vehicule.png similarity index 100% rename from images/vehicules/XD738UJ/img_voiture.png rename to images/vehicules/XD738UJ/img_vehicule.png diff --git a/images/vehicules/AA123AA/img_voiture.png b/images/vehicules/img_vehicule.png similarity index 100% rename from images/vehicules/AA123AA/img_voiture.png rename to images/vehicules/img_vehicule.png diff --git a/images/vehicules/img_voiture.png b/images/vehicules/img_voiture.png deleted file mode 100644 index 19d3437..0000000 Binary files a/images/vehicules/img_voiture.png and /dev/null differ diff --git a/images/vehicules/voiture.png b/images/vehicules/vehicule.png similarity index 100% rename from images/vehicules/voiture.png rename to images/vehicules/vehicule.png diff --git a/js/script.js b/js/script.js index 83bad87..6f38139 100644 --- a/js/script.js +++ b/js/script.js @@ -41,11 +41,17 @@ function getCookie(name) { return null; } -function acceptCookies() { +function accepterCookies() { document.cookie = "cookieConsent=true; max-age=" + 60*60*24*365 + "; path=/"; document.getElementById("cookieConsent").classList.add("d-none"); } +function refuserCookies() { + document.cookie = + "cookieConsent=false; max-age=" + 60*60*24*365 + "; path=/"; + document.getElementById("cookieConsent").classList.add("d-none"); +} + window.onload = function() { if (getCookie("cookieConsent") !== "true") { document.getElementById("cookieConsent").classList.remove("d-none"); diff --git a/js/script_calendar.js b/js/script_calendar.js index 7672bfe..2c02f18 100644 --- a/js/script_calendar.js +++ b/js/script_calendar.js @@ -1,18 +1,58 @@ -//# AFFICHE MY EVENT -var calendarMyEvents = $("#calendar-my-events").fullCalendar({ - events: "./modele/event/fetch-my-events.php", - displayEventTime: false, - eventRender: function (event, element, view) { +$(document).ready(function () { + // Initialisation du calendrier pour les événements de l'utilisateur actuel + var calendarMyEvents = $("#calendar-my-events").fullCalendar({ + events: "./modele/event/fetch-my-events.php", + displayEventTime: false, + selectable: true, + selectHelper: true, + editable: false, + eventRender: eventRenderFunction, + eventClick: eventClickFunction, + eventMouseover: eventMouseoverFunction, + eventMouseout: eventMouseoutFunction, + }); + + // Initialisation du calendrier pour tous les événements + var calendarAllEvents = $("#calendar-all-events").fullCalendar({ + events: "./modele/event/fetch-all-events.php", + displayEventTime: false, + selectable: true, + selectHelper: true, + editable: false, + eventRender: eventRenderFunction, + eventClick: eventClickFunction, + eventMouseover: eventMouseoverFunction, + eventMouseout: eventMouseoutFunction, + }); + + // Fonction pour rendre les événements + function eventRenderFunction(event, element, view) { if (event.allDay === "true") { event.allDay = true; } else { event.allDay = false; } - }, - selectable: true, - selectHelper: true, - editable: false, - eventClick: function (event) { + element.bind("contextmenu", function (e) { + e.preventDefault(); // Empêche le menu contextuel par défaut de s'afficher + var deleteMsg = confirm("Voulez-vous vraiment supprimer la réservation?"); + if (deleteMsg) { + $.ajax({ + type: "POST", + url: "./modele/event/delete-event.php", + data: "&id=" + event.id, + success: function (response) { + if (parseInt(response) > 0) { + $(this).fullCalendar("removeEvents", event.id); + displayMessage("Réservation supprimée avec succès"); + } + }, + }); + } + }); + } + + // Fonction pour gérer le clic sur un événement + function eventClickFunction(event) { // Afficher une pop-up avec les détails de l'événement alert( event.title + @@ -28,194 +68,137 @@ var calendarMyEvents = $("#calendar-my-events").fullCalendar({ " --> " + event.end.format("dddd DD MMMM YYYY HH:mm") ); - }, - eventRender: function (event, element, view) { - element.bind("contextmenu", function (e) { - e.preventDefault(); // Empêche le menu contextuel par défaut de s'afficher - var deleteMsg = confirm("Voulez-vous vraiment supprimer la réservation?"); - if (deleteMsg) { - $.ajax({ - type: "POST", - url: "./modele/event/delete-event.php", - data: "&id=" + event.id, - success: function (response) { - if (parseInt(response) > 0) { - $("#calendar-my-events").fullCalendar("removeEvents", event.id); - displayMessage("Réservation supprimée avec succès"); - } - }, - }); - } - }); - }, - eventMouseover: function (event, jsEvent, view) { + } + + // Fonction pour gérer le survol d'un événement + function eventMouseoverFunction(event, jsEvent, view) { // Change la forme du curseur lorsque vous survolez l'événement $(this).css("cursor", "pointer"); - }, - eventMouseout: function (event, jsEvent, view) { + } + + // Fonction pour gérer la sortie du survol d'un événement + function eventMouseoutFunction(event, jsEvent, view) { // Réinitialise la forme du curseur lorsque vous ne survolez plus l'événement $(this).css("cursor", "auto"); - }, -}); + } -//# AFFICHE ALL EVENTS -$(document).ready(function () { -var calendarAllEvents = $("#calendar-all-events").fullCalendar({ - events: "./modele/event/fetch-all-events.php", - displayEventTime: false, - eventRender: function (event, element, view) { - if (event.allDay === "true") { - event.allDay = true; - } else { - event.allDay = false; - } - }, - selectable: true, - selectHelper: true, - editable: false, - eventClick: function (event) { - // Afficher une pop-up avec les détails de l'événement - alert( - event.title + - " : \n" + - event.vehicule + - " pour le client " + - event.utilisateur + - "\n" + - "\n" + - "Période de réservation : " + - "\n" + - event.start.format("dddd DD MMMM YYYY HH:mm") + - " --> " + - event.end.format("dddd DD MMMM YYYY HH:mm") - ); - }, - eventRender: function (event, element, view) { - element.bind("contextmenu", function (e) { - e.preventDefault(); // Empêche le menu contextuel par défaut de s'afficher - var deleteMsg = confirm("Voulez-vous vraiment supprimer la réservation?"); - if (deleteMsg) { - $.ajax({ - type: "POST", - url: "./modele/event/delete-event.php", - data: "&id=" + event.id, - success: function (response) { - if (parseInt(response) > 0) { - $("#calendar-all-events").fullCalendar("removeEvents", event.id); - displayMessage("Réservation supprimée avec succès"); - } - }, - }); + // Fonction pour afficher un message + function displayMessage(message) { + alert(message); + } + + // Fonction pour ajouter un événement + function addAdminEvent(url, formId, calendarId) { + $(formId).submit(function (event) { + event.preventDefault(); // Empêche la soumission du formulaire par défaut + + // Récupérer les valeurs des champs + var id_vehicule = $(formId + " #eventidVehiculeSelect").val(); + var id_user = $(formId + " #eventidUserSelect").val(); + var start = $(formId + " #eventStart").val(); + var end = $(formId + " #eventEnd").val(); + + // Validation de base des champs + if (!id_vehicule || !id_user || !start || !end) { + displayMessage("Tous les champs sont requis."); + return; } + + // Convertir le format datetime-local en format MySQL datetime + function convertToMySQLDateTime(datetimeLocal) { + return datetimeLocal.replace("T", " ") + ":00"; + } + var startFormatted = convertToMySQLDateTime(start); + var endFormatted = convertToMySQLDateTime(end); + + $.ajax({ + url: url, + type: "POST", + data: { + id_vehicule: id_vehicule, + id_user: id_user, + start: startFormatted, + end: endFormatted, + }, + success: function (response) { + var data = JSON.parse(response); + if (data.status === "success") { + alert(data.message); + $("#calendar-all-events").fullCalendar("refetchEvents"); // Met à jour les événements dans le calendrier + } else { + alert(data.message); + $("#calendar-all-events").fullCalendar("refetchEvents"); // Met à jour les événements dans le calendrier + } + }, + error: function (xhr, status, error) { + console.error("Erreur lors de la création de l'événement:", error); + displayMessage("Erreur lors de la création de l'événement."); + }, + }); }); - }, - eventMouseover: function (event, jsEvent, view) { - // Change la forme du curseur lorsque vous survolez l'événement - $(this).css("cursor", "pointer"); - }, - eventMouseout: function (event, jsEvent, view) { - // Réinitialise la forme du curseur lorsque vous ne survolez plus l'événement - $(this).css("cursor", "auto"); - }, -}); + } -//# AJOUTE EVENT ADMIN -$(document).ready(function () { - $("#eventForm").submit(function (event) { - event.preventDefault(); // Empêche la soumission du formulaire par défaut - // Récupérer les valeurs des champs - var id_user = $("#eventidUserSelect").val(); - var id_vehicule = $("#eventidVehiculeSelect").val(); - var start = $("#eventStart").val(); - var end = $("#eventEnd").val(); - // Validation de base des champs - if (!id_user || !id_vehicule || !start || !end) { - displayMessage("Tous les champs sont requis."); - return; - } - // Convertir le format datetime-local en format MySQL datetime - function convertToMySQLDateTime(datetimeLocal) { - return datetimeLocal.replace("T", " ") + ":00"; - } - var startFormatted = convertToMySQLDateTime(start); - var endFormatted = convertToMySQLDateTime(end); + // Fonction pour ajouter un événement utilisateur + function addUserEvent(url, formId, calendarId) { + $(formId).submit(function (event) { + event.preventDefault(); // Empêche la soumission du formulaire par défaut - $.ajax({ - url: "./modele/event/add-event.php", - type: "POST", - data: { - id_user: id_user, - id_vehicule: id_vehicule, - start: startFormatted, - end: endFormatted, - }, - success: function (response) { - displayMessage("Réservation créée avec succès."); - $("#eventForm")[0].reset(); - $("#calendar-all-events").fullCalendar("refetchEvents"); // Met à jour les événements dans le calendrier - }, - error: function (xhr, status, error) { - console.error("Erreur lors de la création de l'événement:", error); - displayMessage("Erreur lors de la création de l'événement."); - }, + // Récupérer les valeurs des champs + var id_vehicule = $(formId + " #eventidVehiculeSelect").val(); + var start = $(formId + " #eventStart").val(); + var end = $(formId + " #eventEnd").val(); + + // Validation de base des champs + if (!id_vehicule || !start || !end) { + displayMessage("Tous les champs sont requis."); + return; + } + + // Convertir le format datetime-local en format MySQL datetime + function convertToMySQLDateTime(datetimeLocal) { + return datetimeLocal.replace("T", " ") + ":00"; + } + var startFormatted = convertToMySQLDateTime(start); + var endFormatted = convertToMySQLDateTime(end); + + $.ajax({ + url: url, + type: "POST", + data: { + id_vehicule: id_vehicule, + start: startFormatted, + end: endFormatted, + }, + success: function (response) { + var data = JSON.parse(response); + if (data.status === "success") { + alert(data.message); + $("#eventMyForm")[0].reset(); + $("#calendar-my-events").fullCalendar("refetchEvents"); // Met à jour les événements dans le calendrier + } else { + alert(data.message); + $("#calendar-my-events").fullCalendar("refetchEvents"); // Met à jour les événements dans le calendrier + } + }, + error: function (xhr, status, error) { + console.error("Erreur lors de la création de l'événement:", error); + displayMessage("Erreur lors de la création de l'événement."); + }, + }); }); - }); - function displayMessage(message) { - alert(message); } + + // Appel de la fonction pour ajouter un événement administratif + addAdminEvent( + "./modele/event/add-event.php", + "#eventForm", + "#calendar-all-events" + ); + + // Appel de la fonction pour ajouter un événement de l'utilisateur + addUserEvent( + "./modele/event/add-my-event.php", + "#eventMyForm", + "#calendar-my-events" + ); }); - -//# AJOUTE MY EVENT -$(document).ready(function () { - $("#eventMyForm").submit(function (event) { - event.preventDefault(); // Empêche la soumission du formulaire par défaut - - var id_vehicule = $("#eventidVehiculeSelect").val(); - var start = $("#eventStart").val(); - var end = $("#eventEnd").val(); - - // Convertir le format datetime-local en format MySQL datetime - function convertToMySQLDateTime(datetimeLocal) { - return datetimeLocal.replace("T", " ") + ":00"; - } - var startFormatted = convertToMySQLDateTime(start); - var endFormatted = convertToMySQLDateTime(end); - - $.ajax({ - url: "./modele/event/add-my-event.php", - type: "POST", - data: { - id_vehicule: id_vehicule, - start: startFormatted, - end: endFormatted, - }, - success: function (response) { - displayMessage("Réservation créée avec succès."); - $("#eventMyForm")[0].reset(); - $("#calendar-my-events").fullCalendar("refetchEvents"); // Met à jour les événements dans le calendrier - }, - error: function (xhr, status, error) { - console.error("Erreur lors de la création de l'événement:", error); - displayMessage("Erreur lors de la création de l'événement."); - }, - }); - }); - - // Fonction pour afficher les messages à l'utilisateur - function displayMessage(message) { - // Implémentez votre méthode d'affichage des messages ici - alert(message); - } -}); - - // Fonction pour afficher les messages à l'utilisateur - function displayMessage(message) { - // Implémentez votre méthode d'affichage des messages ici - alert(message); - } -}); - -function displayMessage(message) { - $("#message").html("
"+message+"
"); - setInterval(function() { $(".alert-success").fadeOut(); }, 3000); -} \ No newline at end of file diff --git a/legal.php b/legal.php new file mode 100644 index 0000000..b706f9d --- /dev/null +++ b/legal.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/modele/event/add-event.php b/modele/event/add-event.php index 2e6faf6..d13a67f 100644 --- a/modele/event/add-event.php +++ b/modele/event/add-event.php @@ -2,6 +2,12 @@ require '../../config/connexion_sql.php'; global $bdd; +// Fonction de validation des dates +function validateDateTime($dateTime, $format = 'Y-m-d H:i:s') { + $d = DateTime::createFromFormat($format, $dateTime); + return $d && $d->format($format) === $dateTime; +} + // Récupération et validation des entrées $start = isset($_POST['start']) ? $_POST['start'] : null; $end = isset($_POST['end']) ? $_POST['end'] : null; @@ -13,6 +19,57 @@ if (!$id_user || !$id_vehicule || !$start || !$end) { die(json_encode(['status' => 'error', 'message' => 'Tous les champs sont requis.'])); } +// Vérification que l'ID du véhicule est un entier positif +if ($id_vehicule <= 0) { + die(json_encode(['status' => 'error', 'message' => 'ID du véhicule invalide.'])); +} + +// Vérification que l'ID du véhicule existe dans la base de données +$stmtVehicule = $bdd->prepare("SELECT COUNT(*) FROM Vehicules WHERE id = :id_vehicule"); +$stmtVehicule->bindParam(':id_vehicule', $id_vehicule, PDO::PARAM_INT); +$stmtVehicule->execute(); +if ($stmtVehicule->fetchColumn() == 0) { + die(json_encode(['status' => 'error', 'message' => 'Le véhicule spécifié n\'existe pas.'])); +} + +// Validation des formats de date +if (!validateDateTime($start) || !validateDateTime($end)) { + die(json_encode(['status' => 'error', 'message' => 'Les dates doivent être dans un format valide (YYYY-MM-DD HH:MM:SS).'])); +} + +// Vérification que la date de début est postérieure à la date actuelle +$currentDateTime = new DateTime(); +$startDateTime = new DateTime($start); +if ($startDateTime <= $currentDateTime) { + die(json_encode(['status' => 'error', 'message' => 'Vous ne pouvez réserver que pour le jour même ou les jours suivants.'])); +} + +// Vérification que la date de fin est postérieure à la date de début +$endDateTime = new DateTime($end); +if ($endDateTime <= $startDateTime) { + die(json_encode(['status' => 'error', 'message' => 'La date de fin doit être postérieure à la date de début.'])); +} + +// Vérification que l'ID du client existe dans la base de données +$stmtResUser = $bdd->prepare("SELECT COUNT(*) FROM Reservations WHERE id_user = :id_user AND start < :end AND end > :start"); +$stmtResUser->bindParam(':id_user', $id_user , PDO::PARAM_INT); +$stmtResUser->bindParam(':start', $start, PDO::PARAM_STR); +$stmtResUser->bindParam(':end', $end, PDO::PARAM_STR); +$stmtResUser->execute(); +if ($stmtResUser->fetchColumn() > 0) { + die(json_encode(['status' => 'error', 'message' => 'L\'utilisateur à déjà réservé un véhicule pendant cette période.'])); +} + +// Vérification que l'ID du véhicule existe dans la base de données +$stmtResVehicule = $bdd->prepare("SELECT COUNT(*) FROM Reservations WHERE id_vehicule = :id_vehicule AND start < :end AND end > :start"); +$stmtResVehicule->bindParam(':id_vehicule', $id_vehicule, PDO::PARAM_INT); +$stmtResVehicule->bindParam(':start', $start, PDO::PARAM_STR); +$stmtResVehicule->bindParam(':end', $end, PDO::PARAM_STR); +$stmtResVehicule->execute(); +if ($stmtResVehicule->fetchColumn() > 0) { + die(json_encode(['status' => 'error', 'message' => 'Le véhicule est déjà réservé pendant cette période.'])); +} + try { // Démarrer la transaction $bdd->beginTransaction(); diff --git a/modele/event/add-my-event.php b/modele/event/add-my-event.php index 11f9a09..65c7d65 100644 --- a/modele/event/add-my-event.php +++ b/modele/event/add-my-event.php @@ -6,8 +6,6 @@ global $bdd; if (!isset($id_session)) { die(json_encode(['status' => 'error', 'message' => 'Utilisateur non connecté.'])); } -$id_user = $id_session; // Récupérer l'ID de l'utilisateur depuis la session - // Fonction de validation des dates function validateDateTime($dateTime, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $dateTime); @@ -15,20 +13,67 @@ function validateDateTime($dateTime, $format = 'Y-m-d H:i:s') { } // Récupération et validation des entrées +$id_user = intval($_SESSION['id_session']); $start = isset($_POST['start']) ? $_POST['start'] : null; $end = isset($_POST['end']) ? $_POST['end'] : null; $id_vehicule = isset($_POST['id_vehicule']) ? intval($_POST['id_vehicule']) : null; // Vérification que toutes les entrées sont présentes et valides -if (!$id_vehicule || !$start || !$end) { +if (!$id_user || !$id_vehicule || !$start || !$end) { die(json_encode(['status' => 'error', 'message' => 'Tous les champs sont requis.'])); } +// Vérification que l'ID du véhicule est un entier positif +if ($id_vehicule <= 0) { + die(json_encode(['status' => 'error', 'message' => 'ID du véhicule invalide.'])); +} + +// Vérification que l'ID du véhicule existe dans la base de données +$stmtVehicule = $bdd->prepare("SELECT COUNT(*) FROM Vehicules WHERE id = :id_vehicule"); +$stmtVehicule->bindParam(':id_vehicule', $id_vehicule, PDO::PARAM_INT); +$stmtVehicule->execute(); +if ($stmtVehicule->fetchColumn() == 0) { + die(json_encode(['status' => 'error', 'message' => 'Le véhicule spécifié n\'existe pas.'])); +} + // Validation des formats de date if (!validateDateTime($start) || !validateDateTime($end)) { die(json_encode(['status' => 'error', 'message' => 'Les dates doivent être dans un format valide (YYYY-MM-DD HH:MM:SS).'])); } +// Vérification que la date de début est postérieure à la date actuelle +$currentDateTime = new DateTime(); +$startDateTime = new DateTime($start); +if ($startDateTime <= $currentDateTime) { + die(json_encode(['status' => 'error', 'message' => 'Vous ne pouvez réserver que pour le jour même ou les jours suivants.'])); +} + +// Vérification que la date de fin est postérieure à la date de début +$endDateTime = new DateTime($end); +if ($endDateTime <= $startDateTime) { + die(json_encode(['status' => 'error', 'message' => 'La date de fin doit être postérieure à la date de début.'])); +} + +// Vérification que l'ID du client existe dans la base de données +$stmtResUser = $bdd->prepare("SELECT COUNT(*) FROM Reservations WHERE id_user = :id_user AND start < :end AND end > :start"); +$stmtResUser->bindParam(':id_user', $id_user , PDO::PARAM_INT); +$stmtResUser->bindParam(':start', $start, PDO::PARAM_STR); +$stmtResUser->bindParam(':end', $end, PDO::PARAM_STR); +$stmtResUser->execute(); +if ($stmtResUser->fetchColumn() > 0) { + die(json_encode(['status' => 'error', 'message' => 'Vous avez déjà réservé un véhicule pendant cette période.'])); +} + +// Vérification que l'ID du véhicule existe dans la base de données +$stmtResVehicule = $bdd->prepare("SELECT COUNT(*) FROM Reservations WHERE id_vehicule = :id_vehicule AND start < :end AND end > :start"); +$stmtResVehicule->bindParam(':id_vehicule', $id_vehicule, PDO::PARAM_INT); +$stmtResVehicule->bindParam(':start', $start, PDO::PARAM_STR); +$stmtResVehicule->bindParam(':end', $end, PDO::PARAM_STR); +$stmtResVehicule->execute(); +if ($stmtResVehicule->fetchColumn() > 0) { + die(json_encode(['status' => 'error', 'message' => 'Le véhicule est déjà réservé pendant cette période.'])); +} + try { // Démarrer la transaction $bdd->beginTransaction(); diff --git a/modele/profil.php b/modele/profil.php index 8315df8..8fd1fe5 100644 --- a/modele/profil.php +++ b/modele/profil.php @@ -1,67 +1,66 @@ prepare('INSERT INTO tentatives_connexion (pseudo, timestamp) VALUES (:pseudo, :timestamp)'); + $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); + $req->bindValue(':timestamp', $timestamp, PDO::PARAM_INT); + $req->execute(); } -function check_Password(){ - global $bdd; - $pseudo=$_POST['pseudo_connect']; - $req = $bdd->prepare('SELECT mdp, id, privilege, pseudo FROM Clients WHERE pseudo = :pseudo'); - $req->bindValue(':pseudo',$pseudo , PDO::PARAM_STR); - $req->execute(); - $data = $req->fetch(); - return $data; - } -} -function get_MemberCount(){ + + // Méthode pour vérifier si un utilisateur est bloqué + public function isUserBlocked($pseudo) { + global $bdd; + $blockDuration = 300; // Durée de blocage en secondes (300 secondes = 5 minutes) + $timestamp = time() - $blockDuration; // Calculer le timestamp il y a 5 minutes + + $req = $bdd->prepare('SELECT COUNT(*) AS attempts FROM tentatives_connexion WHERE pseudo = :pseudo AND timestamp > :timestamp'); + $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); + $req->bindValue(':timestamp', $timestamp, PDO::PARAM_INT); + $req->execute(); + $result = $req->fetch(PDO::FETCH_ASSOC); + + // Si le nombre de tentatives de connexion infructueuses dépasse un certain seuil, l'utilisateur est bloqué + return $result['attempts'] >= 3; // Vous pouvez ajuster ce nombre selon vos besoins + } + function get_MemberInfoId(){ global $bdd; - $TotalDesMembres = $bdd->query('SELECT COUNT(*) FROM Clients')->fetchColumn(); - return $TotalDesMembres; -} -function get_LastMember(){ - global $bdd; - $req = $bdd->query('SELECT pseudo, id FROM Clients ORDER BY id DESC LIMIT 0, 1'); - $data = $req->fetch(); - return $data; -} -function get_checkPseudo(){ - global $bdd; - $pseudo=$_POST['pseudo']; - $req = $bdd->prepare('SELECT COUNT(*) AS nbr FROM Clients WHERE pseudo =:pseudo'); - $req->bindValue(':pseudo',$pseudo, PDO::PARAM_STR); + $id=(isset($_SESSION['id_session']))?(int) $_SESSION['id_session']:0; + + //On prend les infos du membre + $req = $bdd->prepare('SELECT pseudo, mdp, email, avatar, adresse, prenom, nom, phone, dateenregistre FROM Clients WHERE id=:id'); + $req->bindValue(':id',$id,PDO::PARAM_INT); $req->execute(); - $pseudo_free=($req->fetchColumn()==0)?1:0; - $req->CloseCursor(); - return $pseudo_free; + $userData = $req->fetch(); + return $userData; + } + + public function checkCredentials($pseudo, $password) { + global $bdd; + $req = $bdd->prepare('SELECT mdp FROM Clients WHERE pseudo = :pseudo'); + $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); + $req->execute(); + $userData = $req->fetch(); + if ($userData && password_verify($password, $userData['mdp'])) { + return true; + } + return false; + } + + public function check_Password($pseudo) { + global $bdd; + $req = $bdd->prepare('SELECT mdp, id, privilege, pseudo FROM Clients WHERE pseudo = :pseudo'); + $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); + $req->execute(); + $userData = $req->fetch(PDO::FETCH_ASSOC); + return $userData ?: null; // Renvoyer null si aucune donnée n'est trouvée + } } -function get_checkMail(){ - global $bdd; - $email = $_POST['email']; - $req = $bdd->prepare('SELECT COUNT(*) AS nbr FROM Clients WHERE email =:mail'); - $req->bindValue(':mail',$email, PDO::PARAM_STR); - $req->execute(); - $mail_free=($req->fetchColumn()==0)?1:0; - $req->CloseCursor(); - return $mail_free; -} -function get_ProfilsInfo(){ // Informations de tout les vehicules dans un tableau - global $bdd; - $req = $bdd->prepare('SELECT id, privilege, dateenregistre, pseudo, prenom, nom, phone, adresse, mdp, email, avatar, phone FROM Clients ORDER BY id'); - $req->execute(); - $data = $req->fetchAll(PDO::FETCH_ASSOC); - return $data; -} -function get_MemberInfo(){ - global $bdd; - $membre = isset($_GET['m']) ? (int)$_GET['m'] : 0; - $req = $bdd->prepare('SELECT pseudo, mdp, email, avatar, adresse, prenom, nom, phone, dateenregistre FROM Clients WHERE id = :membre'); - $req->execute(array(':membre' => $membre)); - return $req->fetch(PDO::FETCH_ASSOC); +// Fonction pour vérifier si l'email est disponible +function isEmailAvailable($email) { + return get_checkMail($email); } function get_MemberInfoId(){ global $bdd; @@ -71,185 +70,190 @@ function get_MemberInfoId(){ $req = $bdd->prepare('SELECT pseudo, mdp, email, avatar, adresse, prenom, nom, phone, dateenregistre FROM Clients WHERE id=:id'); $req->bindValue(':id',$id,PDO::PARAM_INT); $req->execute(); - $data = $req->fetch(); - return $data; + $userData = $req->fetch(); + return $userData; } -function get_checkMail2(){ - global $bdd; - $id=(isset($_SESSION['id_session']))?(int) $_SESSION['id_session']:0; - //On commence donc par récupérer le mail - $req = $bdd->prepare('SELECT email FROM Clients WHERE id =:id'); - $req->bindValue(':id',$id,PDO::PARAM_INT); - $req->execute(); - $data = $req->fetch(); - return $data; + +function get_MemberCount() { + global $bdd; + return $bdd->query('SELECT COUNT(*) FROM Clients')->fetchColumn(); } -function get_Pseudo(){ - global $bdd; - $id=(isset($_SESSION['id_session']))?(int) $_SESSION['id_session']:0; - //On commence donc par récupérer le pseudo - $req = $bdd->prepare('SELECT pseudo FROM Clients WHERE id =:id'); - $req->bindValue(':id',$id,PDO::PARAM_INT); - $req->execute(); - $data = $req->fetch(); - return $data; + +function get_LastMember() { + global $bdd; + $req = $bdd->query('SELECT pseudo, id FROM Clients ORDER BY id DESC LIMIT 1'); + return $req->fetch(); } -function get_checkCopyMail(){ - global $bdd; - $email = $_POST['email']; - //Il faut que l'adresse email n'ait jamais été utilisée - $req = $bdd->prepare('SELECT COUNT(*) AS nbr FROM Clients WHERE email =:mail'); - $req->bindValue(':mail',$email,PDO::PARAM_STR); - $req->execute(); - $mail_free = ($req->fetchColumn()==0)?1:0; - $req->CloseCursor(); - return $mail_free; + +function get_checkPseudo($pseudo) { + global $bdd; + $req = $bdd->prepare('SELECT COUNT(*) AS nbr FROM Clients WHERE pseudo = :pseudo'); + $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); + $req->execute(); + return $req->fetchColumn() == 0; } -# Inscription modele -function post_Registre(){ - global $bdd; - $pseudo=$_POST['pseudo']; - $pass = /*md5*/($_POST['password']); - $email = $_POST['email']; - $localisation = $_POST['localisation']; - $prenom = $_POST['prenom']; - $nom = $_POST['nom']; - $phone = $_POST['phone']; - $image = $_FILES['avatar']; - // Créer le répertoire pour les images si nécessaire + +function get_checkMail($email) { + global $bdd; + $req = $bdd->prepare('SELECT COUNT(*) AS nbr FROM Clients WHERE email = :mail'); + $req->bindValue(':mail', $email, PDO::PARAM_STR); + $req->execute(); + return $req->fetchColumn() == 0; +} + +function get_checkMyMail($email,$id) { + global $bdd; + $req = $bdd->prepare('SELECT COUNT(*) AS nbr FROM Clients WHERE email = :mail AND id != :id'); + $req->bindValue(':mail', $email, PDO::PARAM_STR); + $req->bindValue(':id', $id, PDO::PARAM_INT); + $req->execute(); + return $req->fetchColumn() == 0; +} + +function get_ProfilsInfo() { + global $bdd; + $req = $bdd->query('SELECT id, privilege, dateenregistre, pseudo, prenom, nom, phone, adresse, mdp, email, avatar FROM Clients ORDER BY id'); + return $req->fetchAll(PDO::FETCH_ASSOC); +} + +function get_MemberInfo($id) { + global $bdd; + $req = $bdd->prepare('SELECT pseudo, mdp, email, avatar, adresse, prenom, nom, phone, dateenregistre FROM Clients WHERE id = :id'); + $req->bindValue(':id', $id, PDO::PARAM_INT); + $req->execute(); + return $req->fetch(PDO::FETCH_ASSOC); +} + +function post_Registre($pseudo, $password, $email, $localisation, $prenom, $nom, $phone, $avatar) { + global $bdd; + $hashedPassword = password_hash($password, PASSWORD_DEFAULT); + $imagePath = handleAvatarUpload($pseudo, $avatar); + + $req = $bdd->prepare('INSERT INTO Clients (pseudo, mdp, email, avatar, adresse, prenom, nom, phone, dateenregistre) + VALUES (:pseudo, :pass, :email, :avatar, :localisation, :prenom, :nom, :phone, NOW())'); + $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); + $req->bindValue(':pass', $hashedPassword, PDO::PARAM_STR); + $req->bindValue(':email', $email, PDO::PARAM_STR); + $req->bindValue(':avatar', $imagePath, PDO::PARAM_STR); + $req->bindValue(':localisation', $localisation, PDO::PARAM_STR); + $req->bindValue(':prenom', $prenom, PDO::PARAM_STR); + $req->bindValue(':nom', $nom, PDO::PARAM_STR); + $req->bindValue(':phone', $phone, PDO::PARAM_STR); + $req->execute(); +} + +// Pour la fonction post_UpdateProfile +function post_UpdateProfile($id, $pseudo, $pass = null, $email = null, $localisation = null, $phone = null, $avatar = null) { + global $bdd; + $fields = []; + $params = [':id' => $id]; + + if ($pass !== null) { + $fields[] = 'mdp = :mdp'; + $params[':mdp'] = password_hash($pass, PASSWORD_DEFAULT); + } + if ($email !== null) { + $fields[] = 'email = :mail'; + $params[':mail'] = $email; + } + if ($localisation !== null) { + $fields[] = 'adresse = :loc'; + $params[':loc'] = $localisation; + } + if ($phone !== null) { + $fields[] = 'phone = :phone'; + $params[':phone'] = $phone; + } + if (!empty($_FILES['avatar']['name'])) { + $fields[] = 'avatar = :avatar'; + $params[':avatar'] = handleAvatarUpload($pseudo, $_FILES['avatar']); + } + + $sql = 'UPDATE Clients SET ' . implode(', ', $fields) . ' WHERE id = :id'; + $req = $bdd->prepare($sql); + foreach ($params as $key => $value) { + $req->bindValue($key, $value, PDO::PARAM_STR); + } + $req->execute(); +} + +function handleAvatarUpload($pseudo, $avatar) { $dirPath = "./images/avatars/" . $pseudo . "/"; + $Path = "./images/avatars/" . $pseudo . "/"; + $defaultDirImagePath = "./images/avatars/img_user.jpg"; + $dirImagePath = "./images/avatars/" . $pseudo . "/img_user.jpg"; + $imagePath = "/images/avatars/" . $pseudo . "/img_user.jpg"; if (!is_dir($dirPath)) { mkdir($dirPath, 0700, true); } - // Vérifier si l'image est fournie et valide - if (!empty($image['size']) && $image['error'] === UPLOAD_ERR_OK) { - $nomimage = edit_avatar($image, $pseudo); + if (!empty($avatar['size']) && $avatar['error'] === UPLOAD_ERR_OK) { + return edit_avatar($avatar, $pseudo); } else { - // Utiliser une image par défaut si aucune image n'est fournie - $defaultImagePath = "./images/avatars/img_user.jpg"; - $dirPath = "./images/avatars/" . $pseudo . "/img_user.jpg"; - $nomimage = "/images/avatars/" . $pseudo . "/img_user.jpg"; - copy($defaultImagePath, $dirPath); + copy($defaultDirImagePath, $dirImagePath); + return $imagePath; } - $req = $bdd->prepare('INSERT INTO Clients (pseudo, mdp, email, avatar, adresse, prenom, nom, phone, dateenregistre) - VALUES (:pseudo, :pass, :email, :nomimage, :localisation, :prenom, :nom, :phone, NOW())'); - $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); - $req->bindValue(':pass', $pass, PDO::PARAM_STR); - $req->bindValue(':email', $email, PDO::PARAM_STR); - $req->bindValue(':nomimage', $nomimage, PDO::PARAM_STR); - $req->bindValue(':localisation', $localisation, PDO::PARAM_STR); - $req->bindValue(':prenom', $prenom, PDO::PARAM_STR); - $req->bindValue(':nom', $nom, PDO::PARAM_STR); - $req->bindValue(':phone', $phone, PDO::PARAM_STR); - $req->execute(); +} + +function edit_avatar($image, $pseudo) { + $defaultDirImagePath = "./images/avatars/img_user.jpg"; + $dirImagePath = "./images/avatars/" . $pseudo . "/img_user.jpg"; + $imagePath = "/images/avatars/" . $pseudo . "/img_user.jpg"; + $newWidth = 300; + $newHeight = 300; + list($width, $height) = getimagesize($image['tmp_name']); + $imageResized = imagecreatetruecolor($newWidth, $newHeight); + + switch (exif_imagetype($image['tmp_name'])) { + case IMAGETYPE_JPEG: + $imageSource = imagecreatefromjpeg($image['tmp_name']); + break; + case IMAGETYPE_PNG: + $imageSource = imagecreatefrompng($image['tmp_name']); + break; + case IMAGETYPE_GIF: + $imageSource = imagecreatefromgif($image['tmp_name']); + break; + default: + return "Unsupported image type"; + } + + imagecopyresampled($imageResized, $imageSource, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); + imagejpeg($imageResized, $dirImagePath, 85); + imagedestroy($imageResized); + imagedestroy($imageSource); + return $imagePath; } function post_RemoveAvatar($pseudo){ global $bdd; $id=(isset($_SESSION['id_session']))?(int) $_SESSION['id_session']:0; + $defaultDirImagePath = "./images/avatars/img_user.jpg"; + $dirImagePath = "./images/avatars/" . $pseudo . "/img_user.jpg"; + $imagePath = "/images/avatars/" . $pseudo . "/img_user.jpg"; // Utiliser une image par défaut si aucune image n'est fournie - $defaultImagePath = "./images/avatars/img_user.jpg"; - $dirPath = "./images/avatars/" . $pseudo . "/img_user.jpg"; - $nomimage = "./images/avatars/" . $pseudo . "/img_user.jpg"; - copy($defaultImagePath, $dirPath); -} -function post_UpdateProfile($pseudo, $pass = null, $email = null, $localisation = null, $phone = null) { - global $bdd; - $id = isset($_SESSION['id_session']) ? (int)$_SESSION['id_session'] : 0; - // Mise à jour de l'avatar - if (isset($_FILES['avatar'])) { - $image = $_FILES['avatar']; - $dirPath = "./images/avatars/" . $pseudo . "/"; - // Vérifier si l'image est fournie et valide - if (!empty($image['size']) && $image['error'] === UPLOAD_ERR_OK) { - $nomimage = edit_avatar($image, $pseudo); - } else { - // Utiliser une image par défaut si aucune image n'est fournie - $defaultImagePath = "./images/avatars/img_user.jpg"; - $dirPath = "./images/avatars/" . $pseudo . "/img_user.jpg"; - $nomimage = "./images/avatars/" . $pseudo . "/img_user.jpg"; - file_exists($nomimage) ? : copy($defaultImagePath, $nomimage); - } - } - // Mise à jour des informations du membre - if ($pass !== null || $email !== null || $localisation !== null || $phone !== null) { - $fields = []; - $params = [':id' => $id]; - if ($pass !== null) { - $fields[] = 'mdp = :mdp'; - $params[':mdp'] = $pass; // Utilisez password_hash($pass, PASSWORD_DEFAULT) pour sécuriser les mots de passe - } - if ($email !== null) { - $fields[] = 'email = :mail'; - $params[':mail'] = $email; - } - if ($localisation !== null) { - $fields[] = 'adresse = :loc'; - $params[':loc'] = $localisation; - } - if ($phone !== null) { - $fields[] = 'phone = :phone'; - $params[':phone'] = $phone; - } - if (!empty($fields)) { - $sql = 'UPDATE Clients SET ' . implode(', ', $fields) . ' WHERE id = :id'; - $req = $bdd->prepare($sql); - $req->execute($params); - } - } -} -function edit_avatar($image, $pseudo) { - if (isset($image)) { - $source = $image['tmp_name']; - $dir = "./images/avatars/" . $pseudo . "/img_user.jpg"; - // Redimensionner l'image à la taille spécifiée (300x300) - $newWidth = 300; - $newHeight = 300; - list($width, $height) = getimagesize($source); - $imageResized = imagecreatetruecolor($newWidth, $newHeight); - switch (exif_imagetype($source)) { - case IMAGETYPE_JPEG: - $imageSource = imagecreatefromjpeg($source); - break; - case IMAGETYPE_PNG: - $imageSource = imagecreatefrompng($source); - break; - case IMAGETYPE_GIF: - $imageSource = imagecreatefromgif($source); - break; - default: - return "Unsupported image type"; - } - imagecopyresized($imageResized, $imageSource, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); - // Sauvegarder l'image redimensionnée en JPEG - imagejpeg($imageResized, $dir, 85); // Le troisième paramètre est la qualité de l'image JPEG (0-100) - // Libérer la mémoire - imagedestroy($imageResized); - imagedestroy($imageSource); - // Retourner le chemin relatif de l'image redimensionnée - return $dir; - } + copy($defaultDirImagePath, $imagePath); } + function post_RemoveClient($id) { global $bdd; - $id = $_SESSION['id_session']; - // Récupérer le chemin de l'image à partir de la base de données + // Suppression de l'image $req = $bdd->prepare('SELECT avatar FROM Clients WHERE id= :id'); $req->bindValue(':id', $id, PDO::PARAM_INT); $req->execute(); - $data = $req->fetch(PDO::FETCH_ASSOC); - if ($data) { - // Supprimer l'image - $imagePath = $data['avatar']; - unlink($imagePath); - // Supprimer le dossier + $userData = $req->fetch(PDO::FETCH_ASSOC); + if ($userData) { + $imagePath = $userData['avatar']; + if (file_exists($imagePath)) { + unlink($imagePath); + } $folderPath = dirname($imagePath); - rmdir($folderPath); + if (is_dir($folderPath)) { + rmdir($folderPath); + } } - // Supprimer le véhicule de la base de données + // Suppression de l'utilisateur de la base de données $req = $bdd->prepare('DELETE FROM Clients WHERE id=:id'); $req->bindValue(':id', $id, PDO::PARAM_INT); $req->execute(); - $req->closeCursor(); - session_destroy(); // Vous pouvez adapter cette étape en fonction de votre gestion de sessions + session_destroy(); } ?> \ No newline at end of file diff --git a/modele/vehicule.php b/modele/vehicule.php index 681ec95..7f1afce 100644 --- a/modele/vehicule.php +++ b/modele/vehicule.php @@ -1,5 +1,5 @@ prepare('SELECT COUNT(*) AS nbr FROM Vehicules WHERE plaque =:plaque'); @@ -65,11 +65,8 @@ function post_RemoveVehicule($id) { $data = $req->fetch(PDO::FETCH_ASSOC); if ($data) { // Supprimer l'image - $imagePath = $data['image']; + $imagePath = "." . $data['image']; unlink($imagePath); - // Supprimer le dossier - $folderPath = dirname($imagePath); - rmdir($folderPath); } // Supprimer le véhicule de la base de données $req = $bdd->prepare('DELETE FROM Vehicules WHERE id=:id'); @@ -94,9 +91,9 @@ function post_RegistreCar(){ // Ajout vehicule en DB $nomimage = edit_image($image, $plaque); } else { // Utiliser une image par défaut si aucune image n'est fournie - $defaultImagePath = "./images/vehicules/img_voiture.png"; - $dirPath = "./images/vehicules/" . $plaque . "/img_voiture.png"; - $nomimage = "/images/vehicules/" . $plaque . "/img_voiture.png"; + $defaultImagePath = "./images/vehicules/img_vehicule.png"; + $dirPath = "./images/vehicules/" . $plaque . "/img_vehicule.png"; + $nomimage = "/images/vehicules/" . $plaque . "/img_vehicule.png"; copy($defaultImagePath, $dirPath); } $req = $bdd->prepare('INSERT INTO Vehicules (plaque, marque, modele, annee, image) VALUES (:plaque, :marque, :modele, :annee, :nomimage)'); @@ -111,6 +108,7 @@ function edit_image($image, $plaque) { if (isset($image)) { $source = $image['tmp_name']; $dir = "./images/vehicules/" . $plaque . "/img_vehicule.png"; + $nomimage = "/images/vehicules/" . $plaque . "/img_vehicule.png"; // Redimensionner l'image à la taille spécifiée (300x300) $newWidth = 300; $newHeight = 300; @@ -136,7 +134,62 @@ function edit_image($image, $plaque) { imagedestroy($imageResized); imagedestroy($imageSource); // Retourner le chemin relatif de l'image redimensionnée - return $dir; + return $nomimage; } } +// Fonction pour afficher un message d'erreur +function displayInscriptionErrorMessage($errors) { + echo ''; +} + +// Fonction pour afficher un message de succès +function displayInscriptionSuccessMessage() { + echo ''; +} ?> \ No newline at end of file diff --git a/sql/CARIA.sql b/sql/CARIA.sql new file mode 100644 index 0000000..73f3f5b --- /dev/null +++ b/sql/CARIA.sql @@ -0,0 +1,153 @@ +use CARIA; +DROP TABLE IF EXISTS tentatives_connexion,Reservations,Clients,Vehicules; + +CREATE TABLE tentatives_connexion ( + id INT AUTO_INCREMENT PRIMARY KEY, + pseudo VARCHAR(25) NOT NULL, + timestamp INT NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +-- +-- Structure de la table Clients +-- +CREATE TABLE Clients ( + id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, + privilege int(11) DEFAULT 2, + dateenregistre timestamp NOT NULL DEFAULT current_timestamp(), + pseudo varchar(25), + prenom varchar(25) DEFAULT NULL, + nom varchar(25) DEFAULT NULL, + adresse varchar(50) DEFAULT NULL, + phone varchar(15) DEFAULT NULL, + email varchar(30) DEFAULT NULL, + mdp varchar(60) NOT NULL, + avatar varchar(250) DEFAULT '/images/avatars/img_user.jpg' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; + +-- +-- Structure de la table Vehicules +-- +CREATE TABLE Vehicules ( + id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, + plaque varchar(9) NOT NULL, + marque varchar(50) DEFAULT NULL, + modele varchar(50) DEFAULT NULL, + annee int(4) DEFAULT NULL, + image varchar(250) NOT NULL DEFAULT '/images/vehicules/img_vehicule.png', + disponible tinyint(1) NOT NULL DEFAULT 0, + latitude decimal(9,6) NOT NULL DEFAULT 48.000000, + longitude decimal(9,6) NOT NULL DEFAULT 2.000000, + ip varchar(40) NOT NULL DEFAULT '127.0.0.1' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; + +-- +-- Structure de la table Reservations +-- +CREATE TABLE Reservations ( + id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, + id_user int(11) DEFAULT NULL, + id_vehicule int(11) DEFAULT NULL, + title varchar(255) DEFAULT NULL, + start timestamp NULL DEFAULT NULL, + end timestamp NULL DEFAULT NULL, + CONSTRAINT uc_vehicule_reservation UNIQUE (id_vehicule, start, end), + CONSTRAINT uc_client_reservation UNIQUE (id_user, start, end), + CONSTRAINT Reservations_idfk_1 FOREIGN KEY (id_vehicule) REFERENCES Vehicules (id), + CONSTRAINT Reservations_idfk_2 FOREIGN KEY (id_user) REFERENCES Clients (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; + +-- Index pour accélérer les recherches +CREATE INDEX idx_id_user ON Reservations (id_user); +CREATE INDEX idx_id_vehicule ON Reservations (id_vehicule) USING BTREE; + + + +use CARIA; +-- +-- Déchargement des données de la table Clients +-- +INSERT INTO Clients (privilege, dateenregistre, pseudo, prenom, nom, adresse, mdp, email, avatar, phone) VALUES +(1, '2016-09-11 22:00:00', 'sa', 'sa', 'pc', 'sa', '$2y$10$SGOcYko1PzYekMHfLBvlPOFUL3V7r0zKSxrrfaNUMXv.Mm3mQizvC', 'sa@gmail.com', '/images/avatars/sa/img_user.jpg', "0658293476"), +(2, NOW(), 'utilisateur1', 'John', 'Doe', '123 Rue de Paris', '$2y$10$OkaujySOK.TWqiNOX4BSreuc7OFYuWji9EvruDlo71RRoXNR0HCbC', 'john.doe@example.com', '/images/avatars/utilisateur1/img_user.jpg', '0123456789'), +(2, NOW(), 'utilisateur2', 'Alice', 'Smith', '456 Avenue des Champs-Élysées', '$2y$10$rhZHTmq9QZA5uRyUr22sauEvHXKAZo.mjrLAsZ.SpImF.aqG5GSj6', 'alice.smith@example.com', '/images/avatars/utilisateur2/img_user.jpg', '9876543210'), +(2, NOW(), 'utilisateur3', 'Michael', 'Johnson', '789 Boulevard Saint-Michel', '$2y$10$/b9EglJ5RlO8vZK36PjjAuosbVkuB6T6xnr2uvq.sMtIg3hNjN0nG', 'michael.johnson@example.com', '/images/avatars/utilisateur3/img_user.jpg', '1234567890'), +(2, NOW(), 'utilisateur4', 'Emma', 'Brown', '1011 Rue de Rivoli', 'motdepasse4', 'emma.brown@example.com', '/images/avatars/utilisateur4/img_user.jpg', '0987654321'), +(2, NOW(), 'utilisateur5', 'David', 'Wilson', '1213 Rue du Faubourg Saint-Honoré', '$2y$10$9E1c4mmQqpgry7m/TuDU/eCsIb5HAWzPpK1BkP6Slg.4r.huK1gMS', 'david.wilson@example.com', '/images/avatars/utilisateur5/img_user.jpg', '1122334455'), +(2, NOW(), 'utilisateur6', 'Sophia', 'Martinez', '1415 Avenue Montaigne', '$2y$10$ghZ9/hsN4EdhaJ0JyUbbVO5KaYpRMx.ax9yz4ZCAzAQ5NXL9vzuIW', 'sophia.martinez@example.com', '/images/avatars/utilisateur6/img_user.jpg', '5544332211'), +(2, NOW(), 'utilisateur7', 'Matthew', 'Anderson', '1617 Avenue de la Grande Armée', '$2y$10$kpaoSFeugXSq8R461rQJ/uH6zM/k841Oi5tz8zjmUboiM7swsI9vC', 'matthew.anderson@example.com', '/images/avatars/utilisateur7/img_user.jpg', '6677889900'), +(2, NOW(), 'utilisateur8', 'Olivia', 'Taylor', '1819 Rue de la Paix', '$2y$10$5qpp5BCM1BcYMt2MdTld9.6MeCUo96yl0T1TqLtxlrojE1GD8H0z.', 'olivia.taylor@example.com', '/images/avatars/utilisateur8/img_user.jpg', '7788990011'), +(2, NOW(), 'utilisateur9', 'Daniel', 'Thomas', '2021 Boulevard Haussmann', '$2y$10$lxeSumVQvBQ2i4u9EH2a1OnmfvKnWtpSzbAQ6H/f8e/nSOvJJZ8NW', 'daniel.thomas@example.com', '/images/avatars/utilisateur9/img_user.jpg', '8899001122'), +(2, NOW(), 'utilisateur10', 'Emily', 'Jackson', '2223 Avenue Victor Hugo', '$2y$10$i2.MtLwCRowHpdxbPB//EeGHEOD0jlKH.7T5/5UIFiFy/0WZedspW', 'emily.jackson@example.com', '/images/avatars/utilisateur10/img_user.jpg', '9900112233'), +(2, NOW(), 'utilisateur11', 'Sophie', 'Martin', '2325 Rue Saint-Antoine', '$2y$10$b.rhvW.vknrfCgRNFIIp3Oha/Hq1.jSpn90DUnPxPW3/kJdqtbGCK', 'sophie.martin@example.com', '/images/avatars/utilisateur11/img_user.jpg', '1122334455'), +(2, NOW(), 'utilisateur12', 'William', 'Thompson', '2427 Avenue des Ternes', '$2y$10$HUqNXYpyo2uP1E.tgR/z8uU5O4n365JBiUH5p7qB2le5gO0.infHe', 'william.thompson@example.com', '/images/avatars/utilisateur12/img_user.jpg', '2244668899'), +(2, NOW(), 'utilisateur13', 'Charlotte', 'Clark', '2529 Rue de la Pompe', '$2y$10$SuYzFoQdjROkK6xOaBm1L.4higlSCJX5Z0QVItBjkx5/qUMsX9tTS', 'charlotte.clark@example.com', '/images/avatars/utilisateur13/img_user.jpg', '3366990022'), +(2, NOW(), 'utilisateur14', 'James', 'White', '2631 Boulevard Malesherbes', '$2y$10$21dxDMovRzObUfIO1Ykh9eiOnW0tjbZE7JbgnZMLWlA3kJ/BZEVuy', 'james.white@example.com', '/images/avatars/utilisateur14/img_user.jpg', '4488112233'), +(2, NOW(), 'utilisateur15', 'Ava', 'Hall', '2733 Avenue de la République', '$2y$10$E4NL1lLTNfptHjeozX2x9OYji2H5uldcvrEd7QaezvmAWnWc7XGFK', 'ava.hall@example.com', '/images/avatars/utilisateur15/img_user.jpg', '5511223344'), +(2, NOW(), 'utilisateur16', 'Noah', 'Lewis', '2835 Rue de Passy', '$2y$10$xjrpINALKuGkFLKTNlMcVOk9NoYBfoc6yA4Pvt66mMGHykPPLlKzW', 'noah.lewis@example.com', '/images/avatars/utilisateur16/img_user.jpg', '6633445566'), +(2, NOW(), 'utilisateur17', 'Mia', 'Adams', '2937 Boulevard Saint-Germain', '$2y$10$rQuvGd48.B6EmoYAl7d2PeEMvSMQsDduQPvcWzxbtLSGVL/066hpW', 'mia.adams@example.com', '/images/avatars/utilisateur17/img_user.jpg', '7755668899'), +(2, NOW(), 'utilisateur18', 'Benjamin', 'Young', '3039 Rue du Bac', '$2y$10$wMFNjwJJPkAXYF31Ot3Ko.L8acwtiCOx2waqQKzqQ8z/PJkLuDz1i', 'benjamin.young@example.com', '/images/avatars/utilisateur18/img_user.jpg', '8877665544'), +(2, NOW(), 'utilisateur19', 'Ella', 'Harris', '3141 Avenue Marceau', '$2y$10$q4G7cKwWSFvxcTf95L72s./aqtuN0h.3gcc3w4pfFX.EeUgDIZAea', 'ella.harris@example.com', '/images/avatars/utilisateur19/img_user.jpg', '9900887766'), +(2, NOW(), 'utilisateur20', 'Lucas', 'King', '3243 Rue de Sèvres', '$2y$10$U3B8F76RFmcsQdTP.QxApeLQHBkH1HSKzISz5ndXS9jNpF8uc4dQG', 'lucas.king@example.com', '/images/avatars/utilisateur20/img_user.jpg', '0011223344'); + +-- +-- Déchargement des données de la table Vehicules +-- +INSERT INTO Vehicules (plaque, image, marque, modele, annee, disponible, latitude, longitude, ip) VALUES +("GH209RH", '/images/vehicules/GH209RH/img_vehicule.png', 'Tesla', 'Model S', 2023, 1, 48.358844, 3.294351, '192.168.74.194'), +("PH940OP", '/images/vehicules/PH940OP/img_vehicule.png', 'Nissan', 'Leaf', 2022, 1, 48.8566, 6.3522, '127.0.0.1'), +("XD738UJ", '/images/vehicules/XD738UJ/img_vehicule.png', 'BMW', 'i3 S', 2024, 0, 48.6566, 2.3522, '127.0.0.1'), +("WSD754YH", '/images/vehicules/WSD754YH/img_vehicule.png', 'Toyota', 'Prius', 2023, 1, 48.0566, 3.3522, '127.0.0.1'), +("IO334PO", '/images/vehicules/IO334PO/img_vehicule.png', 'Chevrolet', 'Bolt', 2023, 0, 48.7566, 7.3522, '127.0.0.1'), +('AA123AA', '/images/vehicules/AA123AA/img_vehicule.png', 'Renault', 'Clio', 2018, 1, 48.558844, 2.294351, '127.0.0.1'), +('BB456BB', '/images/vehicules/BB456BB/img_vehicule.png', 'Peugeot', '208', 2016, 1, 48.2566, 1.3522, '127.0.0.1'), +('CC789CC', '/images/vehicules/CC789CC/img_vehicule.png', 'Volkswagen', 'Golf', 2019, 1, 48.8566, 9.3522, '127.0.0.1'), +('DD012DD', '/images/vehicules/DD012DD/img_vehicule.png', 'Ford', 'Fiesta', 2015, 1, 49.8566, 6.3522, '127.0.0.1'), +('EE345EE', '/images/vehicules/EE345EE/img_vehicule.png', 'Toyota', 'Yaris', 2017, 1, 45.8566, 4.3522, '127.0.0.1'), +('FF678FF', '/images/vehicules/FF678FF/img_vehicule.png', 'Audi', 'A3', 2014, 1, 42.8566, 2.3522, '127.0.0.1'), +('GG901GG', '/images/vehicules/GG901GG/img_vehicule.png', 'BMW', 'Series 1', 2020, 1, 46.8566, 3.3522, '127.0.0.1'), +('HH234HH', '/images/vehicules/HH234HH/img_vehicule.png', 'Mercedes-Benz', 'A-Class', 2019, 1, 48.8566, 2.3522, '127.0.0.1'), +('II567II', '/images/vehicules/II567II/img_vehicule.png', 'Hyundai', 'i30', 2016, 1, 50.8566, 7.3522, '127.0.0.1'), +('JJ890JJ', '/images/vehicules/JJ890JJ/img_vehicule.png', 'Kia', 'Rio', 2017, 1, 49.8566, 4.3522, '127.0.0.1'), +('KK123KK', '/images/vehicules/KK123KK/img_vehicule.png', 'Nissan', 'Micra', 2018, 1, 44.8566, 2.3522, '127.0.0.1'), +('LL456LL', '/images/vehicules/LL456LL/img_vehicule.png', 'Fiat', '500', 2015, 1, 43.8566, 2.6522, '127.0.0.1'), +('MM789MM', '/images/vehicules/MM789MM/img_vehicule.png', 'Skoda', 'Fabia', 2019, 1, 47.8566, 2.8522, '127.0.0.1'), +('NN012NN', '/images/vehicules/NN012NN/img_vehicule.png', 'Volvo', 'V40', 2016, 1, 45.8566, 2.4522, '127.0.0.1'), +('OO345OO', '/images/vehicules/OO345OO/img_vehicule.png', 'Seat', 'Ibiza', 2017, 1, 48.8566, 2.3522, '127.0.0.1'), +('PP678PP', '/images/vehicules/PP678PP/img_vehicule.png', 'Mini', 'Cooper', 2020, 1, 43.8566, 2.7522, '127.0.0.1'), +('QQ901QQ', '/images/vehicules/QQ901QQ/img_vehicule.png', 'Citroen', 'C3', 2018, 1, 44.8566, 2.2522, '127.0.0.1'), +('RR234RR', '/images/vehicules/RR234RR/img_vehicule.png', 'Dacia', 'Sandero', 2015, 1, 45.8566, 4.3522, '127.0.0.1'), +('SS567SS', '/images/vehicules/SS567SS/img_vehicule.png', 'Land Rover', 'Evoque', 2021, 1, 46.8566, 8.3522, '127.0.0.1'), +('TT890TT', '/images/vehicules/TT890TT/img_vehicule.png', 'Jeep', 'Renegade', 2019, 1, 47.8566, 2.9522, '127.0.0.1'); +-- +-- Déchargement des données de la table Reservations +-- +INSERT INTO Reservations (id_user, id_vehicule, title, start, end) VALUES +(1, 1, 'Reservation 1', '2024-06-01 08:00:00', '2024-06-01 10:00:00'), +(2, 2, 'Reservation 2', '2024-06-02 09:00:00', '2024-06-02 11:00:00'), +(3, 3, 'Reservation 3', '2024-06-03 10:00:00', '2024-06-03 12:00:00'), +(4, 4, 'Reservation 4', '2024-06-04 11:00:00', '2024-06-04 13:00:00'), +(5, 5, 'Reservation 5', '2024-06-05 12:00:00', '2024-06-05 14:00:00'), +(6, 6, 'Reservation 6', '2024-06-06 13:00:00', '2024-06-06 15:00:00'), +(7, 7, 'Reservation 7', '2024-06-07 14:00:00', '2024-06-07 16:00:00'), +(8, 8, 'Reservation 8', '2024-06-08 15:00:00', '2024-06-08 17:00:00'), +(9, 9, 'Reservation 9', '2024-06-09 16:00:00', '2024-06-09 18:00:00'), +(10, 10, 'Reservation 10', '2024-06-10 17:00:00', '2024-06-10 19:00:00'), +(1, 2, 'Reservation 11', '2024-07-01 08:00:00', '2024-07-01 10:00:00'), +(2, 3, 'Reservation 12', '2024-07-02 09:00:00', '2024-07-02 11:00:00'), +(3, 4, 'Reservation 13', '2024-07-03 10:00:00', '2024-07-03 12:00:00'), +(4, 5, 'Reservation 14', '2024-07-04 11:00:00', '2024-07-04 13:00:00'), +(5, 6, 'Reservation 15', '2024-07-05 12:00:00', '2024-07-05 14:00:00'), +(6, 7, 'Reservation 16', '2024-07-06 13:00:00', '2024-07-06 15:00:00'), +(7, 8, 'Reservation 17', '2024-07-07 14:00:00', '2024-07-07 16:00:00'), +(8, 9, 'Reservation 18', '2024-07-08 15:00:00', '2024-07-08 17:00:00'), +(9, 10, 'Reservation 19', '2024-07-09 16:00:00', '2024-07-09 18:00:00'), +(10, 1, 'Reservation 20', '2024-07-10 17:00:00', '2024-07-10 19:00:00'), +(1, 3, 'Reservation 21', '2024-08-01 08:00:00', '2024-08-01 10:00:00'), +(2, 4, 'Reservation 22', '2024-08-02 09:00:00', '2024-08-02 11:00:00'), +(3, 5, 'Reservation 23', '2024-08-03 10:00:00', '2024-08-03 12:00:00'), +(4, 6, 'Reservation 24', '2024-08-04 11:00:00', '2024-08-04 13:00:00'), +(5, 7, 'Reservation 25', '2024-08-05 12:00:00', '2024-08-05 14:00:00'), +(6, 8, 'Reservation 26', '2024-08-06 13:00:00', '2024-08-06 15:00:00'), +(7, 9, 'Reservation 27', '2024-08-07 14:00:00', '2024-08-07 16:00:00'), +(8, 10, 'Reservation 28', '2024-08-08 15:00:00', '2024-08-08 17:00:00'), +(9, 1, 'Reservation 29', '2024-08-09 16:00:00', '2024-08-09 18:00:00'), +(10, 2, 'Reservation 30', '2024-08-10 17:00:00', '2024-08-10 19:00:00'); \ No newline at end of file diff --git a/sql/CREATE TABLES.sql b/sql/CREATE TABLES.sql deleted file mode 100644 index 75a43ad..0000000 --- a/sql/CREATE TABLES.sql +++ /dev/null @@ -1,122 +0,0 @@ -use CARIA; -DROP TABLE IF EXISTS Reservations,Clients,Vehicules; - --- --- Structure de la table Clients --- -CREATE TABLE Clients ( - id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, - privilege int(11) DEFAULT 2, - dateenregistre timestamp NOT NULL DEFAULT current_timestamp(), - pseudo varchar(25), - prenom varchar(25) DEFAULT NULL, - nom varchar(25) DEFAULT NULL, - adresse varchar(50) DEFAULT NULL, - phone varchar(15) DEFAULT NULL, - email varchar(30) DEFAULT NULL, - mdp varchar(32) NOT NULL, - avatar varchar(250) DEFAULT '/images/avatars/img_user.jpg' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; - --- --- Structure de la table Vehicules --- -CREATE TABLE Vehicules ( - id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, - plaque varchar(9) NOT NULL, - marque varchar(50) DEFAULT NULL, - modele varchar(50) DEFAULT NULL, - annee int(4) DEFAULT NULL, - image varchar(250) NOT NULL DEFAULT '/images/vehicules/img_voiture.png', - disponible tinyint(1) NOT NULL DEFAULT 0, - latitude decimal(9,6) NOT NULL DEFAULT 48.000000, - longitude decimal(9,6) NOT NULL DEFAULT 2.000000, - ip varchar(40) NOT NULL DEFAULT '127.0.0.1' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; - --- --- Structure de la table Reservations --- -CREATE TABLE Reservations ( - id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, - id_user int(11) DEFAULT NULL, - id_vehicule int(11) DEFAULT NULL, - title varchar(255) DEFAULT NULL, - start timestamp NULL DEFAULT NULL, - end timestamp NULL DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; - - - - - -use CARIA; --- --- Déchargement des données de la table Clients --- -INSERT INTO Clients (privilege, dateenregistre, pseudo, prenom, nom, adresse, mdp, email, avatar, phone) VALUES -(1, '2016-09-11 22:00:00', 'sa', 'sa', 'pc', 'sa', 'sa', 'sa@gmail.com', '/images/avatars/sa/img_user.jpg', "0658293476"), -(2, NOW(), 'utilisateur1', 'John', 'Doe', '123 Rue de Paris', 'motdepasse1', 'john.doe@example.com', '/images/avatars/utilisateur1/img_user.jpg', '0123456789'), -(2, NOW(), 'utilisateur2', 'Alice', 'Smith', '456 Avenue des Champs-Élysées', 'motdepasse2', 'alice.smith@example.com', '/images/avatars/utilisateur2/img_user.jpg', '9876543210'), -(2, NOW(), 'utilisateur3', 'Michael', 'Johnson', '789 Boulevard Saint-Michel', 'motdepasse3', 'michael.johnson@example.com', '/images/avatars/utilisateur3/img_user.jpg', '1234567890'), -(2, NOW(), 'utilisateur4', 'Emma', 'Brown', '1011 Rue de Rivoli', 'motdepasse4', 'emma.brown@example.com', '/images/avatars/utilisateur4/img_user.jpg', '0987654321'), -(2, NOW(), 'utilisateur5', 'David', 'Wilson', '1213 Rue du Faubourg Saint-Honoré', 'motdepasse5', 'david.wilson@example.com', '/images/avatars/utilisateur5/img_user.jpg', '1122334455'), -(2, NOW(), 'utilisateur6', 'Sophia', 'Martinez', '1415 Avenue Montaigne', 'motdepasse6', 'sophia.martinez@example.com', '/images/avatars/utilisateur6/img_user.jpg', '5544332211'), -(2, NOW(), 'utilisateur7', 'Matthew', 'Anderson', '1617 Avenue de la Grande Armée', 'motdepasse7', 'matthew.anderson@example.com', '/images/avatars/utilisateur7/img_user.jpg', '6677889900'), -(2, NOW(), 'utilisateur8', 'Olivia', 'Taylor', '1819 Rue de la Paix', 'motdepasse8', 'olivia.taylor@example.com', '/images/avatars/utilisateur8/img_user.jpg', '7788990011'), -(2, NOW(), 'utilisateur9', 'Daniel', 'Thomas', '2021 Boulevard Haussmann', 'motdepasse9', 'daniel.thomas@example.com', '/images/avatars/utilisateur9/img_user.jpg', '8899001122'), -(2, NOW(), 'utilisateur10', 'Emily', 'Jackson', '2223 Avenue Victor Hugo', 'motdepasse10', 'emily.jackson@example.com', '/images/avatars/utilisateur10/img_user.jpg', '9900112233'), -(2, NOW(), 'utilisateur11', 'Sophie', 'Martin', '2325 Rue Saint-Antoine', 'motdepasse11', 'sophie.martin@example.com', '/images/avatars/utilisateur11/img_user.jpg', '1122334455'), -(2, NOW(), 'utilisateur12', 'William', 'Thompson', '2427 Avenue des Ternes', 'motdepasse12', 'william.thompson@example.com', '/images/avatars/utilisateur12/img_user.jpg', '2244668899'), -(2, NOW(), 'utilisateur13', 'Charlotte', 'Clark', '2529 Rue de la Pompe', 'motdepasse13', 'charlotte.clark@example.com', '/images/avatars/utilisateur13/img_user.jpg', '3366990022'), -(2, NOW(), 'utilisateur14', 'James', 'White', '2631 Boulevard Malesherbes', 'motdepasse14', 'james.white@example.com', '/images/avatars/utilisateur14/img_user.jpg', '4488112233'), -(2, NOW(), 'utilisateur15', 'Ava', 'Hall', '2733 Avenue de la République', 'motdepasse15', 'ava.hall@example.com', '/images/avatars/utilisateur15/img_user.jpg', '5511223344'), -(2, NOW(), 'utilisateur16', 'Noah', 'Lewis', '2835 Rue de Passy', 'motdepasse16', 'noah.lewis@example.com', '/images/avatars/utilisateur16/img_user.jpg', '6633445566'), -(2, NOW(), 'utilisateur17', 'Mia', 'Adams', '2937 Boulevard Saint-Germain', 'motdepasse17', 'mia.adams@example.com', '/images/avatars/utilisateur17/img_user.jpg', '7755668899'), -(2, NOW(), 'utilisateur18', 'Benjamin', 'Young', '3039 Rue du Bac', 'motdepasse18', 'benjamin.young@example.com', '/images/avatars/utilisateur18/img_user.jpg', '8877665544'), -(2, NOW(), 'utilisateur19', 'Ella', 'Harris', '3141 Avenue Marceau', 'motdepasse19', 'ella.harris@example.com', '/images/avatars/utilisateur19/img_user.jpg', '9900887766'), -(2, NOW(), 'utilisateur20', 'Lucas', 'King', '3243 Rue de Sèvres', 'motdepasse20', 'lucas.king@example.com', '/images/avatars/utilisateur20/img_user.jpg', '0011223344'); - --- --- Déchargement des données de la table Vehicules --- -INSERT INTO Vehicules (plaque, image, marque, modele, annee, disponible, latitude, longitude, ip) VALUES -("GH209RH", '/images/vehicules/GH209RH/img_voiture.png', 'Tesla', 'Model S', 2023, 1, 48.358844, 3.294351, '192.168.74.194'), -("PH940OP", '/images/vehicules/PH940OP/img_voiture.png', 'Nissan', 'Leaf', 2022, 1, 48.8566, 6.3522, '127.0.0.1'), -("XD738UJ", '/images/vehicules/XD738UJ/img_voiture.png', 'BMW', 'i3 S', 2024, 0, 48.6566, 2.3522, '127.0.0.1'), -("WSD754YH", '/images/vehicules/WSD754YH/img_voiture.png', 'Toyota', 'Prius', 2023, 1, 48.0566, 3.3522, '127.0.0.1'), -("IO334PO", '/images/vehicules/IO334PO/img_voiture.png', 'Chevrolet', 'Bolt', 2023, 0, 48.7566, 7.3522, '127.0.0.1'), -('AA123AA', '/images/vehicules/AA123AA/img_voiture.png', 'Renault', 'Clio', 2018, 1, 48.558844, 2.294351, '127.0.0.1'), -('BB456BB', '/images/vehicules/BB456BB/img_voiture.png', 'Peugeot', '208', 2016, 1, 48.2566, 1.3522, '127.0.0.1'), -('CC789CC', '/images/vehicules/CC789CC/img_voiture.png', 'Volkswagen', 'Golf', 2019, 1, 48.8566, 9.3522, '127.0.0.1'), -('DD012DD', '/images/vehicules/DD012DD/img_voiture.png', 'Ford', 'Fiesta', 2015, 1, 49.8566, 6.3522, '127.0.0.1'), -('EE345EE', '/images/vehicules/EE345EE/img_voiture.png', 'Toyota', 'Yaris', 2017, 1, 45.8566, 4.3522, '127.0.0.1'), -('FF678FF', '/images/vehicules/FF678FF/img_voiture.png', 'Audi', 'A3', 2014, 1, 42.8566, 2.3522, '127.0.0.1'), -('GG901GG', '/images/vehicules/GG901GG/img_voiture.png', 'BMW', 'Series 1', 2020, 1, 46.8566, 3.3522, '127.0.0.1'), -('HH234HH', '/images/vehicules/HH234HH/img_voiture.png', 'Mercedes-Benz', 'A-Class', 2019, 1, 48.8566, 2.3522, '127.0.0.1'), -('II567II', '/images/vehicules/II567II/img_voiture.png', 'Hyundai', 'i30', 2016, 1, 50.8566, 7.3522, '127.0.0.1'), -('JJ890JJ', '/images/vehicules/JJ890JJ/img_voiture.png', 'Kia', 'Rio', 2017, 1, 49.8566, 4.3522, '127.0.0.1'), -('KK123KK', '/images/vehicules/KK123KK/img_voiture.png', 'Nissan', 'Micra', 2018, 1, 44.8566, 2.3522, '127.0.0.1'), -('LL456LL', '/images/vehicules/LL456LL/img_voiture.png', 'Fiat', '500', 2015, 1, 43.8566, 2.6522, '127.0.0.1'), -('MM789MM', '/images/vehicules/MM789MM/img_voiture.png', 'Skoda', 'Fabia', 2019, 1, 47.8566, 2.8522, '127.0.0.1'), -('NN012NN', '/images/vehicules/NN012NN/img_voiture.png', 'Volvo', 'V40', 2016, 1, 45.8566, 2.4522, '127.0.0.1'), -('OO345OO', '/images/vehicules/OO345OO/img_voiture.png', 'Seat', 'Ibiza', 2017, 1, 48.8566, 2.3522, '127.0.0.1'), -('PP678PP', '/images/vehicules/PP678PP/img_voiture.png', 'Mini', 'Cooper', 2020, 1, 43.8566, 2.7522, '127.0.0.1'), -('QQ901QQ', '/images/vehicules/QQ901QQ/img_voiture.png', 'Citroen', 'C3', 2018, 1, 44.8566, 2.2522, '127.0.0.1'), -('RR234RR', '/images/vehicules/RR234RR/img_voiture.png', 'Dacia', 'Sandero', 2015, 1, 45.8566, 4.3522, '127.0.0.1'), -('SS567SS', '/images/vehicules/SS567SS/img_voiture.png', 'Land Rover', 'Evoque', 2021, 1, 46.8566, 8.3522, '127.0.0.1'), -('TT890TT', '/images/vehicules/TT890TT/img_voiture.png', 'Jeep', 'Renegade', 2019, 1, 47.8566, 2.9522, '127.0.0.1'); --- --- Déchargement des données de la table Reservations --- -INSERT INTO Reservations (id_user, id_vehicule, title, start, end) -SELECT - FLOOR(RAND() * (SELECT MAX(id) FROM Clients)) + 1 AS id_user, - FLOOR(RAND() * (SELECT MAX(id) FROM Vehicules)) + 1 AS id_vehicule, - CONCAT('Réservation ', FLOOR(RAND() * 100)) AS title, - NOW() + INTERVAL FLOOR(RAND() * 30) DAY AS start, - NOW() + INTERVAL FLOOR(RAND() * 30) DAY + INTERVAL FLOOR(RAND() * 10) HOUR AS end -FROM - INFORMATION_SCHEMA.TABLES AS t1, - INFORMATION_SCHEMA.TABLES AS t2 -LIMIT 30; diff --git a/sql/INDEX TABLES.sql b/sql/INDEX TABLES.sql deleted file mode 100644 index 0562aa0..0000000 --- a/sql/INDEX TABLES.sql +++ /dev/null @@ -1,17 +0,0 @@ -use CARIA; --- --- Index pour la table Reservations --- -ALTER TABLE Reservations - ADD UNIQUE KEY uc_vehicule_reservation (id_vehicule,start,end), - ADD UNIQUE KEY chevauchement_reservation (id_vehicule,start), - ADD KEY id_user (id_user), - ADD KEY id_vehicule (id_vehicule) USING BTREE; - --- --- Contraintes pour la table Reservations --- -ALTER TABLE Reservations - ADD CONSTRAINT Reservations_idfk_1 FOREIGN KEY (id_vehicule) REFERENCES Vehicules (id), - ADD CONSTRAINT Reservations_idfk_2 FOREIGN KEY (id) REFERENCES Clients (id); -COMMIT; diff --git a/vue/connexion.html b/vue/connexion.html index c5cd2a6..e6fd9ca 100644 --- a/vue/connexion.html +++ b/vue/connexion.html @@ -31,12 +31,10 @@
-

La plateforme en chiffre

+

Véhicule actuellement en circulation

-

La plateforme compte membres.

-

véhicules disponibles à la réservation sur la plateforme.

-

est le dernier membre inscrit.

+
diff --git a/vue/edit_profile_view.html b/vue/edit_profile_view.html index 7b8cbd1..4651042 100644 --- a/vue/edit_profile_view.html +++ b/vue/edit_profile_view.html @@ -5,7 +5,7 @@
-

Edition du profil de +

Edition du profil de

@@ -28,19 +28,19 @@
- +
- +
- +
@@ -49,19 +49,19 @@
-

+

-

+

-

+

@@ -69,14 +69,14 @@
- Aucun avatar /> + Aucun avatar />
- Supprimer mon avatar + Supprimer mon avatar
diff --git a/vue/footer.html b/vue/footer.html index d47d66c..d1a20d9 100644 --- a/vue/footer.html +++ b/vue/footer.html @@ -16,16 +16,26 @@