]> WPIA git - gigi.git/blob - src/club/wpia/gigi/pages/admin/support/SupportUserDetailsForm.java
aaa4a43ae990ce1cccc8aa7662669c497bd05123
[gigi.git] / src / club / wpia / gigi / pages / admin / support / SupportUserDetailsForm.java
1 package club.wpia.gigi.pages.admin.support;
2
3 import java.io.PrintWriter;
4 import java.util.Map;
5 import java.util.Set;
6
7 import javax.servlet.http.HttpServletRequest;
8
9 import club.wpia.gigi.Gigi;
10 import club.wpia.gigi.GigiApiException;
11 import club.wpia.gigi.dbObjects.Group;
12 import club.wpia.gigi.dbObjects.Name;
13 import club.wpia.gigi.dbObjects.SupportedUser;
14 import club.wpia.gigi.dbObjects.User;
15 import club.wpia.gigi.localisation.Language;
16 import club.wpia.gigi.output.ArrayIterable;
17 import club.wpia.gigi.output.DateSelector;
18 import club.wpia.gigi.output.GroupList;
19 import club.wpia.gigi.output.GroupSelector;
20 import club.wpia.gigi.output.template.Form;
21 import club.wpia.gigi.output.template.Template;
22 import club.wpia.gigi.output.template.TranslateCommand;
23 import club.wpia.gigi.pages.LoginPage;
24 import club.wpia.gigi.pages.account.MyDetails;
25 import club.wpia.gigi.util.AuthorizationContext;
26
27 public class SupportUserDetailsForm extends Form {
28
29     private static final Template t = new Template(FindUserByDomainForm.class.getResource("SupportUserDetailsForm.templ"));
30
31     private SupportedUser user;
32
33     private DateSelector dobSelector;
34
35     private GroupSelector value = new GroupSelector("groupToModify", true);
36
37     public SupportUserDetailsForm(HttpServletRequest hsr, SupportedUser user) {
38         super(hsr);
39         this.user = user;
40         dobSelector = new DateSelector("dobd", "dobm", "doby", user.getTargetUser().getDoB());
41     }
42
43     @Override
44     public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
45         if (user.getTicket() == null) {
46             throw new GigiApiException("No ticket number set.");
47         }
48
49         if ((req.getParameter("detailupdate") != null ? 1 : 0) + (req.getParameter("addGroup") != null ? 1 : 0) + (req.getParameter("removeGroup") != null ? 1 : 0) + (req.getParameter("resetPass") != null ? 1 : 0) != 1) {
50             throw new GigiApiException("More than one action requested!");
51         }
52
53         if (user.getTargetUser() == LoginPage.getUser(req)) {
54             if (req.getParameter("removeGroup") != null) {
55                 value.update(req);
56                 Group toMod = value.getGroup();
57                 if (toMod == Group.SUPPORTER) {
58                     user.revoke(toMod);
59                     AuthorizationContext ac = LoginPage.getAuthorizationContext(req);
60                     req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(ac.getActor(), ac.getActor()));
61                     return new RedirectResult(MyDetails.PATH);
62                 }
63             }
64             throw new GigiApiException("Supporter may not modify himself.");
65         }
66
67         if (req.getParameter("addGroup") != null || req.getParameter("removeGroup") != null) {
68             value.update(req);
69             Group toMod = value.getGroup();
70             if (req.getParameter("addGroup") != null) {
71                 user.grant(toMod);
72             } else {
73                 user.revoke(toMod);
74             }
75             return new RedirectResult(req.getPathInfo());
76         }
77         if (req.getParameter("resetPass") != null) {
78             String aword = req.getParameter("aword");
79             if (aword == null || aword.equals("")) {
80                 throw new GigiApiException("An A-Word is required to perform a password reset.");
81             }
82             user.triggerPasswordReset(aword, req);
83             return new SuccessMessageResult(new TranslateCommand("Password reset successful."));
84         }
85         dobSelector.update(req);
86         if ( !dobSelector.isValid()) {
87             throw new GigiApiException("Invalid date of birth!");
88         }
89         user.setDob(dobSelector.getDate());
90         return new RedirectResult(req.getPathInfo());
91     }
92
93     @Override
94     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
95         User user = this.user.getTargetUser();
96         vars.put("mail", user.getEmail());
97         vars.put("status", l.getTranslation(user.isValidEmail(user.getEmail()) ? "verified" : "not verified"));
98         vars.put("exNames", new ArrayIterable<Name>(user.getNames()) {
99
100             @Override
101             public void apply(Name t, Language l, Map<String, Object> vars) {
102                 vars.put("name", t);
103                 vars.put("preferred", t.getOwner().getPreferredName() == t);
104                 vars.put("points", Integer.toString(t.getVerificationPoints()));
105             }
106
107         });
108         vars.put("agent", user.canVerify());
109         vars.put("dob", dobSelector);
110         vars.put("verificationPoints", user.getVerificationPoints());
111         vars.put("exppoints", user.getExperiencePoints());
112         final Set<Group> gr = user.getGroups();
113         vars.put("support-groups", new GroupList(gr, true));
114         vars.put("groups", new GroupList(gr, false));
115         vars.put("groupSelector", value);
116         t.output(out, l, vars);
117     }
118
119 }