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" => [
"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":
$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]);
}
}
}

@ -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,7 +25,8 @@ 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';
$this->con->executeQuery($query, array(
':i' => array($id, PDO::PARAM_INT),
@ -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,7 +56,8 @@ class AlumniGateway
}
public function getAll(){
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'];
}
}

@ -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();
}
}

@ -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
@ -97,8 +98,7 @@ class UtilisateurModele
$evenement = array();
foreach($data as $row)
{
foreach ($data as $row) {
$evenement[] = new Evenement(
$row['id'],
$row['organisateur'],
@ -162,8 +162,7 @@ class UtilisateurModele
$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;
}
}

@ -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