]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/pages/account/MyDetailsForm.java
add: management of groups by user
[gigi.git] / src / org / cacert / gigi / pages / account / MyDetailsForm.java
index 2d1f7ff3c9b80ece5271f3729b8c26503d19c18a..813902289e623f925e5b89c2d9dad7ef10123169 100644 (file)
@@ -2,15 +2,20 @@ package org.cacert.gigi.pages.account;
 
 import java.io.PrintWriter;
 import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
 import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.dbObjects.Group;
 import org.cacert.gigi.dbObjects.Name;
 import org.cacert.gigi.dbObjects.User;
 import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.output.ArrayIterable;
+import org.cacert.gigi.output.CountrySelector;
 import org.cacert.gigi.output.DateSelector;
+import org.cacert.gigi.output.GroupIterator;
+import org.cacert.gigi.output.GroupSelector;
 import org.cacert.gigi.output.NameInput;
 import org.cacert.gigi.output.template.Form;
 import org.cacert.gigi.output.template.Template;
@@ -24,18 +29,30 @@ public class MyDetailsForm extends Form {
 
     private static final Template names = new Template(MyDetailsForm.class.getResource("NamesForm.templ"));
 
+    private static final Template roles = new Template(MyDetailsForm.class.getResource("MyDetailsRoles.templ"));
+
     private User target;
 
     private DateSelector ds;
 
     private NameInput ni;
 
+    private CountrySelector cs;
+
+    private GroupSelector selectedGroup = new GroupSelector("groupToModify", false);
+
     public MyDetailsForm(HttpServletRequest hsr, User target) {
         super(hsr);
         this.target = target;
         ni = new NameInput();
 
         this.ds = new DateSelector("day", "month", "year", target.getDoB());
+
+        if (target.getResidenceCountry() == null) {
+            this.cs = new CountrySelector("residenceCountry", true);
+        } else {
+            this.cs = new CountrySelector("residenceCountry", true, target.getResidenceCountry());
+        }
     }
 
     @Override
@@ -82,6 +99,22 @@ public class MyDetailsForm extends Form {
                 ds.update(req);
                 target.setDoB(ds.getDate());
             }
+            if ("updateResidenceCountry".equals(action)) {
+                cs.update(req);
+                target.setResidenceCountry(cs.getCountry());
+            }
+
+            if ("addGroup".equals(action) || "removeGroup".equals(action)) {
+                selectedGroup.update(req);
+                Group toMod = selectedGroup.getGroup();
+                if ("addGroup".equals(action)) {
+                    target.grantGroup(target, toMod);
+                } else {
+                    target.revokeGroup(target, toMod);
+                }
+                return true;
+            }
+
         } catch (GigiApiException e) {
             e.format(out, Page.getLanguage(req));
             return false;
@@ -119,13 +152,21 @@ public class MyDetailsForm extends Form {
         });
         vars.put("name", ni);
         names.output(out, l, vars);
-        if (target.getAssurancePoints() == 0) {
+
+        vars.put("residenceCountry", cs);
+        if (target.getReceivedAssurances().length == 0) {
             vars.put("DoB", ds);
             templ.output(out, l, vars);
         } else {
             vars.put("DoB", target.getDoB());
             assured.output(out, l, vars);
         }
+
+        final Set<Group> gr = target.getGroups();
+        vars.put("support-groups", new GroupIterator(gr.iterator(), true));
+        vars.put("groups", new GroupIterator(gr.iterator(), false));
+        vars.put("groupSelector", selectedGroup);
+        roles.output(out, l, vars);
     }
 
 }