diff --git a/compilation.md b/compilation.md index d8793aa08373aa217d970999e69be7adc10f7687..ed1bf26d20b435da9ae80c9eed39cd9ea782f165 100644 --- a/compilation.md +++ b/compilation.md @@ -1 +1 @@ -javac -d WEB-INF/classes -cp ../../lib/servlet-api.jar:../../lib/commons-lang3-3.17.0.jar:../../lib/commons-text-1.13.0.jar WEB-INF/src/controleur/*.java WEB-INF/src/modele/*.java \ No newline at end of file +javac -d WEB-INF/classes -cp ../../lib/servlet-api.jar:../../lib/commons-lang3-3.17.0.jar:../../lib/commons-text-1.13.0.jar:../../lib/jackson-datatype-jsr310-2.13.0.jar:../../lib/jackson-annotations-2.15.3.jar:../../lib/jackson-core-2.15.3.jar:../../lib/jackson-databind-2.15.3.jar:../../lib/jackson-dataformat-xml-2.15.3.jar WEB-INF/src/controleur/*.java WEB-INF/src/modele/*.java diff --git a/lib/annotations-api.jar b/lib/annotations-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..e303329a574d38d763cecc462489ca01abfa1ad6 Binary files /dev/null and b/lib/annotations-api.jar differ diff --git a/lib/catalina-ant.jar b/lib/catalina-ant.jar new file mode 100644 index 0000000000000000000000000000000000000000..76d7756c2db2c6099b9f662a0582fa5a71700f46 Binary files /dev/null and b/lib/catalina-ant.jar differ diff --git a/lib/catalina-ha.jar b/lib/catalina-ha.jar new file mode 100644 index 0000000000000000000000000000000000000000..20b638a5c1599b24e2ec1274ab3e2b21a439ab2d Binary files /dev/null and b/lib/catalina-ha.jar differ diff --git a/lib/catalina-ssi.jar b/lib/catalina-ssi.jar new file mode 100644 index 0000000000000000000000000000000000000000..083ba8154b4b08958820e914ad7e76d201b33a2c Binary files /dev/null and b/lib/catalina-ssi.jar differ diff --git a/lib/catalina-storeconfig.jar b/lib/catalina-storeconfig.jar new file mode 100644 index 0000000000000000000000000000000000000000..36551095a40f2996a2ed03dd1a18d38f5ea03f82 Binary files /dev/null and b/lib/catalina-storeconfig.jar differ diff --git a/lib/catalina-tribes.jar b/lib/catalina-tribes.jar new file mode 100644 index 0000000000000000000000000000000000000000..6a3c5011ccf906b6c72db584a6827022292d2cee Binary files /dev/null and b/lib/catalina-tribes.jar differ diff --git a/lib/catalina.jar b/lib/catalina.jar new file mode 100644 index 0000000000000000000000000000000000000000..d3dfc66537b1c2d1b6560871097ff38a6e834514 Binary files /dev/null and b/lib/catalina.jar differ diff --git a/lib/commons-lang3-3.17.0.jar b/lib/commons-lang3-3.17.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6486b4d7039f22ccf160c8d24ebac26f05bf0de Binary files /dev/null and b/lib/commons-lang3-3.17.0.jar differ diff --git a/lib/commons-text-1.13.0.jar b/lib/commons-text-1.13.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..a8231464949d5e7fb71a14e044767ad1bfa4c27d Binary files /dev/null and b/lib/commons-text-1.13.0.jar differ diff --git a/lib/ecj-4.27.jar b/lib/ecj-4.27.jar new file mode 100644 index 0000000000000000000000000000000000000000..a8f827f350d0e9a47af6ef8e262af3dcc7e0c5f6 Binary files /dev/null and b/lib/ecj-4.27.jar differ diff --git a/lib/el-api.jar b/lib/el-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..915158f3e459724c4c0f63e409e98d17fb4252dd Binary files /dev/null and b/lib/el-api.jar differ diff --git a/lib/jackson-annotations-2.15.3.jar b/lib/jackson-annotations-2.15.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..83a6e4ddaacd47fa06e8e464d9c7af645b53ff23 Binary files /dev/null and b/lib/jackson-annotations-2.15.3.jar differ diff --git a/lib/jackson-core-2.15.3.jar b/lib/jackson-core-2.15.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..f0c53d16aa074ab1bc97346eb7d3502ac0ecc03f Binary files /dev/null and b/lib/jackson-core-2.15.3.jar differ diff --git a/lib/jackson-databind-2.15.3.jar b/lib/jackson-databind-2.15.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..b1a891a3a152ad0323b5fcbcbfa046aa8bd36d9a Binary files /dev/null and b/lib/jackson-databind-2.15.3.jar differ diff --git a/lib/jackson-dataformat-xml-2.15.3.jar b/lib/jackson-dataformat-xml-2.15.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..3335c21c73474ddb82564518b25c06120046985a Binary files /dev/null and b/lib/jackson-dataformat-xml-2.15.3.jar differ diff --git a/lib/jackson-datatype-jsr310-2.13.0.jar b/lib/jackson-datatype-jsr310-2.13.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..aabe23dc082d45f8f47890e6a07001690f806437 Binary files /dev/null and b/lib/jackson-datatype-jsr310-2.13.0.jar differ diff --git a/lib/jakartaee-migration-1.0.9-shaded.jar b/lib/jakartaee-migration-1.0.9-shaded.jar new file mode 100644 index 0000000000000000000000000000000000000000..83d8075c971bf35a73ae2aea9ebc07bddf97e9de Binary files /dev/null and b/lib/jakartaee-migration-1.0.9-shaded.jar differ diff --git a/lib/jasper-el.jar b/lib/jasper-el.jar new file mode 100644 index 0000000000000000000000000000000000000000..1f7d2759f92dc0867207385948859422ecc0876f Binary files /dev/null and b/lib/jasper-el.jar differ diff --git a/lib/jasper.jar b/lib/jasper.jar new file mode 100644 index 0000000000000000000000000000000000000000..16eb31f8fa5f700800288f8e77be01758667a177 Binary files /dev/null and b/lib/jasper.jar differ diff --git a/lib/jaspic-api.jar b/lib/jaspic-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..3c8d7ea22624fba0fd12a3f703f6c1a0467faac1 Binary files /dev/null and b/lib/jaspic-api.jar differ diff --git a/lib/jsp-api.jar b/lib/jsp-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..b2e108d3f650b5adede5001fd07fce1cf0bd7c7f Binary files /dev/null and b/lib/jsp-api.jar differ diff --git a/lib/postgresql-42.7.5.jar b/lib/postgresql-42.7.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..279942c19c49e7c3f28b07a0c11f99eef7041818 Binary files /dev/null and b/lib/postgresql-42.7.5.jar differ diff --git a/lib/servlet-api.jar b/lib/servlet-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..90bb1bccbde89683d431df1c62e4be54e7b49277 Binary files /dev/null and b/lib/servlet-api.jar differ diff --git a/lib/tomcat-api.jar b/lib/tomcat-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..900a9db0a869ec77a18787568ccc0aa4ac314dc6 Binary files /dev/null and b/lib/tomcat-api.jar differ diff --git a/lib/tomcat-coyote-ffm.jar b/lib/tomcat-coyote-ffm.jar new file mode 100644 index 0000000000000000000000000000000000000000..f28dc1bf8972488600c39374b061ccecf661c7d4 Binary files /dev/null and b/lib/tomcat-coyote-ffm.jar differ diff --git a/lib/tomcat-coyote.jar b/lib/tomcat-coyote.jar new file mode 100644 index 0000000000000000000000000000000000000000..94094952696e7ab5a36e56011d5cf6f40eaaae07 Binary files /dev/null and b/lib/tomcat-coyote.jar differ diff --git a/lib/tomcat-dbcp.jar b/lib/tomcat-dbcp.jar new file mode 100644 index 0000000000000000000000000000000000000000..dc4dbb5aa6616e2a25797c1c4793b148c2fdea4f Binary files /dev/null and b/lib/tomcat-dbcp.jar differ diff --git a/lib/tomcat-i18n-cs.jar b/lib/tomcat-i18n-cs.jar new file mode 100644 index 0000000000000000000000000000000000000000..a0d7a181588e58307a4810626052e3b0ff26bc56 Binary files /dev/null and b/lib/tomcat-i18n-cs.jar differ diff --git a/lib/tomcat-i18n-de.jar b/lib/tomcat-i18n-de.jar new file mode 100644 index 0000000000000000000000000000000000000000..3ef9a694e86272dfe92b9a89014e989849305bb0 Binary files /dev/null and b/lib/tomcat-i18n-de.jar differ diff --git a/lib/tomcat-i18n-es.jar b/lib/tomcat-i18n-es.jar new file mode 100644 index 0000000000000000000000000000000000000000..55306da32a46ce1a7724b96b5f17ae4d81cb0f24 Binary files /dev/null and b/lib/tomcat-i18n-es.jar differ diff --git a/lib/tomcat-i18n-fr.jar b/lib/tomcat-i18n-fr.jar new file mode 100644 index 0000000000000000000000000000000000000000..e7993ec98632fe97410a98377fca6a75a5c2e24a Binary files /dev/null and b/lib/tomcat-i18n-fr.jar differ diff --git a/lib/tomcat-i18n-ja.jar b/lib/tomcat-i18n-ja.jar new file mode 100644 index 0000000000000000000000000000000000000000..94f5d1cc1b3f2903320081dee7aa5d23760bf5a2 Binary files /dev/null and b/lib/tomcat-i18n-ja.jar differ diff --git a/lib/tomcat-i18n-ko.jar b/lib/tomcat-i18n-ko.jar new file mode 100644 index 0000000000000000000000000000000000000000..75eb86e5fa88e9c785b502500bf34d0aa2cc6aac Binary files /dev/null and b/lib/tomcat-i18n-ko.jar differ diff --git a/lib/tomcat-i18n-pt-BR.jar b/lib/tomcat-i18n-pt-BR.jar new file mode 100644 index 0000000000000000000000000000000000000000..43dea11ba943851f494c11ad147676882031d046 Binary files /dev/null and b/lib/tomcat-i18n-pt-BR.jar differ diff --git a/lib/tomcat-i18n-ru.jar b/lib/tomcat-i18n-ru.jar new file mode 100644 index 0000000000000000000000000000000000000000..f9fe5c3625baec5556574bca31cfe2fcf62f9239 Binary files /dev/null and b/lib/tomcat-i18n-ru.jar differ diff --git a/lib/tomcat-i18n-zh-CN.jar b/lib/tomcat-i18n-zh-CN.jar new file mode 100644 index 0000000000000000000000000000000000000000..f20b2c50d9a55ef5dddfc5445f9d2fd864a6f715 Binary files /dev/null and b/lib/tomcat-i18n-zh-CN.jar differ diff --git a/lib/tomcat-jdbc.jar b/lib/tomcat-jdbc.jar new file mode 100644 index 0000000000000000000000000000000000000000..e22934191bd86c4b82c44205d962cea0d1d66c21 Binary files /dev/null and b/lib/tomcat-jdbc.jar differ diff --git a/lib/tomcat-jni.jar b/lib/tomcat-jni.jar new file mode 100644 index 0000000000000000000000000000000000000000..a2a35318a27c182250bfb51207b9aabe7a4fa2af Binary files /dev/null and b/lib/tomcat-jni.jar differ diff --git a/lib/tomcat-util-scan.jar b/lib/tomcat-util-scan.jar new file mode 100644 index 0000000000000000000000000000000000000000..f28d0c310a3b314d55b16db62cbd004e8af6a825 Binary files /dev/null and b/lib/tomcat-util-scan.jar differ diff --git a/lib/tomcat-util.jar b/lib/tomcat-util.jar new file mode 100644 index 0000000000000000000000000000000000000000..ffcdea230cf5053cb0e90e1f4f22342d1d66f3e9 Binary files /dev/null and b/lib/tomcat-util.jar differ diff --git a/lib/tomcat-websocket.jar b/lib/tomcat-websocket.jar new file mode 100644 index 0000000000000000000000000000000000000000..1371b33afdc2650919350b6a0bdf3f3154690522 Binary files /dev/null and b/lib/tomcat-websocket.jar differ diff --git a/lib/websocket-api.jar b/lib/websocket-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..449147bee9a737aefce1aae6b67f1b672ff8ddef Binary files /dev/null and b/lib/websocket-api.jar differ diff --git a/lib/websocket-client-api.jar b/lib/websocket-client-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..22f38e825b487736759bfeb8a09667bb21995c64 Binary files /dev/null and b/lib/websocket-client-api.jar differ diff --git a/sae/WEB-INF/src/controleur/CreerFil.java b/sae/WEB-INF/src/controleur/CreerFil.java index 7f252aa690ff9e6427ed149d0469c00b61d2d9ad..f0cadc3bff5f3de3b8613def91096fdd6dd6215e 100644 --- a/sae/WEB-INF/src/controleur/CreerFil.java +++ b/sae/WEB-INF/src/controleur/CreerFil.java @@ -30,6 +30,7 @@ public class CreerFil extends HttpServlet { FilDeDiscussionDAO f = new FilDeDiscussionDAO(); String nom = StringEscapeUtils.escapeHtml4(req.getParameter("nom")); String createuremail = StringEscapeUtils.escapeHtml4(req.getParameter("createuremail")); + String description = StringEscapeUtils.escapeHtml4(req.getParameter("description")); UtilisateurDao udao = new UtilisateurDao(); if (!udao.emailExists(createuremail)) { req.setAttribute("error", "L'email n'existe pas."); @@ -40,7 +41,8 @@ public class CreerFil extends HttpServlet { -1, nom, LocalDateTime.now(), - createuremail + createuremail, + description )); res.sendRedirect(req.getContextPath() + "/listerFil"); } diff --git a/sae/WEB-INF/src/controleur/EnvoyerMessage.java b/sae/WEB-INF/src/controleur/EnvoyerMessage.java index 2fcaea9936d1ae2c8b720da8f193fc417f57c31b..583205744d808e8a419a2f4f2752b7c7ed77025f 100644 --- a/sae/WEB-INF/src/controleur/EnvoyerMessage.java +++ b/sae/WEB-INF/src/controleur/EnvoyerMessage.java @@ -1,17 +1,23 @@ package controleur; +import jakarta.servlet.annotation.MultipartConfig; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; import modele.Message; import modele.MessageDao; import jakarta.servlet.ServletException; +import java.io.File; import java.io.IOException; import java.time.LocalDateTime; @WebServlet("/envoyerMessage") +@MultipartConfig public class EnvoyerMessage extends HttpServlet { + private static final String UPLOAD_DIR = "uploads"; + public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) { res.sendRedirect(req.getContextPath() + "/login"); @@ -31,9 +37,33 @@ public class EnvoyerMessage extends HttpServlet { if (message == null || message.isEmpty()) { return; } - Message m = new Message(-1, message, LocalDateTime.now(), filId, email); - modele.MessageDao messageDao = new MessageDao(); + + // Handle file upload + Part filePart = req.getPart("file"); + String fileName = null; + if (filePart != null && filePart.getSize() > 0) { + fileName = getFileName(filePart); + String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIR; + File uploadDir = new File(uploadPath); + if (!uploadDir.exists()) { + uploadDir.mkdir(); + } + filePart.write(uploadPath + File.separator + fileName); + } + + Message m = new Message(-1, message, LocalDateTime.now(), filId, email, fileName); + MessageDao messageDao = new MessageDao(); messageDao.create(m); res.sendRedirect(req.getContextPath() + "/fil?id=" + filId); } -} + + private String getFileName(Part part) { + String contentDisposition = part.getHeader("content-disposition"); + for (String cd : contentDisposition.split(";")) { + if (cd.trim().startsWith("filename")) { + return cd.substring(cd.indexOf('=') + 1).trim().replace("\"", ""); + } + } + return null; + } +} \ 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 87ad95b57b99c688d4f050d6871de85ab4545d65..d7376b1e928b424939b07460b4d0ecb04e914334 100644 --- a/sae/WEB-INF/src/controleur/GetFils.java +++ b/sae/WEB-INF/src/controleur/GetFils.java @@ -8,7 +8,7 @@ import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; // Importation du module +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; @@ -24,7 +24,8 @@ import modele.MessageDao; @WebServlet("/getFils") public class GetFils extends HttpServlet { - public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) { res.sendRedirect(req.getContextPath() + "/login"); return; @@ -35,26 +36,31 @@ public class GetFils extends HttpServlet { FilDeDiscussionDAO filDao = new FilDeDiscussionDAO(); MessageDao messageDao = new MessageDao(); - List<Abonnement> abonnements = abonnementDao.findAbonnements(email); - List<FilDeDiscussion> fils = new ArrayList<>(); - Map<Integer, List<Message>> messagesMap = new HashMap<>(); + try { + List<Abonnement> abonnements = abonnementDao.findAbonnements(email); + List<FilDeDiscussion> fils = new ArrayList<>(); + Map<Integer, List<Message>> messagesMap = new HashMap<>(); - for (Abonnement abonnement : abonnements) { - FilDeDiscussion fil = filDao.findById(abonnement.getIdFil()); - fils.add(fil); - List<Message> messages = messageDao.findByFil(fil.getId()); - messagesMap.put(fil.getId(), messages); - } + for (Abonnement abonnement : abonnements) { + FilDeDiscussion fil = filDao.findById(abonnement.getIdFil()); + fils.add(fil); + List<Message> messages = messageDao.findByFil(fil.getId()); + messagesMap.put(fil.getId(), messages); + } - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); // Enregistrement du module - objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - Map<String, Object> jsonResponse = new HashMap<>(); - jsonResponse.put("fils", fils); - jsonResponse.put("messages", messagesMap); + Map<String, Object> jsonResponse = new HashMap<>(); + jsonResponse.put("fils", fils); + jsonResponse.put("messages", messagesMap); - res.setContentType("application/json"); - res.getWriter().write(objectMapper.writeValueAsString(jsonResponse)); + res.setContentType("application/json"); + res.getWriter().write(objectMapper.writeValueAsString(jsonResponse)); + } catch (Exception e) { + res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + res.getWriter().write("{\"error\":\"Une erreur est survenue lors de la récupération des données.\"}"); + } } } \ No newline at end of file diff --git a/sae/WEB-INF/src/modele/FilDeDiscussion.java b/sae/WEB-INF/src/modele/FilDeDiscussion.java index 8b2cbb2fd4733397dca759d68a2bab36de08ed57..92c5c3e8b13677975ff8cbf4b37c1a2f85784b9f 100644 --- a/sae/WEB-INF/src/modele/FilDeDiscussion.java +++ b/sae/WEB-INF/src/modele/FilDeDiscussion.java @@ -7,15 +7,17 @@ public class FilDeDiscussion { private String nom; private LocalDateTime dateCreation; private String createurEmail; + private String description; public FilDeDiscussion() { } - public FilDeDiscussion(int id, String nom, LocalDateTime dateCreation, String createurEmail) { + public FilDeDiscussion(int id, String nom, LocalDateTime dateCreation, String createurEmail, String description) { this.id = id; this.nom = nom; this.dateCreation = dateCreation; this.createurEmail = createurEmail; + this.description = description; } public int getId() { @@ -49,4 +51,12 @@ public class FilDeDiscussion { public void setCreateurEmail(String createurEmail) { this.createurEmail = createurEmail; } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } } diff --git a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java index 1fdd43bb9a18bb46c22cbd0f421d14226eb13926..4ae597e13c557fc4e6112c13a4363f2b00153440 100644 --- a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java +++ b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java @@ -19,6 +19,7 @@ public class FilDeDiscussionDAO { f.setNom(rs.getString("nom")); f.setDateCreation(rs.getTimestamp("datecreation").toLocalDateTime()); f.setCreateurEmail(rs.getString("createuremail")); + f.setDescription(rs.getString("description")); } else { System.out.println("Fil de discussion inexistant"); } @@ -30,9 +31,10 @@ public class FilDeDiscussionDAO { public void create(FilDeDiscussion filDeDiscussion) { try (Connection con = DS.instance.getConnection()) { - PreparedStatement pstmt = con.prepareStatement("INSERT INTO filDeDiscussion (nom, createuremail) VALUES (?, ?)"); + PreparedStatement pstmt = con.prepareStatement("INSERT INTO filDeDiscussion (nom, createuremail, description) VALUES (?, ?, ?)"); pstmt.setString(1, filDeDiscussion.getNom()); pstmt.setString(2, filDeDiscussion.getCreateurEmail()); + pstmt.setString(3, filDeDiscussion.getDescription()); pstmt.executeUpdate(); } catch (Exception e) { System.err.println(e.getMessage()); @@ -50,6 +52,7 @@ public class FilDeDiscussionDAO { f.setNom(rs.getString("nom")); f.setDateCreation(rs.getTimestamp("datecreation").toLocalDateTime()); f.setCreateurEmail(rs.getString("createuremail")); + f.setDescription(rs.getString("description")); filsDeDiscussion.add(f); } } catch (Exception e) { diff --git a/sae/WEB-INF/src/modele/Message.java b/sae/WEB-INF/src/modele/Message.java index 371ef61b042f7aad4e024a6e45d0e183555304f9..f046418cb3b21f768fae07681774cebbc5b0154d 100644 --- a/sae/WEB-INF/src/modele/Message.java +++ b/sae/WEB-INF/src/modele/Message.java @@ -1,7 +1,5 @@ package modele; -import java.sql.Connection; -import java.sql.PreparedStatement; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; @@ -13,21 +11,18 @@ public class Message { private LocalDateTime datePublication; private int filId; private String auteurEmail; - private String imageUrl; - private int like; - private int unlike; - - // Constructeurs, getters et setters + private String fileName; public Message() { } - public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail) { + public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail, String fileName) { this.id = id; this.contenu = contenu; this.datePublication = datePublication; this.filId = filId; this.auteurEmail = auteurEmail; + this.fileName = fileName; } public int getId() { @@ -70,41 +65,16 @@ public class Message { this.auteurEmail = auteurEmail; } - @Override - public String toString() { - return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId=" + filId + ", auteurEmail=" + auteurEmail + '}'; - } - - public String getImageUrl() { - return imageUrl; - } - - public int getLike() { - return like; + public String getFileName() { + return fileName; } - public void setLike(int like) { - this.like = like; + public void setFileName(String fileName) { + this.fileName = fileName; } - public int getUnlike() { - return unlike; - } - - public void setUnlike(int unlike) { - this.unlike = unlike; - } - - // filepath: /Users/othemanek./Desktop/tomcat/webapps/sae/WEB-INF/src/modele/MessageDao.java - public void create(Message message) { - try (Connection con = DS.instance.getConnection()) { - PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail, imageUrl) VALUES (?, ?, ?)"); - ps.setString(1, message.getContenu()); - ps.setInt(2, message.getfilId()); - ps.setString(3, message.getAuteurEmail()); - ps.executeUpdate(); - } catch (Exception e) { - System.out.println(e.getMessage()); - } + @Override + public String toString() { + return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId=" + filId + ", auteurEmail=" + auteurEmail + '}'; } } diff --git a/sae/WEB-INF/src/modele/MessageDao.java b/sae/WEB-INF/src/modele/MessageDao.java index 4ae3ecbd967411e16ba04996b3c60afe80659c7b..0687ea35a169c515a13790b2a13e294558bf86c3 100644 --- a/sae/WEB-INF/src/modele/MessageDao.java +++ b/sae/WEB-INF/src/modele/MessageDao.java @@ -20,6 +20,7 @@ public class MessageDao { message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime()); message.setFilId(rs.getInt("filId")); message.setAuteurEmail(rs.getString("auteurEmail")); + message.setFileName(rs.getString("fileName")); } else { System.out.println("Message inexistant"); } @@ -41,6 +42,7 @@ public class MessageDao { message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime()); message.setFilId(rs.getInt("filId")); message.setAuteurEmail(rs.getString("auteurEmail")); + message.setFileName(rs.getString("fileName")); messages.add(message); } } catch (Exception e) { @@ -62,6 +64,7 @@ public class MessageDao { message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime()); message.setFilId(rs.getInt("filId")); message.setAuteurEmail(rs.getString("auteurEmail")); + message.setFileName(rs.getString("fileName")); messages.add(message); } } catch (Exception e) { @@ -99,10 +102,11 @@ public class MessageDao { public void create(Message message) { try(Connection con = DS.instance.getConnection()) { - PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail) VALUES (?, ?, ?)"); + PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail, fileName) VALUES (?, ?, ?, ?)"); ps.setString(1, message.getContenu()); ps.setInt(2, message.getfilId()); ps.setString(3, message.getAuteurEmail()); + ps.setString(4, message.getFileName()); ps.executeUpdate(); } catch (Exception e) { System.out.println(e.getMessage()); diff --git a/sae/WEB-INF/vue/creerFil.jsp b/sae/WEB-INF/vue/creerFil.jsp index b7f303fb9d13c7a7edd00a4dcf1d84d656c701d3..253ef0df296d1ed48c617725b9d65c73dc588151 100644 --- a/sae/WEB-INF/vue/creerFil.jsp +++ b/sae/WEB-INF/vue/creerFil.jsp @@ -67,6 +67,9 @@ <label for="createuremail">Email du créateur:</label> <input type="email" class="form-control" id="createuremail" name="createuremail" required> </div> + <div class="form-group"> + <label for="description">Description:</label> + <textarea class="form-control" id="description" name="description" rows="3" required></textarea> <button type="submit" class="btn btn-primary btn-block">Créer</button> </form> </div> diff --git a/sae/WEB-INF/vue/fil.jsp b/sae/WEB-INF/vue/fil.jsp index d19505d3b29dc34241b13628b7f46a6d394a21e9..aeb1d6a17e4c75432f0eb7dbc1f65a52f4b5115b 100644 --- a/sae/WEB-INF/vue/fil.jsp +++ b/sae/WEB-INF/vue/fil.jsp @@ -139,25 +139,32 @@ LocalDateTime datePublication = m.getDatePublication(); String formattedDate = (datePublication != null) ? datePublication.format(formatter) : "Date non disponible"; %> - <div class="message-item"> - <div class="avatar"> - <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar"> - </div> - <div class="message-content"> - <h4><%= mdao.findUserName(m.getAuteurEmail()) %></h4> - <p class="message-date"><%= formattedDate %></p> - <p><%= m.getContenu() %></p> - </div> + <div class="message-item"> + <div class="avatar"> + <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar"> </div> + <div class="message-content"> + <h4><%= mdao.findUserName(m.getAuteurEmail()) %></h4> + <p class="message-date"><%= formattedDate %></p> + <p><%= m.getContenu() %></p> + <% if (m.getFileName() != null) { %> + <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" class="img-fluid mt-2"> + <% } %> + </div> + </div> <% } %> </div> <div class="message-form"> - <form action="envoyerMessage" method="post"> + <form action="envoyerMessage" method="post" enctype="multipart/form-data"> <div class="form-group"> <label for="contenu">Votre message :</label> <textarea class="form-control" id="contenu" name="contenu" rows="3" required></textarea> </div> + <div class="form-group"> + <label for="file">Ajouter une image :</label> + <input type="file" class="form-control-file" id="file" name="file"> + </div> <input type="hidden" name="filId" value="<%= id %>"> <button type="submit" class="btn btn-primary">Envoyer</button> </form> diff --git a/sae/WEB-INF/vue/listerFil.jsp b/sae/WEB-INF/vue/listerFil.jsp index 12a35482bee0b34e7d3589ce1a31f1a57ce51621..f36b805e9305282ae1dcdad3b7873edae5fe90b4 100644 --- a/sae/WEB-INF/vue/listerFil.jsp +++ b/sae/WEB-INF/vue/listerFil.jsp @@ -85,7 +85,9 @@ <p class="thread-name mb-0"><%= f.getNom() %></p> <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" class="btn btn-primary btn-sm">Suivre</a> </h4> - <!-- potentiellement mettre une description --> + <% if (f.getDescription() != null) { %> + <p class="thread-description"><%= f.getDescription() %></p> + <% } %> </div> <% } diff --git a/script.sql b/script.sql index 96061b59cd0d7a7723157205daf86724119f294d..fe167bc1442c5a52e57dd82286514c38dab706ae 100644 --- a/script.sql +++ b/script.sql @@ -16,6 +16,7 @@ CREATE TABLE FilDeDiscussion ( nom VARCHAR(100) NOT NULL, dateCreation TIMESTAMP DEFAULT CURRENT_TIMESTAMP, createurEmail VARCHAR(100), + description TEXT, CONSTRAINT pk_fil PRIMARY KEY (id), CONSTRAINT fk_createur FOREIGN KEY (createurEmail) REFERENCES Utilisateur(email) ON DELETE SET NULL @@ -27,6 +28,7 @@ CREATE TABLE Message ( datePublication TIMESTAMP DEFAULT CURRENT_TIMESTAMP, filId INTEGER, auteurEmail VARCHAR(100), + fileName VARCHAR(255), CONSTRAINT pk_message PRIMARY KEY (id), CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id) ON DELETE CASCADE,