ajout de la page affiche des profils (10 par 10) et système de pagination entre les pages fonctionnelle

AffichageProfil
Leo Tuaillon 1 year ago
parent a92e9d4f1d
commit 8a26f49de3

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/php/src/gateway/AlumniGateway.php" dialect="GenericSQL" />
</component>
</project>

@ -20,7 +20,7 @@ class FrontControleur
], ],
"Utilisateur" => [ "Utilisateur" => [
"connexion", "inscription", "accueil", "consulterProfilLimite", "publierOffre", "listerEvenement", "creerEvenement", "supprimerEvenement", "avoirDetailEvenement", "rechercherEvenement" "connexion", "getProfilByPage","inscription", "accueil", "consulterProfilLimite", "publierOffre", "listerEvenement", "creerEvenement", "supprimerEvenement", "avoirDetailEvenement", "rechercherEvenement"
] ]
); );

@ -24,6 +24,12 @@ class UtilisateurControleur
case "accueil": case "accueil":
$this->accueil(); $this->accueil();
break; break;
case "profil":
$this->profil();
break;
case "getProfilByPage":
$this->getProfilByPage();
break;
case "inscription_success": case "inscription_success":
$this->inscription_success(); $this->inscription_success();
break; break;
@ -64,7 +70,7 @@ class UtilisateurControleur
$this->rechercherEvenement(); $this->rechercherEvenement();
break; break;
default: default:
$dVueErreur[] = "Action inconnue ou non autorisée"; $dVueErreur[] = "Action inconnue ou non autorisée" . $action;
echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur]); echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur]);
} }
} }
@ -396,4 +402,29 @@ class UtilisateurControleur
global $twig; global $twig;
echo $twig->render('evenement.html', ['evenements' => $evenements]); 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]);
}
}
} }

@ -9,11 +9,13 @@ class AlumniGateway
/** /**
* @param $con * @param $con
*/ */
public function __construct(Connection $con){ public function __construct(Connection $con)
{
$this->con = $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)'; $query = 'INSERT INTO Alumni (mail, mdp, role) VALUES (:mail, :mdp, :role)';
return $this->con->executeQuery($query, array( return $this->con->executeQuery($query, array(
':mail' => array($email, PDO::PARAM_STR), ':mail' => array($email, PDO::PARAM_STR),
@ -23,15 +25,16 @@ class AlumniGateway
} }
public function updateMotDePasse(int $id, string $password){ public function updateMotDePasse(int $id, string $password)
$query='UPDATE Alumni SET motDePasse=:new WHERE id=:i'; {
$query = 'UPDATE Alumni SET motDePasse=:new WHERE id=:i';
$this->con->executeQuery($query, array( $this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT), ':i' => array($id, PDO::PARAM_INT),
':new' => array($password, PDO::PARAM_STR) ':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'; $query = 'SELECT * FROM Alumni WHERE id=:i';
$this->con->executeQuery($query, array( $this->con->executeQuery($query, array(
@ -40,7 +43,8 @@ class AlumniGateway
return $this->con->getResults(); 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 $query = 'SELECT Alumni.id, Alumni.mail, Alumni.mdp, Alumni.role, Profil.nom, Profil.prenom
FROM Alumni FROM Alumni
LEFT JOIN Profil ON Alumni.id = Profil.alumni LEFT JOIN Profil ON Alumni.id = Profil.alumni
@ -52,8 +56,9 @@ class AlumniGateway
} }
public function getAll(){ public function getAll()
$query='SELECT * FROM Alumni'; {
$query = 'SELECT * FROM Alumni';
$this->con->executeQuery($query); $this->con->executeQuery($query);
return $this->con->getResults(); return $this->con->getResults();
} }
@ -67,4 +72,6 @@ class AlumniGateway
$res = $this->con->getResults(); $res = $this->con->getResults();
return $res[0]['id']; return $res[0]['id'];
} }
} }

@ -33,4 +33,15 @@ class ProfilGateway
)); ));
return $this->con->getResults(); 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();
}
} }

@ -7,6 +7,7 @@ use App\metier\Evenement;
use App\metier\Alumni; use App\metier\Alumni;
use App\gateway\AlumniGateway; use App\gateway\AlumniGateway;
use App\gateway\ProfilGateway; use App\gateway\ProfilGateway;
use App\metier\Profil;
class UtilisateurModele class UtilisateurModele
@ -15,7 +16,7 @@ class UtilisateurModele
public function __construct() public function __construct()
{ {
$this->con = new Connection(DB_HOST,DB_USER,DB_PASS); $this->con = new Connection(DB_HOST, DB_USER, DB_PASS);
} }
/** /**
@ -25,18 +26,18 @@ class UtilisateurModele
* @return Alumni * @return Alumni
*/ */
public function connection(string $email, string $mdp) : ? Alumni public function connection(string $email, string $mdp): ?Alumni
{ {
$con = new Connection(DB_HOST,DB_USER,DB_PASS); $con = new Connection(DB_HOST, DB_USER, DB_PASS);
$gate = new AlumniGateway($con); $gate = new AlumniGateway($con);
// Récupation de l'utilisateur avec l'email // Récupation de l'utilisateur avec l'email
$utilisateur = $gate->findByEmail($email); $utilisateur = $gate->findByEmail($email);
if ($utilisateur[0]!=null) { if ($utilisateur[0] != null) {
// L'utilisateur existe, vérification du mot de passe // L'utilisateur existe, vérification du mot de passe
if (password_verify($mdp, $utilisateur[0]['mdp'])) { if (password_verify($mdp, $utilisateur[0]['mdp'])) {
// Le mot de passe est correct, retournez l'utilisateur // 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']); return new Alumni($utilisateur[0]['id'], $utilisateur[0]['mail'], $utilisateur[0]['mdp'], $utilisateur[0]['role'], $utilisateur[0]['nom'], $utilisateur[0]['prenom']);
} else { } else {
return null; return null;
} }
@ -53,18 +54,18 @@ class UtilisateurModele
* @return \Alumni chargé * @return \Alumni chargé
*/ */
public function inscription(string $prenom, string $nom,string $email, string $hashpassword):? Alumni public function inscription(string $prenom, string $nom, string $email, string $hashpassword): ?Alumni
{ {
$role = "Membre"; $role = "Membre";
$con = new Connection(DB_HOST,DB_USER,DB_PASS); $con = new Connection(DB_HOST, DB_USER, DB_PASS);
$gate = new AlumniGateway($con); $gate = new AlumniGateway($con);
$profilGate = new ProfilGateway($con); $profilGate = new ProfilGateway($con);
// Insérez le nouvel utilisateur dans la base de données en utilisant AlumniGateway // Insérez le nouvel utilisateur dans la base de données en utilisant AlumniGateway
if ($gate->insert($email, $hashpassword, $role)) { if ($gate->insert($email, $hashpassword, $role)) {
$id = $gate->getID($email); $id = $gate->getID($email);
if($profilGate->insert($id,$nom, $prenom,$email)){ if ($profilGate->insert($id, $nom, $prenom, $email)) {
// L'insertion a réussi, retournez le nouvel utilisateur // L'insertion a réussi, retournez le nouvel utilisateur
$nouvelUtilisateur = new Alumni($id,$email, $hashpassword, $role,$nom,$prenom); $nouvelUtilisateur = new Alumni($id, $email, $hashpassword, $role, $nom, $prenom);
return $nouvelUtilisateur; return $nouvelUtilisateur;
} }
return null; return null;
@ -76,7 +77,7 @@ class UtilisateurModele
public function getUtilisateurByEmail(string $email) public function getUtilisateurByEmail(string $email)
{ {
$con = new Connection(DB_HOST,DB_USER,DB_PASS); $con = new Connection(DB_HOST, DB_USER, DB_PASS);
$gate = new AlumniGateway($con); $gate = new AlumniGateway($con);
// Récupérez l'utilisateur avec l'email donné en utilisant AlumniGateway // Récupérez l'utilisateur avec l'email donné en utilisant AlumniGateway
$utilisateur = $gate->findByEmail($email); $utilisateur = $gate->findByEmail($email);
@ -89,7 +90,7 @@ class UtilisateurModele
} }
} }
public function getEvenement() : array public function getEvenement(): array
{ {
$gate = new EvenementGateway($this->con); $gate = new EvenementGateway($this->con);
@ -97,8 +98,7 @@ class UtilisateurModele
$evenement = array(); $evenement = array();
foreach($data as $row) foreach ($data as $row) {
{
$evenement[] = new Evenement( $evenement[] = new Evenement(
$row['id'], $row['id'],
$row['organisateur'], $row['organisateur'],
@ -135,7 +135,7 @@ class UtilisateurModele
$gate->deleteEvenement($id); $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);
@ -154,7 +154,7 @@ class UtilisateurModele
return $evenement; return $evenement;
} }
public function getEvenementByTitre(string $titre) : array public function getEvenementByTitre(string $titre): array
{ {
$gate = new EvenementGateway($this->con); $gate = new EvenementGateway($this->con);
@ -162,8 +162,7 @@ class UtilisateurModele
$evenement = array(); $evenement = array();
foreach($data as $row) foreach ($data as $row) {
{
$evenement[] = new Evenement( $evenement[] = new Evenement(
$row['id'], $row['id'],
$row['organisateur'], $row['organisateur'],
@ -177,4 +176,29 @@ class UtilisateurModele
return $evenement; 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;
}
} }

@ -0,0 +1,58 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Profils des Alumnis</title>
<style>
.profiles-container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.profile {
margin: 10px;
text-align: center;
}
.profile img {
width: 100px; /* ou la taille que vous préférez */
border-radius: 50%;
}
.pagination {
text-align: center;
margin-top: 20px;
}
.pagination a {
margin: 0 5px;
text-decoration: none;
color: #333;
}
.pagination a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<h1>Les Alumnis :</h1>
<div class="profiles-container">
{% for utilisateur in utilisateurs %}
<div class="profile">
<img src="{{ 'assets/' ~ utilisateur.image ?? 'logo.png' }}" alt="Image de profil">
<p>{{ utilisateur.prenom }} {{ utilisateur.nom }}</p>
<a href="{{ 'voir_profil.php?id=' ~ utilisateur.id }}">Voir le profil</a>
</div>
{% else %}
<p>Aucun profil trouvé.</p>
{% endfor %}
</div>
<div class="pagination">
{% if page > 1 %}
<a href="{{ 'index.php?action=getProfilByPage&page=' ~ (page - 1) }}">Précédente</a>
{% endif %}
{{ page }}
<a href="{{ 'index.php?action=getProfilByPage&page=' ~ (page + 1) }}">Suivante</a>
</div>
</body>
</html>
Loading…
Cancel
Save