]> WPIA git - gigi.git/commitdiff
UPD: More advanced permission system for menu items to provide adaptive
authorJanis Streib <janis@dogcraft.de>
Sat, 23 Aug 2014 21:41:42 +0000 (23:41 +0200)
committerJanis Streib <janis@dogcraft.de>
Sat, 23 Aug 2014 21:44:09 +0000 (23:44 +0200)
menu visibility

src/org/cacert/gigi/output/IMenuItem.java
src/org/cacert/gigi/output/Menu.java
src/org/cacert/gigi/output/PageMenuItem.java
src/org/cacert/gigi/output/SimpleMenuItem.java

index 8abdc83241cbd36cb1251a8d05c54f5fb146b414..eeef0b04227e9857d215faca00d63126af624283 100644 (file)
@@ -1,10 +1,11 @@
 package org.cacert.gigi.output;
 
+import org.cacert.gigi.PermissionCheckable;
+
 /**
  * Markerinterface for an {@link Outputable} speicially used in a {@link Menu}.
  * 
  * @author janis
  */
-public interface IMenuItem extends Outputable {
-    // Nothing to see here.
+public interface IMenuItem extends Outputable, PermissionCheckable {
 }
index 9ad9ba9919e2edd133f77e894c25b3d99cdff735..b1fc745ad1ed7858bc7852ac035e1e375645ed7c 100644 (file)
@@ -4,6 +4,7 @@ import java.io.PrintWriter;
 import java.util.LinkedList;
 import java.util.Map;
 
+import org.cacert.gigi.User;
 import org.cacert.gigi.localisation.Language;
 
 public class Menu implements IMenuItem {
@@ -25,17 +26,26 @@ public class Menu implements IMenuItem {
 
     @Override
     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
-        out.println("<div>");
-        out.print("<h3>+ ");
-        out.print(l.getTranslation(menuName));
-        out.print("</h3>");
-        out.print("<ul class=\"menu\" id=\"");
-        out.print(id);
-        out.print("\">");
-        for (Outputable mi : content) {
-            mi.output(out, l, vars);
+        boolean visible = false;
+        User u = (User) vars.get(USER_VALUE);
+        for (IMenuItem mi : content) {
+            if (mi.isPermitted(u)) {
+                if ( !visible) {
+                    visible = true;
+                    out.println("<div>");
+                    out.print("<h3>+ ");
+                    out.print(l.getTranslation(menuName));
+                    out.print("</h3>");
+                    out.print("<ul class=\"menu\" id=\"");
+                    out.print(id);
+                    out.print("\">");
+                }
+                mi.output(out, l, vars);
+            }
+        }
+        if (visible) {
+            out.println("</ul></div>");
         }
-        out.println("</ul></div>");
     }
 
     public void addItem(IMenuItem item) {
@@ -59,4 +69,9 @@ public class Menu implements IMenuItem {
     public String getMenuName() {
         return menuName;
     }
+
+    @Override
+    public boolean isPermitted(User u) {
+        return true;
+    }
 }
index 846563fd3090064c818e3d875cd0f509365c2140..196540deef020c28941eaea1dcabc6fafeef9045 100644 (file)
@@ -1,11 +1,7 @@
 package org.cacert.gigi.output;
 
-import java.io.PrintWriter;
-import java.util.Map;
-
 import org.cacert.gigi.Gigi;
 import org.cacert.gigi.User;
-import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.pages.Page;
 import org.cacert.gigi.util.ServerConstants;
 
@@ -20,9 +16,7 @@ public class PageMenuItem extends SimpleMenuItem {
     }
 
     @Override
-    public void output(PrintWriter out, Language l, Map<String, Object> vars) {
-        if (p.isPermitted((User) vars.get(Menu.USER_VALUE))) {
-            super.output(out, l, vars);
-        }
+    public boolean isPermitted(User u) {
+        return p.isPermitted(u);
     }
 }
index 95b78c86fa521695cce969baf6b64f3f8f3f6bc7..4ac97c0578c60a594b443303d957aaddd64b9ae4 100644 (file)
@@ -3,6 +3,7 @@ package org.cacert.gigi.output;
 import java.io.PrintWriter;
 import java.util.Map;
 
+import org.cacert.gigi.User;
 import org.cacert.gigi.localisation.Language;
 
 public class SimpleMenuItem implements IMenuItem {
@@ -25,4 +26,9 @@ public class SimpleMenuItem implements IMenuItem {
         out.print("</a></li>");
     }
 
+    @Override
+    public boolean isPermitted(User u) {
+        return true;
+    }
+
 }