Skip to content
Snippets Groups Projects
Commit 51f2d7a9 authored by Adrien Fryson's avatar Adrien Fryson
Browse files

ajout fils de discussion sur la sidebar, météo dans la page d'accueil (aucune...

ajout fils de discussion sur la sidebar, météo dans la page d'accueil (aucune utilité mais bon) et début de la doc
parent 9d0b1e09
No related branches found
No related tags found
No related merge requests found
# Documentation de CampusTalk
## Description Générale
CampusTalk est une application WEB de réseau social permettant aux utilisateurs de créer des fils de discussion, d'y poster des messages textuels, et de lire les messages des autres abonnés au même fil. L'application est développée en JEE (jakarta) avec une architecture MVC, et elle est conçue pour être responsive, fonctionnant aussi bien sur ordinateur que sur smartphone.
## MCD
A FAIRE
## MLD
Utilisateur(email, nom, motDePasse, dateInscription)
FilDeDiscussion(id, nom, dateCreation, createurEmail, description, logo)
Message(id, contenu, datePublication, filId, auteurEmail, fileName, likeCount)
Abonnement(utilisateurEmail, filId, dateAbonnement)
## Requêtes SQL Pertinentes
Lister tous les utilisateurs
```sql
SELECT * FROM Utilisateur;
```
Lister tous les fils de discussion avec le nom du créateur
```sql
SELECT f.id, f.nom, u.nom AS nomCreateur
FROM FilDeDiscussion f
JOIN Utilisateur u ON f.createurEmail = u.email;
```
Lister tous les messages d'un fil de discussion spécifique avec le nom de l'auteur
```sql
SELECT m.contenu, u.nom AS nomAuteur, m.datePublication
FROM Message m
JOIN Utilisateur u ON m.auteurEmail = u.email
WHERE m.filId = 1
ORDER BY m.datePublication;
```
Lister tous les abonnements d'un utilisateur spécifique
```sql
SELECT f.nom AS nomFil, a.dateAbonnement
FROM Abonnement a
JOIN FilDeDiscussion f ON a.filId = f.id
WHERE a.utilisateurEmail = 'utilisateur1@exemple.com';
```
Lister les fils de discussion auxquels un utilisateur n'est pas abonné
```sql
SELECT f.id, f.nom
FROM FilDeDiscussion f
LEFT JOIN Abonnement a ON f.id = a.filId AND a.utilisateurEmail = 'utilisateur1@exemple.com'
WHERE a.utilisateurEmail IS NULL;
```
Compter le nombre de messages par fil de discussion
```sql
SELECT f.nom AS nomFil, COUNT(m.id) AS nombreMessages
FROM FilDeDiscussion f
LEFT JOIN Message m ON f.id = m.filId
GROUP BY f.nom;
```
Trouver les utilisateurs qui ont publié des messages dans un fil spécifique
```sql
SELECT DISTINCT u.nom, u.email
FROM Utilisateur u
JOIN Message m ON u.email = m.auteurEmail
WHERE m.filId = 1;
```
Lister les 5 derniers messages publiés dans un fil de discussion
```sql
SELECT m.contenu, u.nom AS nomAuteur, m.datePublication
FROM Message m
JOIN Utilisateur u ON m.auteurEmail = u.email
WHERE m.filId = 1
ORDER BY m.datePublication DESC
LIMIT 5;
```
Compter le nombre d'abonnés par fil de discussion
```sql
SELECT f.nom AS nomFil, COUNT(a.utilisateurEmail) AS nombreAbonnes
FROM FilDeDiscussion f
LEFT JOIN Abonnement a ON f.id = a.filId
GROUP BY f.nom;
```
Lister les utilisateurs qui ne sont abonnés à aucun fil de discussion
```sql
SELECT u.email, u.nom
FROM Utilisateur u
LEFT JOIN Abonnement a ON u.email = a.utilisateurEmail
WHERE a.utilisateurEmail IS NULL;
```
## Arborescence de l'application
/CampusTalk
|-- /images
| |-- default.png
| |-- logo.png
|
|-- /uploads
| |-- images_utilisateurs.jpg
|
|-- /WEB-INF
| |-- /classes
| | |-- /controleur
| | | |-- Accueil.java
| | | |-- CreerFil.java
| | | |-- DeleteFil.java
| | | |-- DeleteMessage.java
| | | |-- EnvoyerMessage.java
| | | |-- Fil.java
| | | |-- GetFils.java
| | | |-- Like.java
| | | |-- ListerFil.java
| | | |-- Login.java
| | | |-- Logout.java
| | | |-- MenuFil.java
| | | |-- ModifierFil.java
| | | |-- Parametre.java
| | | |-- Registrer.java
| | | |-- SuivreFil.java
| | |-- /modele
| | | |-- Abonnement.java
| | | |-- AbonnementDAO.java
| | | |-- DS.java
| | | |-- FilDeDiscussion.java
| | | |-- FilDeDiscussionDAO.java
| | | |-- Message.java
| | | |-- MessageDAO.java
| | | |-- Utilisateur.java
| | | |-- UtilisateurDAO.java
| | |-- /vue
| | | |-- accueil.jsp
| | | |-- creerFil.jsp
| | | |-- fil.jsp
| | | |-- listerFil.jsp
| | | |-- login.jsp
| | | |-- menuFil.jsp
| | | |-- parametre.jsp
| | | |-- register.jsp
|
|-- /META-INF
| |-- context.xml
## Liste des entrées avec leur fonctionnalité
**A chaque fois, sauf dans login et register, si l'utilisateur n'est pas connecté (email dans la session), alors il est redirigé vers la page de login**
Accueil : Redirige vers la page d'accueil en verifiant que l'utilisateur est log
CreerFil : Permet de créer un fil de discussion, on peut mettre un logo au fil
DeleteFil : Permet au créateur d'un fil de discussion de le supprimer
DeleteMessage : Permet à l'auteur d'un message de le supprimer
EnvoyerMessage : Permet d'envoyer un message, on peut joindre une image
Fil : Redirige vers un fil de discussion (si l'utilisateur y est abonné)
GetFils : Permet de récuperer la liste des fils de discussion où l'utilisateur est abonné
Like : Permet de like/unlike un message
ListerFil : Redirige vers la page pour lister les fils auxquels l'utilisateur n'est pas encore abonné
Login : Dans doGet(), redirige vers la page login.jsp pour permettre à l'utilisateur de se connecter. Dans doPost(), authentifie l'utilisateur en vérifiant les informations d'identification fournies
Logout : Deconnecte l'utilisateur actuellement authentifié et redirige vers la page de login
MenuFil : Redirige vers la page menuFil.jsp pour modifier les informations sur un fil de discussion
ModifierFil : Rermet de modifier les informations d'un fil de discussion
Parametre : Permet de changer les parametres du compte de l'utilisateur
Registrer : Dans doGet(), redirige vers la page register.jsp pour permettre à un nouvel utilisateur de s'inscrire. Dans doPost(), enregistre un nouvel utilisateur après vérification que l'email est unique
SuivreFil : Permet de suivre un fil de discussion pour y avoir accès
## Points techniques difficiles
...
\ No newline at end of file
......@@ -37,6 +37,10 @@ public class CreerFil extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
res.sendRedirect(req.getContextPath() + "/login");
return;
}
FilDeDiscussionDAO f = new FilDeDiscussionDAO();
String nom = StringEscapeUtils.escapeHtml4(req.getParameter("nom"));
String createuremail = StringEscapeUtils.escapeHtml4(req.getParameter("createuremail"));
......
......@@ -15,8 +15,7 @@ public class Like extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
String userEmail = (String) req.getSession().getAttribute("email");
if (userEmail == null) {
if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
res.sendRedirect(req.getContextPath() + "/login");
return;
}
......
......@@ -16,6 +16,19 @@
<title>CampusTalk - Accueil</title>
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<link rel="shortcut icon" href="<%= request.getContextPath() %>/images/logo.png">
<script>
async function fetchWeather() {
const response = await fetch('https://api.open-meteo.com/v1/forecast?latitude=50.6292&longitude=3.0573&current_weather=true');
const data = await response.json();
document.querySelector('#weather').innerHTML = `
<h3 class="text-xl font-bold">Météo à Lille</h3>
<p>Température: \${data.current_weather.temperature}°C</p>
<p>Vent: \${data.current_weather.windspeed} km/h \${data.current_weather.winddirection} %</p>
`;
}
window.onload = fetchWeather;
</script>
</head>
<body class="bg-gray-900 text-white flex flex-col md:flex-row">
<aside class="w-full md:w-64 bg-gray-800 text-white h-auto md:h-screen">
......@@ -28,8 +41,23 @@
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
<h3 class="mt-4 px-4 text-lg font-semibold">Vos abonnements</h3>
<%
String email = (String) session.getAttribute("email");
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (Abonnement abonnement : abonnements) {
FilDeDiscussion fil = fddao.findById(abonnement.getIdFil());
%>
<a href="<%= request.getContextPath() %>/fil?id=<%= fil.getId() %>" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700 flex items-center">
<img src="<%= request.getContextPath() %>/images/<%= fil.getLogo() %>" alt="Logo" class="w-8 h-8 mr-2">
<span><%= fil.getNom() %></span>
</a>
<% } %>
</nav>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</aside>
<div class="flex-1 p-6">
......@@ -41,40 +69,17 @@
<% } %>
<%
UtilisateurDao udao=new UtilisateurDao(); String email=(String) session.getAttribute("email");
String username=udao.findUtilisateur(email).getNom(); AbonnementDao adao=new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
FilDeDiscussionDAO fdao = new FilDeDiscussionDAO();
UtilisateurDao udao=new UtilisateurDao();
String username=udao.findUtilisateur(email).getNom();
%>
<div class="max-w-2xl mx-auto mt-12 p-6 bg-gray-800 rounded-lg shadow-md">
<h2 class="text-2xl font-bold mb-4">Bienvenue sur CampusTalk</h2>
<h2 class="text-2xl font-bold mb-4">Bienvenue sur CampusTalk !</h2>
<p class="mb-4">Bonjour, <%= username %> !</p>
<p class="mb-4">Vous êtes connecté en tant que <%= email %></p>
</div>
<div class="max-w-2xl mx-auto mt-8 p-6 bg-gray-800 rounded-lg shadow-md">
<h3 class="text-xl font-bold mb-4">Vos abonnements</h3>
<%
Set<Integer> abonnementsIds = new HashSet<>();
for (Abonnement abonnement : abonnements) {
abonnementsIds.add(abonnement.getIdFil());
}
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (FilDeDiscussion f : fddao.findAll()) {
if (abonnementsIds.contains(f.getId())) {
%>
<div class="mb-4 p-4 bg-gray-700 rounded-lg shadow-md hover:bg-gray-600">
<a href="<%= request.getContextPath() %>/fil?id=<%= f.getId() %>" class="block">
<img src="<%= request.getContextPath() %>/images/<%= f.getLogo() %>" alt="Logo" class="w-16 h-16 mx-auto">
<h4 class="font-bold text-lg"><%= f.getNom() %></h4>
<% if (f.getDescription() != null) { %>
<p class="text-gray-400"><%= f.getDescription() %></p>
<% } %>
</div>
<%
}
}
%>
<div id="weather" class="max-w-2xl mx-auto mt-12 p-6 bg-gray-800 rounded-lg shadow-md text-center">
<h3 class="text-xl font-bold">Chargement de la météo...</h3>
</div>
</div>
</body>
......
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="modele.AbonnementDao" %>
<%@ page import="modele.FilDeDiscussion" %>
<%@ page import="modele.FilDeDiscussionDAO" %>
<%@ page import="modele.Abonnement" %>
<%@ page import="java.util.List" %>
<!DOCTYPE html>
<html lang="fr">
......@@ -20,8 +25,24 @@
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
<h3 class="mt-4 px-4 text-lg font-semibold">Vos abonnements</h3>
<%
String email = (String) session.getAttribute("email");
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (Abonnement abonnement : abonnements) {
FilDeDiscussion fil = fddao.findById(abonnement.getIdFil());
%>
<a href="<%= request.getContextPath() %>/fil?id=<%= fil.getId() %>" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700 flex items-center">
<img src="<%= request.getContextPath() %>/images/<%= fil.getLogo() %>" alt="Logo" class="w-8 h-8 mr-2">
<span><%= fil.getNom() %></span>
</a>
<% } %>
</nav>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</aside>
<div class="flex-1 p-6">
......
......@@ -3,6 +3,8 @@
<%@ page import="modele.FilDeDiscussionDAO" %>
<%@ page import="modele.Message" %>
<%@ page import="modele.MessageDao" %>
<%@ page import="modele.AbonnementDao" %>
<%@ page import="modele.Abonnement" %>
<%@ page import="java.util.List" %>
<%@ page import="java.time.LocalDateTime" %>
<%@ page import="java.time.format.DateTimeFormatter" %>
......@@ -41,17 +43,31 @@
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
<h3 class="mt-4 px-4 text-lg font-semibold">Vos abonnements</h3>
<%
String email = (String) session.getAttribute("email");
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (Abonnement abonnement : abonnements) {
FilDeDiscussion filAbonne = fddao.findById(abonnement.getIdFil());
%>
<a href="<%= request.getContextPath() %>/fil?id=<%= filAbonne.getId() %>" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700 flex items-center">
<img src="<%= request.getContextPath() %>/images/<%= filAbonne.getLogo() %>" alt="Logo" class="w-8 h-8 mr-2">
<span><%= filAbonne.getNom() %></span>
</a>
<% } %>
</nav>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</aside>
<div class="flex-1 p-6 flex flex-col">
<%
String email = (String) session.getAttribute("email");
int id = Integer.parseInt(request.getParameter("id"));
session.setAttribute("filId", id);
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
FilDeDiscussion fil = fddao.findById(id);
MessageDao mdao = new MessageDao();
List<Message> messages = mdao.findByFil(id);
......
......@@ -27,8 +27,24 @@
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
<h3 class="mt-4 px-4 text-lg font-semibold">Vos abonnements</h3>
<%
String email = (String) session.getAttribute("email");
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (Abonnement abonnement : abonnements) {
FilDeDiscussion fil = fddao.findById(abonnement.getIdFil());
%>
<a href="<%= request.getContextPath() %>/fil?id=<%= fil.getId() %>" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700 flex items-center">
<img src="<%= request.getContextPath() %>/images/<%= fil.getLogo() %>" alt="Logo" class="w-8 h-8 mr-2">
<span><%= fil.getNom() %></span>
</a>
<% } %>
</nav>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</aside>
<div class="flex-1 p-6">
......@@ -37,15 +53,11 @@
<h2 class="text-2xl font-bold mb-4 text-center">Fils de Discussion</h2>
<p class="text-gray-400 mb-4 text-center">(auxquels vous n'êtes pas abonné)</p>
<%
String email = (String) session.getAttribute("email");
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
Set<Integer> abonnementsIds = new HashSet<>();
for (Abonnement abonnement : abonnements) {
abonnementsIds.add(abonnement.getIdFil());
}
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (FilDeDiscussion f : fddao.findAll()) {
if (!abonnementsIds.contains(f.getId())) {
%>
......
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="modele.AbonnementDao" %>
<%@ page import="modele.FilDeDiscussion" %>
<%@ page import="modele.FilDeDiscussionDAO" %>
<%@ page import="modele.Abonnement" %>
<%@ page import="java.util.List" %>
<!DOCTYPE html>
<html lang="fr">
......@@ -15,13 +20,13 @@
<img src="<%= request.getContextPath() %>/images/logo.png" alt="CampusTalk Logo" class="w-16 h-16 mx-auto">
<h1 class="text-2xl font-bold mt-4">CampusTalk</h1>
</div>
<!-- <nav class="mt-4">
<nav class="mt-4">
<a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</nav> -->
</nav>
</aside>
<div class="flex-1 p-6">
<div class="max-w-md mx-auto mt-12 p-6 bg-gray-800 rounded-lg shadow-md">
......
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="modele.FilDeDiscussion" %>
<%@ page import="modele.FilDeDiscussionDAO" %>
<%@ page import="modele.AbonnementDao" %>
<%@ page import="modele.Abonnement" %>
<%@ page import="java.util.List" %>
<%
int id = Integer.parseInt(session.getAttribute("filId").toString());
......@@ -17,19 +20,34 @@
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<link rel="shortcut icon" href="<%= request.getContextPath() %>/images/logo.png">
</head>
<body class="bg-gray-900 text-white flex">
<aside class="w-64 bg-gray-800 text-white h-screen flex flex-col fixed">
<body class="bg-gray-900 text-white flex flex-col md:flex-row">
<aside class="w-full md:w-64 bg-gray-800 text-white h-auto md:h-screen">
<div class="p-4 text-center">
<img src="<%= request.getContextPath() %>/images/logo.png" alt="CampusTalk Logo" class="w-16 h-16 mx-auto">
<h1 class="text-2xl font-bold mt-4">CampusTalk</h1>
</div>
<nav class="mt-4 flex-grow">
<nav class="mt-4">
<a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
<h3 class="mt-4 px-4 text-lg font-semibold">Vos abonnements</h3>
<%
String email = (String) session.getAttribute("email");
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
for (Abonnement abonnement : abonnements) {
FilDeDiscussion filAbonne = fddao.findById(abonnement.getIdFil());
%>
<a href="<%= request.getContextPath() %>/fil?id=<%= filAbonne.getId() %>" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700 flex items-center">
<img src="<%= request.getContextPath() %>/images/<%= filAbonne.getLogo() %>" alt="Logo" class="w-8 h-8 mr-2">
<span><%= filAbonne.getNom() %></span>
</a>
<% } %>
</nav>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</aside>
<div class="flex-1 p-6">
<div class="max-w-2xl mx-auto mt-8 p-6 bg-gray-800 rounded-lg shadow-lg">
......
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="modele.Utilisateur" %>
<%@ page import="modele.UtilisateurDao" %>
<%@ page import="modele.AbonnementDao" %>
<%@ page import="modele.FilDeDiscussion" %>
<%@ page import="modele.FilDeDiscussionDAO" %>
<%@ page import="modele.Abonnement" %>
<%@ page import="java.util.List" %>
<%
String email = (String) session.getAttribute("email");
......@@ -28,8 +33,23 @@
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
<h3 class="mt-4 px-4 text-lg font-semibold">Vos abonnements</h3>
<%
AbonnementDao adao = new AbonnementDao();
List<Abonnement> abonnements = adao.findAbonnements(email);
FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
for (Abonnement abonnement : abonnements) {
FilDeDiscussion fil = fddao.findById(abonnement.getIdFil());
%>
<a href="<%= request.getContextPath() %>/fil?id=<%= fil.getId() %>" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700 flex items-center">
<img src="<%= request.getContextPath() %>/images/<%= fil.getLogo() %>" alt="Logo" class="w-8 h-8 mr-2">
<span><%= fil.getNom() %></span>
</a>
<% } %>
</nav>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</aside>
<div class="flex-1 p-6">
<div class="max-w-md mx-auto mt-12 p-6 bg-gray-800 rounded-lg shadow-md">
......
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="modele.AbonnementDao" %>
<%@ page import="modele.FilDeDiscussion" %>
<%@ page import="modele.FilDeDiscussionDAO" %>
<%@ page import="modele.Abonnement" %>
<%@ page import="java.util.List" %>
<!DOCTYPE html>
<html lang="fr">
......@@ -15,13 +20,13 @@
<img src="<%= request.getContextPath() %>/images/logo.png" alt="CampusTalk Logo" class="w-16 h-16 mx-auto">
<h1 class="text-2xl font-bold mt-4">CampusTalk</h1>
</div>
<!-- <nav class="mt-4">
<nav class="mt-4">
<a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
<a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
<a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
<a href="<%= request.getContextPath() %>/parametre" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Paramètres</a>
<a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
</nav> -->
</nav>
</aside>
<div class="flex-1 p-6">
<div class="max-w-md mx-auto mt-12 p-6 bg-gray-800 rounded-lg shadow-md">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment