diff --git a/sae/WEB-INF/src/controleur/DeleteMessage.java b/sae/WEB-INF/src/controleur/DeleteMessage.java index efd56d4920ba3549b67cc965bf74524c079a9307..74aa1e0bb3379a6398dd93f312aed4d52ae99788 100644 --- a/sae/WEB-INF/src/controleur/DeleteMessage.java +++ b/sae/WEB-INF/src/controleur/DeleteMessage.java @@ -33,4 +33,4 @@ public class DeleteMessage extends HttpServlet { } res.sendRedirect(req.getHeader("Referer")); } -} +} \ No newline at end of file diff --git a/sae/WEB-INF/src/controleur/GetFils.java b/sae/WEB-INF/src/controleur/GetFils.java index f9fe82c5bb0991cf3814fc1b24b884d6df7668fc..8ca4d2832e5dd7e99a5d7f599f71a6f13acc92f1 100644 --- a/sae/WEB-INF/src/controleur/GetFils.java +++ b/sae/WEB-INF/src/controleur/GetFils.java @@ -22,7 +22,8 @@ import modele.FilDeDiscussionDAO; import modele.Message; import modele.MessageDao; -//http GET http://localhost:8080/sae/getFils Cookie:"JSESSIONID=ton_session_id" --> F12>Storage>JSESSIONID +// http GET http://localhost:8080/CampusTalk/getFils Cookie:"JSESSIONID=?" --> F12>Storage>JSESSIONID +// curl -X GET http://localhost:8080/CampusTalk/getFils --cookie "JSESSIONID=?" @WebServlet("/getFils") public class GetFils extends HttpServlet { diff --git a/sae/WEB-INF/src/controleur/Parametre.java b/sae/WEB-INF/src/controleur/Parametre.java index 8da9bb591bb6f598c0e105f23dfc980de33c40d3..90d984bd0956792c184c465a0e406ef17d1f5293 100644 --- a/sae/WEB-INF/src/controleur/Parametre.java +++ b/sae/WEB-INF/src/controleur/Parametre.java @@ -6,9 +6,6 @@ import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import modele.AbonnementDao; -import modele.FilDeDiscussionDAO; -import modele.MessageDao; import modele.Utilisateur; import modele.UtilisateurDao; import org.apache.commons.text.StringEscapeUtils; diff --git a/sae/WEB-INF/src/modele/AbonnementDao.java b/sae/WEB-INF/src/modele/AbonnementDao.java index 51021fb8679bac59f2ae01e9a092a8df659d6df5..151db56f829371b350e8ac9b0be21c0da1e0a84d 100644 --- a/sae/WEB-INF/src/modele/AbonnementDao.java +++ b/sae/WEB-INF/src/modele/AbonnementDao.java @@ -3,7 +3,6 @@ package modele; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.SQLException; import java.util.List; import java.util.ArrayList; diff --git a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java index 4553a7577dadb8f09857d2528903eefad1aa5352..8abb930618ba223776cb6b5220ffb1907e42b5f8 100644 --- a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java +++ b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java @@ -3,7 +3,6 @@ package modele; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; import java.util.List; diff --git a/sae/WEB-INF/src/modele/MessageDao.java b/sae/WEB-INF/src/modele/MessageDao.java index b95fbb2f7a7ab2748326be4a7330fd2072f0b15c..9396802982d9c96ebc6af4dfe7a2b248d8d61a98 100644 --- a/sae/WEB-INF/src/modele/MessageDao.java +++ b/sae/WEB-INF/src/modele/MessageDao.java @@ -3,7 +3,6 @@ package modele; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.SQLException; import java.util.List; import java.util.ArrayList; @@ -35,7 +34,7 @@ public class MessageDao { public List<Message> findAll() { List<Message> messages = new ArrayList<>(); try(Connection con = DS.instance.getConnection()) { - PreparedStatement ps = con.prepareStatement("SELECT * FROM message"); + PreparedStatement ps = con.prepareStatement("SELECT * FROM message ORDER BY datePublication, id"); ResultSet rs = ps.executeQuery(); while (rs.next()) { Message message = new Message(); @@ -57,7 +56,7 @@ public class MessageDao { public List<Message> findByFil(int idFil) { List<Message> messages = new ArrayList<>(); try(Connection con = DS.instance.getConnection()) { - PreparedStatement ps = con.prepareStatement("SELECT * FROM message WHERE filId = ?"); + PreparedStatement ps = con.prepareStatement("SELECT * FROM message WHERE filId = ? ORDER BY datePublication, id"); ps.setInt(1, idFil); ResultSet rs = ps.executeQuery(); while (rs.next()) { diff --git a/sae/WEB-INF/src/modele/UtilisateurDao.java b/sae/WEB-INF/src/modele/UtilisateurDao.java index a13886737adcaa4cb428bf31775a4045ac1dca20..bd5592f4c3f214bee6996cf11b371b44f65b28d7 100644 --- a/sae/WEB-INF/src/modele/UtilisateurDao.java +++ b/sae/WEB-INF/src/modele/UtilisateurDao.java @@ -50,7 +50,7 @@ public class UtilisateurDao { public void update(Utilisateur utilisateur, String oldEmail) { try(Connection con = DS.instance.getConnection()) { - PreparedStatement ps = con.prepareStatement("UPDATE Utilisateur SET nom = ?, email = ?, motdepasse = ? WHERE email = ?"); + PreparedStatement ps = con.prepareStatement("UPDATE Utilisateur SET nom = ?, email = ?, motdepasse = MD5(?) WHERE email = ?"); ps.setString(1, utilisateur.getNom()); ps.setString(2, utilisateur.getEmail()); ps.setString(3, utilisateur.getMotDePasse()); diff --git a/sae/WEB-INF/vue/accueil.jsp b/sae/WEB-INF/vue/accueil.jsp index d4a5831960f1295c3e01ec9787c95c1b9dec2385..a8abe5a8801e43bf0fa7a3b9c9b47dd6d9289513 100644 --- a/sae/WEB-INF/vue/accueil.jsp +++ b/sae/WEB-INF/vue/accueil.jsp @@ -8,7 +8,6 @@ <%@ page import="java.util.Set" %> <%@ page import="java.util.HashSet" %> - <!DOCTYPE html> <html lang="fr"> <head> @@ -18,8 +17,8 @@ <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"> +<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> diff --git a/sae/WEB-INF/vue/creerFil.jsp b/sae/WEB-INF/vue/creerFil.jsp index a74d25bbaab7389a51fdc98b25d1589c5c02139d..7a2709ee7593e9cf315c0586901e2edab728940b 100644 --- a/sae/WEB-INF/vue/creerFil.jsp +++ b/sae/WEB-INF/vue/creerFil.jsp @@ -9,8 +9,8 @@ <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"> +<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> diff --git a/sae/WEB-INF/vue/fil.jsp b/sae/WEB-INF/vue/fil.jsp index ce25440411fc62e2b2a82d97c5c599f3c4147df6..9c21c56fda975e2a9e5cd5f47eea231cc4d9bf48 100644 --- a/sae/WEB-INF/vue/fil.jsp +++ b/sae/WEB-INF/vue/fil.jsp @@ -30,8 +30,8 @@ } </style> </head> -<body class="bg-gray-900 text-white flex h-screen"> - <aside class="w-64 bg-gray-800 text-white h-full"> +<body class="bg-gray-900 text-white flex flex-col md:flex-row h-screen"> + <aside class="w-full md:w-64 bg-gray-800 text-white h-auto md:h-full"> <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> diff --git a/sae/WEB-INF/vue/listerFil.jsp b/sae/WEB-INF/vue/listerFil.jsp index 51f0e0629f692d12d2a7d7db7bd77bd096178bcd..cb5bb28575cce47244fd24d2694522aaca63df0d 100644 --- a/sae/WEB-INF/vue/listerFil.jsp +++ b/sae/WEB-INF/vue/listerFil.jsp @@ -16,8 +16,8 @@ <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"> +<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> diff --git a/sae/WEB-INF/vue/login.jsp b/sae/WEB-INF/vue/login.jsp index 160e7b143e8b5e06ee72415f5bc1ca8235d42e2a..02fc0e2f30e85c040ef7d6912a863f45ed06724c 100644 --- a/sae/WEB-INF/vue/login.jsp +++ b/sae/WEB-INF/vue/login.jsp @@ -9,19 +9,19 @@ <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"> +<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"> + <!-- <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"> diff --git a/sae/WEB-INF/vue/parametre.jsp b/sae/WEB-INF/vue/parametre.jsp index e43432565f58da3adde91c7cea90fcb5af85ab1d..e1ee07c8ac69e9fcf84627ab28ff8e117ad4a058 100644 --- a/sae/WEB-INF/vue/parametre.jsp +++ b/sae/WEB-INF/vue/parametre.jsp @@ -17,8 +17,8 @@ <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"> +<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> diff --git a/sae/WEB-INF/vue/register.jsp b/sae/WEB-INF/vue/register.jsp index 5bbda6d4e1cb198a335d4cda22161db76eba0824..cb966f50dad29627a28e5e9f6932e09b2a165752 100644 --- a/sae/WEB-INF/vue/register.jsp +++ b/sae/WEB-INF/vue/register.jsp @@ -9,19 +9,19 @@ <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"> +<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"> + <!-- <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"> diff --git a/script.sql b/script.sql index 84686daaef244f62568e16583375f29d2190c064..f8cfeb3cce277168a30a686d17c1ca45d7226199 100644 --- a/script.sql +++ b/script.sql @@ -82,54 +82,46 @@ VALUES ('utilisateur3@exemple.com', 2), ('utilisateur3@exemple.com', 3); --- Lister tous les utilisateurs : - +-- -- Lister tous les utilisateurs : -- SELECT * FROM Utilisateur; --- Lister tous les fils de discussion avec le nom du créateur : - +-- -- Lister tous les fils de discussion avec le nom du créateur : -- 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 : - +-- -- Lister tous les messages d'un fil de discussion spécifique avec le nom de l'auteur : -- 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 : - +-- -- Lister tous les abonnements d'un utilisateur spécifique : -- 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é : - +-- -- Lister les fils de discussion auxquels un utilisateur n'est pas abonné : -- 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 : - +-- -- Compter le nombre de messages par fil de discussion : -- 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 : - +-- -- Trouver les utilisateurs qui ont publié des messages dans un fil spécifique : -- 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 : - +-- -- Lister les 5 derniers messages publiés dans un fil de discussion : -- SELECT m.contenu, u.nom AS nomAuteur, m.datePublication -- FROM Message m -- JOIN Utilisateur u ON m.auteurEmail = u.email @@ -137,16 +129,14 @@ VALUES -- ORDER BY m.datePublication DESC -- LIMIT 5; --- Compter le nombre d'abonnés par fil de discussion : - +-- -- Compter le nombre d'abonnés par fil de discussion : -- 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 : - +-- -- Lister les utilisateurs qui ne sont abonnés à aucun fil de discussion : -- SELECT u.email, u.nom -- FROM Utilisateur u -- LEFT JOIN Abonnement a ON u.email = a.utilisateurEmail --- WHERE a.utilisateurEmail IS NULL; \ No newline at end of file +-- WHERE a.utilisateurEmail IS NULL;