affichage des profils + réglage du problème de connection

AffichageProfil
Leo TUAILLON 1 year ago
parent 4ee484b938
commit bc1f77c054

@ -1,4 +1,4 @@
/* styles.css */ /* profil.css */
.profiles-container { .profiles-container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -9,61 +9,114 @@
} }
.profile { .profile {
width: calc(33.333% - 20px); width: calc(50% - 20px); /* Ajustez la largeur si nécessaire pour correspondre au design */
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); border: 1px solid #ccc; /* Bordure comme dans l'image */
border-radius: 10px; border-radius: 10px;
overflow: hidden; overflow: hidden;
background: #fff; background: #fff;
margin-bottom: 20px; margin-bottom: 20px;
display: flex;
align-items: center; /* Alignement vertical */
} }
.profile-image-container { .profile-image-container {
padding: 10px; padding: 10px;
display: flex;
align-items: center;
justify-content: center;
background: #f0f0f0; background: #f0f0f0;
flex-shrink: 0; /* Empêche le conteneur de rétrécir */
} }
.profile-image-container img { .profile-image-container img {
width: 100px; width: 100px;
height: 100px; height: 100px;
border-radius: 50%; border-radius: 50%;
display: block;
margin: auto;
} }
.profile-details { .profile-details {
padding: 10px; padding: 10px;
text-align: center; flex-grow: 1; /* Permet à ce div de prendre l'espace restant */
} }
.profile-details p { .profile-details p {
margin: 5px 0; 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 { .profile-details a {
display: inline-block; display: block; /* Prend toute la largeur du conteneur */
background: #007bff; background: #007bff;
color: #fff; color: #fff;
padding: 5px 15px; padding: 5px 15px;
text-decoration: none; text-decoration: none;
border-radius: 5px; border-radius: 5px;
font-size: 14px; font-size: 14px;
margin-top: 10px; /* Espace au-dessus du lien */
text-align: center; /* Centre le texte dans le lien */
} }
.profile-details a:hover { .profile-details a:hover {
background: #0056b3; background: #0056b3;
} }
/* profil.css */
.pagination { .pagination {
text-align: center; display: flex;
margin-top: 20px; padding-left: 0;
list-style: none;
border-radius: 0.25rem;
} }
.pagination a { .page-link {
margin: 0 5px; 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; 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 { .page-item.active .page-link {
text-decoration: underline; 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;
} }

@ -18,7 +18,12 @@ class FrontControleur
global $twig; global $twig;
session_start(); 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 = new AltoRouter();
$router->setBasePath('/SAE_2A_FA-Reseau_ALICA/php'); $router->setBasePath('/SAE_2A_FA-Reseau_ALICA/php');

@ -7,6 +7,7 @@ use App\gateway\ImageSaver;
use App\metier\Alumni; use App\metier\Alumni;
use App\modele\OffreModele; use App\modele\OffreModele;
use App\modele\UtilisateurModele; use App\modele\UtilisateurModele;
use Exception;
class UtilisateurControleur class UtilisateurControleur
{ {
@ -27,15 +28,12 @@ class UtilisateurControleur
if ($utilisateur instanceof Alumni) { if ($utilisateur instanceof Alumni) {
$_SESSION['utilisateur'] = $utilisateur; $_SESSION['utilisateur'] = $utilisateur;
// Afficher une autre page via Twig echo $twig->render('accueil.html');
echo $twig->render('accueil.html', ['prenom' => $utilisateur->getPrenom(), 'nom' => $utilisateur->getNom()]);
return; return;
} else { } else {
$dVueErreur[] = "L'adresse email ou le mot de passe est incorrect."; $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]); echo $twig->render('connection.html', ['dVueErreur' => $dVueErreur]);
} }
@ -43,7 +41,7 @@ class UtilisateurControleur
{ {
global $twig; global $twig;
$dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant $dVueErreur = [];
$userModel = new UtilisateurModele(); $userModel = new UtilisateurModele();
if (isset($_POST['firstname'],$_POST['name'], $_POST['email'], $_POST['password'])) { if (isset($_POST['firstname'],$_POST['name'], $_POST['email'], $_POST['password'])) {
@ -52,23 +50,25 @@ class UtilisateurControleur
$email = Validation::nettoyerString($_POST['email']); $email = Validation::nettoyerString($_POST['email']);
$motDePasse = Validation::nettoyerString($_POST['password']); $motDePasse = Validation::nettoyerString($_POST['password']);
$hash = password_hash($motDePasse, PASSWORD_DEFAULT); $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 ($nouvelUtilisateur instanceof Alumni) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo $twig->render('inscription_success.html');
$dVueErreur[] = "L'adresse email n'est pas valide ou est déjà utilisée."; exit();
} 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); catch (Exception $e) {
$dVueErreur[] = "L'inscription a échoué, veuillez réessayer.";
if ($nouvelUtilisateur instanceof Alumni) {
echo $twig->render('inscription_success.html');
exit();
} else {
$dVueErreur[] = "L'inscription a échoué, veuillez réessayer.";
} }
} }
echo $twig->render('inscription.html', ['dVueErreur' => $dVueErreur]); echo $twig->render('inscription.html', ['dVueErreur' => $dVueErreur]);
@ -79,19 +79,13 @@ class UtilisateurControleur
global $twig; global $twig;
// Ajout d'un var_dump pour déboguer // Ajout d'un var_dump pour déboguer
if (isset($_SESSION['utilisateur']) && $_SESSION['utilisateur'] instanceof Alumni) { 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(); $userModel = new UtilisateurModele();
$evenements=$userModel->getEvenement(); $evenements=$userModel->getEvenement();
//aller sur la page d'accueil avec le nom et prenom de l'utilisateur //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() public function consulterProfilLimite()
@ -354,27 +348,29 @@ class UtilisateurControleur
public function getProfilByPage(?array $params) public function getProfilByPage(?array $params)
{ {
global $twig; global $twig;
$dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant
$userModel = new UtilisateurModele(); $userModel = new UtilisateurModele();
$nbParPage = 5; $nbParPage = 10;
$nombreTotalPages = ($userModel->getNbTotalPages())/$nbParPage; $nombreTotalPages = ceil(($userModel->getNbTotalPages())/$nbParPage);
if (isset($params['id'] ) && $params['id'] != null) { if (isset($params['id'] ) && $params['id'] != null) {
$page = Validation::validerIntPossitif($params['id']); $page = Validation::validerIntPossitif($params['id']);
$profils = $userModel->getProfilByPage($page, $nbParPage); try{
$profils = $userModel->getProfilByPage($page, $nbParPage);
if ($profils[0] != null) { if (isset($profils)) {
echo $twig->render('profil.html', [ echo $twig->render('profil.html', [
'profils' => $profils, 'profils' => $profils,
'nombreTotalPages' => $nombreTotalPages, 'nombreTotalPages' => $nombreTotalPages,
'page' => $page] 'page' => $page]
); );
} else { }
$dVueErreur[] = "L'utilisateur n'existe pas."; }catch (Exception $e){
$dVueErreur[] = "Aucun profil n'a été trouvé.";
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
} }
} else { } else {
$dVueErreur[] = "L'utilisateur n'existe pas."; $dVueErreur[] = "La page n'existe pas.";
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
} }
} }

@ -191,7 +191,7 @@ class UtilisateurModele
$con = new Connection(DB_HOST, DB_USER, DB_PASS); $con = new Connection(DB_HOST, DB_USER, DB_PASS);
$gate = new ProfilGateway($con); $gate = new ProfilGateway($con);
$data = $gate->userByPage($page, $nbParPage); $data = $gate->userByPage($page, $nbParPage);
if($data[0]!=null){ if(isset($data)){
//Création d'une liste d'objets utilisateurs //Création d'une liste d'objets utilisateurs
$profils = array(); $profils = array();
foreach ($data as $row) { foreach ($data as $row) {

@ -21,6 +21,7 @@
<li class="nav-link"><a href="{{dir}}/consultOffers">Offres</a></li> <li class="nav-link"><a href="{{dir}}/consultOffers">Offres</a></li>
<li class="nav-link"><a href="#">Nous contacter</a></li> <li class="nav-link"><a href="#">Nous contacter</a></li>
<li class="nav-link"><a href="{{dir}}/getProfilByPage/1">Les Alumnis</a></li>
</ul> </ul>
<ul class="nav-items"> <ul class="nav-items">
<!-- Afficher boutons de connexion et d'inscription --> <!-- Afficher boutons de connexion et d'inscription -->

@ -4,38 +4,67 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Profils des Alumnis</title> <title>Profils des Alumnis</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="{{ dir }}/public/css/profil.css"> <link rel="stylesheet" href="{{ dir }}/public/css/profil.css">
</head> </head>
<body> <body>
<header> <header>
{% include "menu.html" %} {% include "menu.html" %}
</header> </header>
<h1>Les Alumnis :</h1> <h1 class="text-center my-4">Les Alumnis :</h1>
<div class="container">
<div class="profiles-container"> <div class="row justify-content-center">
{% for profil in profils %} <div class="col-12 col-md-8">
<div class="profile"> <div class="profiles-container">
<div class="profile-image-container"> {% for profil in profils %}
<img src="{{ dir }}/public/assets/{{ profil.image ?: 'default.png' }}" alt="Image de profil"> <div class="profile d-flex">
</div> <div class="profile-image-container">
<div class="profile-details"> <img src="{{ dir }}/public/assets/{{ profil.image ?: 'default.png' }}" alt="Image de profil">
<p>{{ profil.prenom }} {{ profil.nom }}</p> </div>
<a href="{{ 'voir_profil.php?id=' ~ profil.id }}">Voir le profil</a> <div class="profile-details">
<p>{{ profil.prenom }} {{ profil.nom }}</p>
<p class="job-title">Développeur web chez CGI FRANCE</p>
<a href="{{ 'voir_profil.php?id=' ~ profil.id }}" class="btn btn-primary">Voir le détail du profil</a>
{% if user.role == 'admin' %}
<a href="{{ 'bloquer_profil.php?id=' ~ profil.id }}" class="btn btn-danger">Bannir l'utilisateur</a>
{% endif %}
</div>
</div>
{% else %}
<p>Aucun profil trouvé.</p>
{% endfor %}
</div>
</div> </div>
</div> </div>
{% else %}
<p>Aucun profil trouvé.</p>
{% endfor %}
</div> </div>
<div class="pagination"> <nav aria-label="Page navigation example">
{% if page > 1 %} <ul class="pagination justify-content-center">
<a href="{{ dir }}/getProfilByPage/{{ page - 1 }}">Précédente</a> <li class="page-item {% if page <= 1 %}disabled{% endif %}">
{% endif %} <a class="page-link" href="{{ dir }}/getProfilByPage/{{ page - 1 }}" tabindex="-1">Précédente</a>
<span>{{ page }}</span> </li>
{% if page < nombreTotalPages %}
<a href="{{ dir }}/getProfilByPage/{{ page + 1 }}">Suivante</a> {% for i in 1..nombreTotalPages %}
{% endif %} <li class="page-item {% if page == i %}active{% endif %}">
</div> <a class="page-link" href="{{ dir }}/getProfilByPage/{{ i }}">{{ i }}</a>
</li>
{% endfor %}
{% if page < nombreTotalPages %}
<li class="page-item">
<a class="page-link" href="{{ dir }}/getProfilByPage/{{ page + 1 }}">Suivante</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#">Suivante</a>
</li>
{% endif %}
</ul>
</nav>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</body> </body>
</html> </html>

Loading…
Cancel
Save