X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Faccount%2FMyDetailsForm.java;h=f5b6f514fc6c3c9eca77816f5ab00a8b1d1eeefe;hp=2d1f7ff3c9b80ece5271f3729b8c26503d19c18a;hb=abff88a2bf173198fe55c35ead97c9c7cdb5924c;hpb=9def69bd08ea69eb27786d5b34f00e154e09e9f3 diff --git a/src/org/cacert/gigi/pages/account/MyDetailsForm.java b/src/org/cacert/gigi/pages/account/MyDetailsForm.java index 2d1f7ff3..f5b6f514 100644 --- a/src/org/cacert/gigi/pages/account/MyDetailsForm.java +++ b/src/org/cacert/gigi/pages/account/MyDetailsForm.java @@ -2,19 +2,23 @@ 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; -import org.cacert.gigi.pages.Page; public class MyDetailsForm extends Form { @@ -24,22 +28,34 @@ 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 - public boolean submit(PrintWriter out, HttpServletRequest req) { + public SubmissionResult submit(HttpServletRequest req) throws GigiApiException { try { String rn = req.getParameter("removeName"); if (rn != null) { @@ -51,7 +67,7 @@ public class MyDetailsForm extends Form { throw new GigiApiException("Cannot remove the account's preferred name."); } n.remove(); - return true; + return new RedirectResult(MyDetails.PATH); } String dn = req.getParameter("deprecateName"); if (dn != null) { @@ -63,33 +79,44 @@ public class MyDetailsForm extends Form { throw new GigiApiException("Cannot deprecate the account's preferred name."); } n.deprecate(); - return true; + return new RedirectResult(MyDetails.PATH); } String pn = req.getParameter("preferred"); if (pn != null) { Name n = Name.getById(Integer.parseInt(pn)); target.setPreferredName(n); - return true; + return new RedirectResult(MyDetails.PATH); } String action = req.getParameter("action"); if ("addName".equals(action)) { ni.update(req); ni.createName(target); - return true; - } - if ("updateDoB".equals(action)) { + return new RedirectResult(MyDetails.PATH); + } else if ("updateDoB".equals(action)) { ds.update(req); target.setDoB(ds.getDate()); + return new RedirectResult(MyDetails.PATH); + } else if ("updateResidenceCountry".equals(action)) { + cs.update(req); + target.setResidenceCountry(cs.getCountry()); + return new RedirectResult(MyDetails.PATH); + } else 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 new RedirectResult(MyDetails.PATH); + } else { + throw new GigiApiException("Invalid action."); } - } catch (GigiApiException e) { - e.format(out, Page.getLanguage(req)); - return false; + } catch (NumberFormatException e) { - new GigiApiException("Invalid value.").format(out, Page.getLanguage(req)); - return false; + throw new GigiApiException("Invalid value."); } - return false; } @Override @@ -119,13 +146,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 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); } }