Mercurial Hosting > nabble
view src/nabble/view/web/catalog/ChangePinOrder.jtp @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 18cf4872fd7f |
children |
line wrap: on
line source
<% package nabble.view.web.catalog; import fschmidt.util.servlet.AuthorizingServlet; import nabble.model.Node; import nabble.model.NodeIterator; import nabble.model.User; import nabble.model.Site; import nabble.view.lib.Jtp; import nabble.view.lib.Shared; import nabble.view.lib.help.Help; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; public class ChangePinOrder extends HttpServlet implements AuthorizingServlet { public String getAuthorizationKey(HttpServletRequest request) throws ServletException { return Jtp.getReadAuthorizationKey( Jtp.getSiteNotNull(request).getNode(Jtp.getLong(request,"forum")) ); } public boolean authorize(String key,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { return Jtp.authorizeForRead(key,request,response); } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); String context = request.getContextPath(); Site site = Jtp.getSiteNotNull(request); Node forum = site.getNode(Jtp.getLong(request,"forum")); if (forum == null) { response.sendError(HttpServletResponse.SC_GONE, "This app has been deleted."); return; } String what = request.getParameter("what"); boolean pinnedThreads = "threads".equals(what); String title = pinnedThreads? "Pinned Threads" : "Manage " + Jtp.childName(forum, true); User visitor = Jtp.getUser(request); if (!Jtp.canBeEditedBy(forum,visitor)) { Jtp.login("Only administrators can proceed in this area.", request, response); return; } List<Node> others = new ArrayList<Node>(); List<Node> pinned = new ArrayList<Node>(); NodeIterator<? extends Node> children = forum.getChildren(); for (Node node : children) { if( !node.isPinned() ) break; if (node.getKind()==Node.Kind.POST && pinnedThreads) pinned.add(node); else if (node.getKind()==Node.Kind.APP && !pinnedThreads) pinned.add(node); else others.add(node); } children.close(); String action = request.getParameter("action"); boolean up = "up".equals(action); boolean down = "down".equals(action); if (up || down) { long id = Long.parseLong(request.getParameter("id")); Node node = site.getNode(id); if (pinned.contains(node)) { int index = pinned.indexOf(node); pinned.remove(node); index = up? index-1 : index+1; if (index < 0) index = 0; else if (index > pinned.size()) index = pinned.size(); pinned.add(index, node); List<Node> all = new ArrayList<Node>(); // Ensure that forums come first if (pinnedThreads) { all.addAll(others); all.addAll(pinned); } else { all.addAll(pinned); all.addAll(others); } forum.pin(all.toArray(new Node[0])); Jtp.sendRedirect(request,response,"/catalog/ChangePinOrder.jtp?forum=" + forum.getId() + "&what=" + what); return; } } %> <html> <head> <% Shared.title(request, response, "Manage " + title); %> </head> <body> <% Shared.minHeader(request,response, forum); %> <% Shared.editHeader(forum.getSubjectHtml(), title, out); %> <style> table.pin { width: 40em; border-collapse:collapse; } table.pin td { padding: .4em; } .title-row { margin-top:2em; padding:.2em; border-bottom-width:2px; border-bottom-style:solid; font-weight:bold; } </style> <div class="title-row light-border-color"> <%=pinnedThreads? "Pinned Topics" : "Pinned " + Jtp.childName(forum, true)%> </div> <% if (!pinnedThreads) { %> <div class="weak-color" style="margin:0 0 .3em .2em">Pinned <%=Jtp.childName(forum, true).toLowerCase()%> are created or approved by a forum owner to always appear under a forum.</div> <% } %> <div style="padding-left:2em"> <% if (pinned.size() > 1) { %> <table id="table-pin" class="pin"> <% for (int i = 0; i < pinned.size(); i++) { Node node = pinned.get(i); boolean isFirst = i == 0; boolean isLast = i == pinned.size() - 1; %> <tr> <td style="width:24px"><img src="/images/<%=pinnedThreads? "pin.png" : "forum_pin.png"%>"></td> <td style="padding-left: .4em;width:100%"><a href="<%=Jtp.path(node)%>"><%=node.getSubjectHtml()%></a></td> <td style="width:24px"> <a class="up" style="<%=isFirst? "display:none" : ""%>" href="/catalog/ChangePinOrder.jtp?forum=<%=forum.getId()%>&what=<%=what%>&action=up&id=<%=node.getId()%>"><img src="<%=context%>/images/icon_up.png" style="border:none;margin:5px" title="Move up"/></a> </td> <td style="width:24px"> <a class="down" style="<%=isLast? "display:none" : ""%>" href="/catalog/ChangePinOrder.jtp?forum=<%=forum.getId()%>&what=<%=what%>&action=down&id=<%=node.getId()%>"><img src="<%=context%>/images/icon_down.png" style="border:none;margin:5px" title="Move down"/></a> </td> <td style="width:5em"><a href="/catalog/SetPin.jtp?node=<%=node.getId()%>&value=unpin">Unpin</a></td> </tr> <% } %> </table> <% } else if (pinned.size() == 1) { Node node = pinned.get(0); %> <table class="pin"> <tr> <td style="width:24px"><img src="/images/<%=pinnedThreads? "pin.png" : "forum_pin.png"%>"></td> <td><a href="<%=Jtp.path(node)%>"><%=node.getSubjectHtml()%></a></td> <td style="width:5em"><a href="/catalog/SetPin.jtp?node=<%=node.getId()%>&value=unpin">Unpin</a></td> </tr> </table> <% } else { %> <div style="margin-top:1em"> No <%=pinnedThreads? "pinned topics" : "pinned " + Jtp.childName(forum, true).toLowerCase()%>. </div> <% } %> </div> <% if (!pinnedThreads) { // Search for unpinned child forums List<Node> childForums = forum.getChildApps().get(0, 1000); List<Node> unpinned = new ArrayList<Node>(); for (Node child : childForums) { if (!child.isPinned()) unpinned.add(child); } if (!unpinned.isEmpty()) { %> <div class="title-row light-border-color">Unpinned Sub-forums</div> <div class="weak-color" style="margin:0 0 .3em .2em">Unpinned sub-forums are user-created categories which float under a forum like a thread.</div> <div style="padding-left:2em"> <table class="pin"> <% for (Node node : unpinned) { %> <tr> <td style="width:30px"><img src="/images/forum.png"></td> <td style="width:100%"><a href="<%=Jtp.path(node)%>"><%=node.getSubjectHtml()%></a></td> <td style="width:24px"><img src="/images/unpin.png"/></td> <td style="width:5em"><a href="/catalog/SetPin.jtp?node=<%=node.getId()%>&value=pin">Pin</a></td> </tr> <% } %> </table> </div> <% } } %> <div class="light-bg-color" style="padding: .5em;margin:1.5em 0 0"> <div class="second-font field-title" style="margin-top:0">Related Help Article</div> <%=Help.pinned_subapps.link()%> </div> <% Shared.footer(request, response); %> <% Shared.analytics(request,response); %> </body> </html> <% } } %>