affichage profil et pagination fonctionnelle

AffichageProfil
Leo TUAILLON 1 year ago
parent f2cea0d18d
commit 4ee484b938

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

@ -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');

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

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

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

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

@ -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, "","", "", "","");
}
/**

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

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

@ -4,43 +4,24 @@
<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>
<link rel="stylesheet" href="{{ dir }}/public/css/profil.css">
</head>
<body>
<header>
{% include "menu.html" %}
</header>
<h1>Les Alumnis :</h1>
<div class="profiles-container">
{% for utilisateur in utilisateurs %}
{% for profil in profils %}
<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 class="profile-image-container">
<img src="{{ dir }}/public/assets/{{ profil.image ?: 'default.png' }}" alt="Image de profil">
</div>
<div class="profile-details">
<p>{{ profil.prenom }} {{ profil.nom }}</p>
<a href="{{ 'voir_profil.php?id=' ~ profil.id }}">Voir le profil</a>
</div>
</div>
{% else %}
<p>Aucun profil trouvé.</p>
@ -49,10 +30,12 @@
<div class="pagination">
{% if page > 1 %}
<a href="{{ 'index.php?action=getProfilByPage&page=' ~ (page - 1) }}">Précédente</a>
<a href="{{ dir }}/getProfilByPage/{{ page - 1 }}">Précédente</a>
{% endif %}
<span>{{ page }}</span>
{% if page < nombreTotalPages %}
<a href="{{ dir }}/getProfilByPage/{{ page + 1 }}">Suivante</a>
{% endif %}
{{ page }}
<a href="{{ 'index.php?action=getProfilByPage&page=' ~ (page + 1) }}">Suivante</a>
</div>
</body>
</html>

Loading…
Cancel
Save