Hierarchie des pages

This commit is contained in:
Lensors 2025-04-28 19:14:45 +02:00
parent 01d08ab44a
commit da3140f007
4 changed files with 70 additions and 5 deletions

View File

@ -10,12 +10,12 @@ import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
@WebServlet("/AfficherPage")
public class AfficherPage extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Utilisateur u = (Utilisateur) session.getAttribute("utilisateur");
@ -40,9 +40,12 @@ public class AfficherPage extends HttpServlet {
int id = Integer.parseInt(idStr);
Page page = Page.getPageById(u.getId(), id);
if (page != null) {
request.setAttribute("page", page);
Map<Integer, String> hierarchie = u.getHierarchie(id);
request.setAttribute("hierarchie", hierarchie);
request.getRequestDispatcher("/WEB-INF/AfficherPage.jsp").forward(request, response);
return;
} else {

View File

@ -9,7 +9,9 @@ import java.sql.Statement;
import java.time.LocalDate;
import java.sql.Date;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import projet.Bloc.Type;
@ -274,6 +276,8 @@ public class Page extends ParamBD {
pst.setInt(4, idU);
pst.executeUpdate();
pst.close();
connexion.close();
} catch (SQLException e) {
e.printStackTrace();
}

View File

@ -8,6 +8,10 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import projet.Page.Droit;
@ -245,4 +249,53 @@ public class Utilisateur extends ParamBD {
}
return listeUtilisateur;
}
public Map<Integer, String> getHierarchie(int idPage) {
Map<Integer, String> hierarchie = new LinkedHashMap<>();
getHierarchieRecurcive(idPage, hierarchie);
hierarchie.remove(idPage);
// Inverser le contenu du Map pour commencer par la page enfant
Map<Integer, String> inverseHierarchie = new LinkedHashMap<>();
List<Map.Entry<Integer, String>> entries = new ArrayList<>(hierarchie.entrySet());
Collections.reverse(entries);
for (Map.Entry<Integer, String> entry : entries) {
inverseHierarchie.put(entry.getKey(), entry.getValue());
}
return inverseHierarchie;
}
private void getHierarchieRecurcive(int idPage, Map<Integer, String> hierarchie) {
try {
Connection connexion = DriverManager.getConnection(bdURL, bdLogin, bdPassword);
String sql = "SELECT titre, page_parent_id"
+ " FROM page"
+ " WHERE id = "
+ idPage
+ " AND auteur_id = "
+ id
+ ";";
Statement st = connexion.createStatement();
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
String titre = rs.getString("titre");
hierarchie.put(idPage, titre);
int parentId = rs.getInt("page_parent_id");
if (parentId != 0) {
getHierarchieRecurcive(parentId, hierarchie);
}
}
rs.close();
st.close();
connexion.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

View File

@ -19,7 +19,12 @@
<c:choose>
<c:when test="${not empty page.titre}">
<div class="is-flex is-justify-content-space-between is-align-items-center mb-4">
<h2 class="block">${page.titre}</h2>
<h2 class="block">
<c:forEach var="entry" items="${hierarchie}">
<a href="AfficherPage?id=${entry.key}">${entry.value}</a> >
</c:forEach>
${page.titre}
</h2>
<div class="dropdown is-right">
<div class="dropdown-trigger">
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu3">