From 8a26f49de3c5f849b1c53dcde9d5deb3b9c63489 Mon Sep 17 00:00:00 2001 From: Leo Tuaillon Date: Sun, 19 Nov 2023 10:09:18 +0100 Subject: [PATCH 1/4] =?UTF-8?q?ajout=20de=20la=20page=20affiche=20des=20pr?= =?UTF-8?q?ofils=20(10=20par=2010)=20et=20syst=C3=A8me=20de=20pagination?= =?UTF-8?q?=20entre=20les=20pages=20fonctionnelle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/sqldialects.xml | 6 + php/src/controleur/FrontControleur.php | 2 +- php/src/controleur/UtilisateurControleur.php | 33 +++- php/src/gateway/AlumniGateway.php | 25 +-- php/src/gateway/ProfilGateway.php | 11 ++ php/src/modele/UtilisateurModele.php | 152 +++++++++++-------- php/templates/profil.html | 58 +++++++ 7 files changed, 212 insertions(+), 75 deletions(-) create mode 100644 .idea/sqldialects.xml create mode 100644 php/templates/profil.html diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..95a9d20 --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/php/src/controleur/FrontControleur.php b/php/src/controleur/FrontControleur.php index 594bd18..cf6292e 100755 --- a/php/src/controleur/FrontControleur.php +++ b/php/src/controleur/FrontControleur.php @@ -20,7 +20,7 @@ class FrontControleur ], "Utilisateur" => [ - "connexion", "inscription", "accueil", "consulterProfilLimite", "publierOffre", "listerEvenement", "creerEvenement", "supprimerEvenement", "avoirDetailEvenement", "rechercherEvenement" + "connexion", "getProfilByPage","inscription", "accueil", "consulterProfilLimite", "publierOffre", "listerEvenement", "creerEvenement", "supprimerEvenement", "avoirDetailEvenement", "rechercherEvenement" ] ); diff --git a/php/src/controleur/UtilisateurControleur.php b/php/src/controleur/UtilisateurControleur.php index 0e277c4..7d93cde 100755 --- a/php/src/controleur/UtilisateurControleur.php +++ b/php/src/controleur/UtilisateurControleur.php @@ -24,6 +24,12 @@ class UtilisateurControleur case "accueil": $this->accueil(); break; + case "profil": + $this->profil(); + break; + case "getProfilByPage": + $this->getProfilByPage(); + break; case "inscription_success": $this->inscription_success(); break; @@ -64,7 +70,7 @@ class UtilisateurControleur $this->rechercherEvenement(); break; default: - $dVueErreur[] = "Action inconnue ou non autorisée"; + $dVueErreur[] = "Action inconnue ou non autorisée" . $action; echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur]); } } @@ -396,4 +402,29 @@ class UtilisateurControleur global $twig; echo $twig->render('evenement.html', ['evenements' => $evenements]); } + + private function getProfilByPage() + { + global $twig; + $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant + $userModel = new UtilisateurModele(); + + if (isset($_GET['page'])) { + $page = Validation::nettoyerString($_GET['page']); + $utilisateurs = $userModel->getUtilisateurByPage($page); + + if ($utilisateurs[0] != null) { + echo $twig->render('profil.html', [ + 'utilisateurs' => $utilisateurs, + 'page' => $page] + ); + } else { + $dVueErreur[] = "L'utilisateur n'existe pas."; + echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); + } + } else { + $dVueErreur[] = "L'utilisateur n'existe pas."; + echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); + } + } } \ No newline at end of file diff --git a/php/src/gateway/AlumniGateway.php b/php/src/gateway/AlumniGateway.php index e4fb4c7..e9ae7b4 100644 --- a/php/src/gateway/AlumniGateway.php +++ b/php/src/gateway/AlumniGateway.php @@ -9,11 +9,13 @@ class AlumniGateway /** * @param $con */ - public function __construct(Connection $con){ + public function __construct(Connection $con) + { $this->con = $con; } - public function insert(string $email, string $motDePasse, string $role){ + public function insert(string $email, string $motDePasse, string $role) + { $query = 'INSERT INTO Alumni (mail, mdp, role) VALUES (:mail, :mdp, :role)'; return $this->con->executeQuery($query, array( ':mail' => array($email, PDO::PARAM_STR), @@ -23,15 +25,16 @@ class AlumniGateway } - public function updateMotDePasse(int $id, string $password){ - $query='UPDATE Alumni SET motDePasse=:new WHERE id=:i'; + public function updateMotDePasse(int $id, string $password) + { + $query = 'UPDATE Alumni SET motDePasse=:new WHERE id=:i'; $this->con->executeQuery($query, array( ':i' => array($id, PDO::PARAM_INT), ':new' => array($password, PDO::PARAM_STR) )); } - public function ObtenirById(int $id) : array + public function ObtenirById(int $id): array { $query = 'SELECT * FROM Alumni WHERE id=:i'; $this->con->executeQuery($query, array( @@ -40,7 +43,8 @@ class AlumniGateway return $this->con->getResults(); } - public function findByEmail(string $email){ + public function findByEmail(string $email) + { $query = 'SELECT Alumni.id, Alumni.mail, Alumni.mdp, Alumni.role, Profil.nom, Profil.prenom FROM Alumni LEFT JOIN Profil ON Alumni.id = Profil.alumni @@ -52,8 +56,9 @@ class AlumniGateway } - public function getAll(){ - $query='SELECT * FROM Alumni'; + public function getAll() + { + $query = 'SELECT * FROM Alumni'; $this->con->executeQuery($query); return $this->con->getResults(); } @@ -67,4 +72,6 @@ class AlumniGateway $res = $this->con->getResults(); return $res[0]['id']; } -} \ No newline at end of file + + +} diff --git a/php/src/gateway/ProfilGateway.php b/php/src/gateway/ProfilGateway.php index 3673b68..ab6d847 100644 --- a/php/src/gateway/ProfilGateway.php +++ b/php/src/gateway/ProfilGateway.php @@ -33,4 +33,15 @@ class ProfilGateway )); return $this->con->getResults(); } + + public function userByPage(int $page, int $nbParPage) + { + $start = ($page - 1) * $nbParPage; // Calcul de l'index de départ pour LIMIT + $query = 'SELECT * FROM Profil LIMIT :start, :nbParPage'; + $this->con->executeQuery($query, array( + ':start' => array($start, PDO::PARAM_INT), + ':nbParPage' => array($nbParPage, PDO::PARAM_INT), + )); + return $this->con->getResults(); + } } \ No newline at end of file diff --git a/php/src/modele/UtilisateurModele.php b/php/src/modele/UtilisateurModele.php index 9986c2a..accb46b 100755 --- a/php/src/modele/UtilisateurModele.php +++ b/php/src/modele/UtilisateurModele.php @@ -7,6 +7,7 @@ use App\metier\Evenement; use App\metier\Alumni; use App\gateway\AlumniGateway; use App\gateway\ProfilGateway; +use App\metier\Profil; class UtilisateurModele @@ -15,7 +16,7 @@ class UtilisateurModele public function __construct() { - $this->con = new Connection(DB_HOST,DB_USER,DB_PASS); + $this->con = new Connection(DB_HOST, DB_USER, DB_PASS); } /** @@ -25,24 +26,24 @@ class UtilisateurModele * @return Alumni */ - public function connection(string $email, string $mdp) : ? Alumni - { - $con = new Connection(DB_HOST,DB_USER,DB_PASS); - $gate = new AlumniGateway($con); - - // Récupation de l'utilisateur avec l'email - $utilisateur = $gate->findByEmail($email); - if ($utilisateur[0]!=null) { - // L'utilisateur existe, vérification du mot de passe - if (password_verify($mdp, $utilisateur[0]['mdp'])) { - // Le mot de passe est correct, retournez l'utilisateur - return new Alumni($utilisateur[0]['id'],$utilisateur[0]['mail'], $utilisateur[0]['mdp'], $utilisateur[0]['role'],$utilisateur[0]['nom'],$utilisateur[0]['prenom']); - } else { - return null; - } - } else { - return null; - } + public function connection(string $email, string $mdp): ?Alumni + { + $con = new Connection(DB_HOST, DB_USER, DB_PASS); + $gate = new AlumniGateway($con); + + // Récupation de l'utilisateur avec l'email + $utilisateur = $gate->findByEmail($email); + if ($utilisateur[0] != null) { + // L'utilisateur existe, vérification du mot de passe + if (password_verify($mdp, $utilisateur[0]['mdp'])) { + // Le mot de passe est correct, retournez l'utilisateur + return new Alumni($utilisateur[0]['id'], $utilisateur[0]['mail'], $utilisateur[0]['mdp'], $utilisateur[0]['role'], $utilisateur[0]['nom'], $utilisateur[0]['prenom']); + } else { + return null; + } + } else { + return null; + } } /** @@ -53,43 +54,43 @@ class UtilisateurModele * @return \Alumni chargé */ - public function inscription(string $prenom, string $nom,string $email, string $hashpassword):? Alumni - { - $role = "Membre"; - $con = new Connection(DB_HOST,DB_USER,DB_PASS); - $gate = new AlumniGateway($con); - $profilGate = new ProfilGateway($con); - // Insérez le nouvel utilisateur dans la base de données en utilisant AlumniGateway - if ($gate->insert($email, $hashpassword, $role)) { - $id = $gate->getID($email); - if($profilGate->insert($id,$nom, $prenom,$email)){ - // L'insertion a réussi, retournez le nouvel utilisateur - $nouvelUtilisateur = new Alumni($id,$email, $hashpassword, $role,$nom,$prenom); - return $nouvelUtilisateur; - } - return null; - } else { - // L'insertion a échoué, renvoyez un utilisateur vide pour indiquer l'échec - return null; - } - } - - public function getUtilisateurByEmail(string $email) - { - $con = new Connection(DB_HOST,DB_USER,DB_PASS); - $gate = new AlumniGateway($con); - // Récupérez l'utilisateur avec l'email donné en utilisant AlumniGateway - $utilisateur = $gate->findByEmail($email); - if ($utilisateur instanceof Alumni) { - // L'utilisateur existe, retournez-le - return $utilisateur; - } else { - // L'utilisateur n'existe pas, renvoyez null - return null; - } - } - - public function getEvenement() : array + public function inscription(string $prenom, string $nom, string $email, string $hashpassword): ?Alumni + { + $role = "Membre"; + $con = new Connection(DB_HOST, DB_USER, DB_PASS); + $gate = new AlumniGateway($con); + $profilGate = new ProfilGateway($con); + // Insérez le nouvel utilisateur dans la base de données en utilisant AlumniGateway + if ($gate->insert($email, $hashpassword, $role)) { + $id = $gate->getID($email); + if ($profilGate->insert($id, $nom, $prenom, $email)) { + // L'insertion a réussi, retournez le nouvel utilisateur + $nouvelUtilisateur = new Alumni($id, $email, $hashpassword, $role, $nom, $prenom); + return $nouvelUtilisateur; + } + return null; + } else { + // L'insertion a échoué, renvoyez un utilisateur vide pour indiquer l'échec + return null; + } + } + + public function getUtilisateurByEmail(string $email) + { + $con = new Connection(DB_HOST, DB_USER, DB_PASS); + $gate = new AlumniGateway($con); + // Récupérez l'utilisateur avec l'email donné en utilisant AlumniGateway + $utilisateur = $gate->findByEmail($email); + if ($utilisateur instanceof Alumni) { + // L'utilisateur existe, retournez-le + return $utilisateur; + } else { + // L'utilisateur n'existe pas, renvoyez null + return null; + } + } + + public function getEvenement(): array { $gate = new EvenementGateway($this->con); @@ -97,8 +98,7 @@ class UtilisateurModele $evenement = array(); - foreach($data as $row) - { + foreach ($data as $row) { $evenement[] = new Evenement( $row['id'], $row['organisateur'], @@ -135,9 +135,9 @@ class UtilisateurModele $gate->deleteEvenement($id); } - public function getEvenementById(int $id) : Evenement + public function getEvenementById(int $id): Evenement { - $gate = new EvenementGateway($this->con); + $gate = new EvenementGateway($this->con); $data = $gate->findById($id); @@ -154,16 +154,15 @@ class UtilisateurModele return $evenement; } - public function getEvenementByTitre(string $titre) : array + public function getEvenementByTitre(string $titre): array { - $gate = new EvenementGateway($this->con); + $gate = new EvenementGateway($this->con); $data = $gate->findByTitle($titre); $evenement = array(); - foreach($data as $row) - { + foreach ($data as $row) { $evenement[] = new Evenement( $row['id'], $row['organisateur'], @@ -177,4 +176,29 @@ class UtilisateurModele return $evenement; } + + public function getUtilisateurByPage(string $page) + { + $con = new Connection(DB_HOST, DB_USER, DB_PASS); + $gate = new ProfilGateway($con); + $data = $gate->userByPage($page, 10); + if($data[0]!=null){ + //Création d'une liste d'objets utilisateurs + $profils = array(); + foreach ($data as $row) { + echo $row['nom']; + $profils[] = new Profil( + $row['nom'], + $row['prenom'], + $row['email'], + $row['cv'] ?? '', + $row['linkedinURL'] ?? '', + $row['githubURL'] ?? '', + $row['portfolioURL'] ?? '' + ); + } + return $profils; + } + return null; + } } \ No newline at end of file diff --git a/php/templates/profil.html b/php/templates/profil.html new file mode 100644 index 0000000..5cd6b0a --- /dev/null +++ b/php/templates/profil.html @@ -0,0 +1,58 @@ + + + + + + Profils des Alumnis + + + +

Les Alumnis :

+ +
+ {% for utilisateur in utilisateurs %} +
+ Image de profil +

{{ utilisateur.prenom }} {{ utilisateur.nom }}

+ Voir le profil +
+ {% else %} +

Aucun profil trouvé.

+ {% endfor %} +
+ + + + From a1a1ae6ecbd846ced824ef2b1244383346a6d75c Mon Sep 17 00:00:00 2001 From: Leo Tuaillon Date: Sun, 19 Nov 2023 13:18:10 +0100 Subject: [PATCH 2/4] ihefuih --- php/public/index.php | 3 ++- php/src/controleur/UtilisateurControleur.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/php/public/index.php b/php/public/index.php index 2bce566..f5d187c 100755 --- a/php/public/index.php +++ b/php/public/index.php @@ -13,4 +13,5 @@ $twig = new \Twig\Environment($loader, [ 'debug' => true ]); $twig->addExtension(new \Twig\Extension\DebugExtension()); -$cont = new \App\controleur\FrontControleur(); \ No newline at end of file +$cont = new \App\controleur\FrontControleur(); + diff --git a/php/src/controleur/UtilisateurControleur.php b/php/src/controleur/UtilisateurControleur.php index 7d93cde..08cd095 100755 --- a/php/src/controleur/UtilisateurControleur.php +++ b/php/src/controleur/UtilisateurControleur.php @@ -245,7 +245,7 @@ class UtilisateurControleur 'niveauEtudes' => (($niveauEtudes != null ? $niveauEtudes : "")), 'valContrat' => (($typeContrat != null ? "&typeContrat=".$typeContrat : "")), 'valExp' => (($exp != null ? "&experience=".$exp : "")), - 'valEtudes' => (($niveauEtudes != null ? "&niveauEtudes=".$niveauEtudes : "")) + 'valEtudes' => (($niveauEtudes != null ? "&niveauEtudes=".$niveauEtudes : "")), ]); } From 4ee484b938d7e38407b18dceab099b84353ad19c Mon Sep 17 00:00:00 2001 From: tleodev Date: Sun, 19 Nov 2023 18:14:26 +0100 Subject: [PATCH 3/4] affichage profil et pagination fonctionnelle --- php/public/css/profil.css | 69 ++++++++++++++++++++ php/src/controleur/FrontControleur.php | 4 +- php/src/controleur/UtilisateurControleur.php | 27 ++++---- php/src/gateway/AlumniGateway.php | 2 +- php/src/gateway/OffreGateway.php | 7 ++ php/src/gateway/ProfilGateway.php | 1 + php/src/metier/Alumni.php | 2 +- php/src/metier/Profil.php | 11 +++- php/src/modele/UtilisateurModele.php | 12 +++- php/templates/profil.html | 51 +++++---------- 10 files changed, 133 insertions(+), 53 deletions(-) create mode 100644 php/public/css/profil.css diff --git a/php/public/css/profil.css b/php/public/css/profil.css new file mode 100644 index 0000000..89d38af --- /dev/null +++ b/php/public/css/profil.css @@ -0,0 +1,69 @@ +/* styles.css */ +.profiles-container { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + gap: 20px; + padding: 0; + list-style: none; +} + +.profile { + width: calc(33.333% - 20px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + border-radius: 10px; + overflow: hidden; + background: #fff; + margin-bottom: 20px; +} + +.profile-image-container { + padding: 10px; + background: #f0f0f0; +} + +.profile-image-container img { + width: 100px; + height: 100px; + border-radius: 50%; + display: block; + margin: auto; +} + +.profile-details { + padding: 10px; + text-align: center; +} + +.profile-details p { + margin: 5px 0; +} + +.profile-details a { + display: inline-block; + background: #007bff; + color: #fff; + padding: 5px 15px; + text-decoration: none; + border-radius: 5px; + font-size: 14px; +} + +.profile-details a:hover { + background: #0056b3; +} + +.pagination { + text-align: center; + margin-top: 20px; +} + +.pagination a { + margin: 0 5px; + text-decoration: none; + color: #333; +} + +.pagination a:hover { + text-decoration: underline; +} diff --git a/php/src/controleur/FrontControleur.php b/php/src/controleur/FrontControleur.php index bbb91e4..93134a4 100755 --- a/php/src/controleur/FrontControleur.php +++ b/php/src/controleur/FrontControleur.php @@ -23,9 +23,9 @@ class FrontControleur $router->setBasePath('/SAE_2A_FA-Reseau_ALICA/php'); - $router->map('GET', '/', 'UtilisateurControleur'); + $router->map('GET|POST', '/', 'UtilisateurControleur'); - $router->map('GET','/[a:action]?','UtilisateurControleur'); + $router->map('GET|POST','/[a:action]?','UtilisateurControleur'); $router->map('POST','/[a:action]?','UtilisateurControleur'); diff --git a/php/src/controleur/UtilisateurControleur.php b/php/src/controleur/UtilisateurControleur.php index 7e934fd..dd23678 100755 --- a/php/src/controleur/UtilisateurControleur.php +++ b/php/src/controleur/UtilisateurControleur.php @@ -11,12 +11,12 @@ use App\modele\UtilisateurModele; class UtilisateurControleur { - } public function connection() { global $twig; - $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant + + $dVueErreur = []; $userModel = new UtilisateurModele(); if (isset($_POST['email'], $_POST['password'])) { @@ -27,12 +27,15 @@ class UtilisateurControleur if ($utilisateur instanceof Alumni) { $_SESSION['utilisateur'] = $utilisateur; - header('Location: accueil'); - exit(); + // Afficher une autre page via Twig + echo $twig->render('accueil.html', ['prenom' => $utilisateur->getPrenom(), 'nom' => $utilisateur->getNom()]); + return; } else { $dVueErreur[] = "L'adresse email ou le mot de passe est incorrect."; } } + + // Afficher la page de connexion avec les erreurs, le cas échéant echo $twig->render('connection.html', ['dVueErreur' => $dVueErreur]); } @@ -349,19 +352,21 @@ class UtilisateurControleur echo $twig->render('evenement.html', ['evenements' => $evenements]); } - private function getProfilByPage() + public function getProfilByPage(?array $params) { global $twig; $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant $userModel = new UtilisateurModele(); + $nbParPage = 5; + $nombreTotalPages = ($userModel->getNbTotalPages())/$nbParPage; + if (isset($params['id'] ) && $params['id'] != null) { + $page = Validation::validerIntPossitif($params['id']); + $profils = $userModel->getProfilByPage($page, $nbParPage); - if (isset($_GET['page'])) { - $page = Validation::nettoyerString($_GET['page']); - $utilisateurs = $userModel->getUtilisateurByPage($page); - - if ($utilisateurs[0] != null) { + if ($profils[0] != null) { echo $twig->render('profil.html', [ - 'utilisateurs' => $utilisateurs, + 'profils' => $profils, + 'nombreTotalPages' => $nombreTotalPages, 'page' => $page] ); } else { diff --git a/php/src/gateway/AlumniGateway.php b/php/src/gateway/AlumniGateway.php index 3d318d0..eaa8c6e 100644 --- a/php/src/gateway/AlumniGateway.php +++ b/php/src/gateway/AlumniGateway.php @@ -48,7 +48,7 @@ class AlumniGateway public function findByEmail(string $email) { - $query = 'SELECT Alumni.id, Alumni.mail, Alumni.mdp, Alumni.role, Profil.nom, Profil.prenom + $query = 'SELECT Alumni.id, Alumni.mail, Alumni.mdp, Alumni.role, Profil.nom, Profil.prenom FROM Alumni LEFT JOIN Profil ON Alumni.id = Profil.alumni WHERE Alumni.mail = :e'; diff --git a/php/src/gateway/OffreGateway.php b/php/src/gateway/OffreGateway.php index 1664bc9..a0e1bb2 100755 --- a/php/src/gateway/OffreGateway.php +++ b/php/src/gateway/OffreGateway.php @@ -128,6 +128,13 @@ class OffreGateway return $this->con->getResults(); } + public function getNbTotalPages() + { + $query = 'SELECT COUNT(*) FROM Profil'; + $this->con->executeQuery($query, array()); + $res = $this->con->getResults(); + return intval($res[0]['COUNT(*)']); + } } \ No newline at end of file diff --git a/php/src/gateway/ProfilGateway.php b/php/src/gateway/ProfilGateway.php index ab6d847..a0afb77 100644 --- a/php/src/gateway/ProfilGateway.php +++ b/php/src/gateway/ProfilGateway.php @@ -37,6 +37,7 @@ class ProfilGateway public function userByPage(int $page, int $nbParPage) { $start = ($page - 1) * $nbParPage; // Calcul de l'index de départ pour LIMIT + $start = max(0, $start); // Si $start est négatif, on met 0 (pas de page -1) $query = 'SELECT * FROM Profil LIMIT :start, :nbParPage'; $this->con->executeQuery($query, array( ':start' => array($start, PDO::PARAM_INT), diff --git a/php/src/metier/Alumni.php b/php/src/metier/Alumni.php index f132ab2..610b752 100644 --- a/php/src/metier/Alumni.php +++ b/php/src/metier/Alumni.php @@ -34,7 +34,7 @@ class Alumni{ $this->email = $email; $this->motDePasse = $motDePasse; $this->role = $role; - $this->profil = new Profil($nom, $prenom, $email, "","", "", ""); + $this->profil = new Profil($nom, $prenom, $email, "","", "", "",""); } /** diff --git a/php/src/metier/Profil.php b/php/src/metier/Profil.php index 8fef2ee..9bd0f06 100644 --- a/php/src/metier/Profil.php +++ b/php/src/metier/Profil.php @@ -19,6 +19,7 @@ class Profil */ private string $nom; + /** * @var string Prenom */ @@ -28,6 +29,8 @@ class Profil /** * @var string Url linkedin */ + //image can be null + private ?string $image; private string $linkedinUrl; /** @@ -48,11 +51,12 @@ class Profil * @param string $githubUrl * @param string $portfolioUrl */ - public function __construct(string $nom, string $prenom, string $email, string $cv, string $linkedinUrl, string $githubUrl, string $portfolioUrl) + public function __construct(string $nom, string $prenom, string $email, ?string $image,string $cv, string $linkedinUrl, string $githubUrl, string $portfolioUrl) { $this->nom = $nom; $this->prenom = $prenom; + $this->image = $image; $this->email = $email; $this->cv = $cv; $this->linkedinUrl = $linkedinUrl; @@ -61,6 +65,11 @@ class Profil } + + public function getImage(): ?string + { + return $this->image ?? 'logo.png'; + } public function getCv(): string { return $this->cv; diff --git a/php/src/modele/UtilisateurModele.php b/php/src/modele/UtilisateurModele.php index 1b42de7..42c4659 100755 --- a/php/src/modele/UtilisateurModele.php +++ b/php/src/modele/UtilisateurModele.php @@ -185,20 +185,21 @@ class UtilisateurModele return $evenement; } - public function getUtilisateurByPage(string $page) + public function getProfilByPage(string $page, int $nbParPage) { + $page = max(1, intval($page)); $con = new Connection(DB_HOST, DB_USER, DB_PASS); $gate = new ProfilGateway($con); - $data = $gate->userByPage($page, 10); + $data = $gate->userByPage($page, $nbParPage); if($data[0]!=null){ //Création d'une liste d'objets utilisateurs $profils = array(); foreach ($data as $row) { - echo $row['nom']; $profils[] = new Profil( $row['nom'], $row['prenom'], $row['email'], + $row['image'] ?? null, $row['cv'] ?? '', $row['linkedinURL'] ?? '', $row['githubURL'] ?? '', @@ -289,5 +290,10 @@ class UtilisateurModele return $offers; } + public function getNbTotalPages() + { + return $this->offreGw->getNbTotalPages(); + } + } \ No newline at end of file diff --git a/php/templates/profil.html b/php/templates/profil.html index 5cd6b0a..897e7a1 100644 --- a/php/templates/profil.html +++ b/php/templates/profil.html @@ -4,43 +4,24 @@ Profils des Alumnis - + +
+ {% include "menu.html" %} +

Les Alumnis :

- {% for utilisateur in utilisateurs %} + {% for profil in profils %}
- Image de profil -

{{ utilisateur.prenom }} {{ utilisateur.nom }}

- Voir le profil +
+ Image de profil +
+
+

{{ profil.prenom }} {{ profil.nom }}

+ Voir le profil +
{% else %}

Aucun profil trouvé.

@@ -49,10 +30,12 @@ From bc1f77c054e72f93b63396ef79d9431713226787 Mon Sep 17 00:00:00 2001 From: tleodev Date: Sun, 19 Nov 2023 19:09:09 +0100 Subject: [PATCH 4/4] =?UTF-8?q?affichage=20des=20profils=20+=20r=C3=A9glag?= =?UTF-8?q?e=20du=20probl=C3=A8me=20de=20connection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/public/css/profil.css | 81 ++++++++++++++++---- php/src/controleur/FrontControleur.php | 7 +- php/src/controleur/UtilisateurControleur.php | 80 +++++++++---------- php/src/modele/UtilisateurModele.php | 2 +- php/templates/menu.html | 1 + php/templates/profil.html | 75 ++++++++++++------ 6 files changed, 165 insertions(+), 81 deletions(-) diff --git a/php/public/css/profil.css b/php/public/css/profil.css index 89d38af..f8603eb 100644 --- a/php/public/css/profil.css +++ b/php/public/css/profil.css @@ -1,4 +1,4 @@ -/* styles.css */ +/* profil.css */ .profiles-container { display: flex; flex-wrap: wrap; @@ -9,61 +9,114 @@ } .profile { - width: calc(33.333% - 20px); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + width: calc(50% - 20px); /* Ajustez la largeur si nécessaire pour correspondre au design */ + border: 1px solid #ccc; /* Bordure comme dans l'image */ border-radius: 10px; overflow: hidden; background: #fff; margin-bottom: 20px; + display: flex; + align-items: center; /* Alignement vertical */ } .profile-image-container { padding: 10px; + display: flex; + align-items: center; + justify-content: center; background: #f0f0f0; + flex-shrink: 0; /* Empêche le conteneur de rétrécir */ } .profile-image-container img { width: 100px; height: 100px; border-radius: 50%; - display: block; - margin: auto; } .profile-details { padding: 10px; - text-align: center; + flex-grow: 1; /* Permet à ce div de prendre l'espace restant */ } .profile-details p { margin: 5px 0; + font-weight: bold; /* Texte en gras comme dans l'image */ +} + +.profile-details .job-title { + color: #007bff; + font-size: 0.85em; } .profile-details a { - display: inline-block; + display: block; /* Prend toute la largeur du conteneur */ background: #007bff; color: #fff; padding: 5px 15px; text-decoration: none; border-radius: 5px; font-size: 14px; + margin-top: 10px; /* Espace au-dessus du lien */ + text-align: center; /* Centre le texte dans le lien */ } .profile-details a:hover { background: #0056b3; } + + +/* profil.css */ .pagination { - text-align: center; - margin-top: 20px; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; } -.pagination a { - margin: 0 5px; +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + color: #0056b3; text-decoration: none; - color: #333; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; } -.pagination a:hover { - text-decoration: underline; +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; } + + diff --git a/php/src/controleur/FrontControleur.php b/php/src/controleur/FrontControleur.php index 93134a4..f93cbff 100755 --- a/php/src/controleur/FrontControleur.php +++ b/php/src/controleur/FrontControleur.php @@ -18,7 +18,12 @@ class FrontControleur global $twig; session_start(); - + if($_SESSION["utilisateur"]){ + $twig->addGlobal('nom', $_SESSION["utilisateur"]->getNom()); + $twig->addGlobal('prenom', $_SESSION["utilisateur"]->getPrenom()); + $twig->addGlobal('role', $_SESSION["utilisateur"]->getRole()); + $twig->addGlobal('id', $_SESSION["utilisateur"]->getId()); + } $router = new AltoRouter(); $router->setBasePath('/SAE_2A_FA-Reseau_ALICA/php'); diff --git a/php/src/controleur/UtilisateurControleur.php b/php/src/controleur/UtilisateurControleur.php index dd23678..e99a20d 100755 --- a/php/src/controleur/UtilisateurControleur.php +++ b/php/src/controleur/UtilisateurControleur.php @@ -7,6 +7,7 @@ use App\gateway\ImageSaver; use App\metier\Alumni; use App\modele\OffreModele; use App\modele\UtilisateurModele; +use Exception; class UtilisateurControleur { @@ -27,15 +28,12 @@ class UtilisateurControleur if ($utilisateur instanceof Alumni) { $_SESSION['utilisateur'] = $utilisateur; - // Afficher une autre page via Twig - echo $twig->render('accueil.html', ['prenom' => $utilisateur->getPrenom(), 'nom' => $utilisateur->getNom()]); + echo $twig->render('accueil.html'); return; } else { $dVueErreur[] = "L'adresse email ou le mot de passe est incorrect."; } } - - // Afficher la page de connexion avec les erreurs, le cas échéant echo $twig->render('connection.html', ['dVueErreur' => $dVueErreur]); } @@ -43,7 +41,7 @@ class UtilisateurControleur { global $twig; - $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant + $dVueErreur = []; $userModel = new UtilisateurModele(); if (isset($_POST['firstname'],$_POST['name'], $_POST['email'], $_POST['password'])) { @@ -52,23 +50,25 @@ class UtilisateurControleur $email = Validation::nettoyerString($_POST['email']); $motDePasse = Validation::nettoyerString($_POST['password']); $hash = password_hash($motDePasse, PASSWORD_DEFAULT); + try { + // verification que l'email est valide et unique : + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + $dVueErreur[] = "L'adresse email n'est pas valide ou est déjà utilisée."; + } else { + $utilisateur = $userModel->getUtilisateurByEmail($email); + if ($utilisateur instanceof Alumni) { + $dVueErreur[] = "L'adresse email est déjà utilisée."; + } + } + $nouvelUtilisateur = $userModel->inscription($prenom, $nom, $email, $hash); - // verification que l'email est valide et unique : - if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { - $dVueErreur[] = "L'adresse email n'est pas valide ou est déjà utilisée."; - } else { - $utilisateur = $userModel->getUtilisateurByEmail($email); - if ($utilisateur instanceof Alumni) { - $dVueErreur[] = "L'adresse email est déjà utilisée."; + if ($nouvelUtilisateur instanceof Alumni) { + echo $twig->render('inscription_success.html'); + exit(); } } - $nouvelUtilisateur = $userModel->inscription($prenom,$nom,$email, $hash); - - if ($nouvelUtilisateur instanceof Alumni) { - echo $twig->render('inscription_success.html'); - exit(); - } else { - $dVueErreur[] = "L'inscription a échoué, veuillez réessayer."; + catch (Exception $e) { + $dVueErreur[] = "L'inscription a échoué, veuillez réessayer."; } } echo $twig->render('inscription.html', ['dVueErreur' => $dVueErreur]); @@ -79,19 +79,13 @@ class UtilisateurControleur global $twig; // Ajout d'un var_dump pour déboguer if (isset($_SESSION['utilisateur']) && $_SESSION['utilisateur'] instanceof Alumni) { - $prenom = $_SESSION['utilisateur']->getPrenom(); - $nom = $_SESSION['utilisateur']->getNom(); - $id = $_SESSION['utilisateur']->getId(); - } - else{ - $prenom = null; - $nom = null; - $id = null; - } $userModel = new UtilisateurModele(); $evenements=$userModel->getEvenement(); //aller sur la page d'accueil avec le nom et prenom de l'utilisateur - echo $twig->render('accueil.html', ['prenom' => $prenom, 'nom' => $nom, 'id' => $id,"eventsList"=>$evenements]); + echo $twig->render('accueil.html', ['evenements' => $evenements]); + } else { + echo $twig->render('accueil.html'); + } } public function consulterProfilLimite() @@ -354,27 +348,29 @@ class UtilisateurControleur public function getProfilByPage(?array $params) { + global $twig; $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant $userModel = new UtilisateurModele(); - $nbParPage = 5; - $nombreTotalPages = ($userModel->getNbTotalPages())/$nbParPage; + $nbParPage = 10; + $nombreTotalPages = ceil(($userModel->getNbTotalPages())/$nbParPage); if (isset($params['id'] ) && $params['id'] != null) { $page = Validation::validerIntPossitif($params['id']); - $profils = $userModel->getProfilByPage($page, $nbParPage); - - if ($profils[0] != null) { - echo $twig->render('profil.html', [ - 'profils' => $profils, - 'nombreTotalPages' => $nombreTotalPages, - 'page' => $page] - ); - } else { - $dVueErreur[] = "L'utilisateur n'existe pas."; + try{ + $profils = $userModel->getProfilByPage($page, $nbParPage); + if (isset($profils)) { + echo $twig->render('profil.html', [ + 'profils' => $profils, + 'nombreTotalPages' => $nombreTotalPages, + 'page' => $page] + ); + } + }catch (Exception $e){ + $dVueErreur[] = "Aucun profil n'a été trouvé."; echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); } } else { - $dVueErreur[] = "L'utilisateur n'existe pas."; + $dVueErreur[] = "La page n'existe pas."; echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); } } diff --git a/php/src/modele/UtilisateurModele.php b/php/src/modele/UtilisateurModele.php index 42c4659..022f7f2 100755 --- a/php/src/modele/UtilisateurModele.php +++ b/php/src/modele/UtilisateurModele.php @@ -191,7 +191,7 @@ class UtilisateurModele $con = new Connection(DB_HOST, DB_USER, DB_PASS); $gate = new ProfilGateway($con); $data = $gate->userByPage($page, $nbParPage); - if($data[0]!=null){ + if(isset($data)){ //Création d'une liste d'objets utilisateurs $profils = array(); foreach ($data as $row) { diff --git a/php/templates/menu.html b/php/templates/menu.html index 7e48b0e..a771142 100644 --- a/php/templates/menu.html +++ b/php/templates/menu.html @@ -21,6 +21,7 @@ +