1 package club.wpia.gigi.pages.admin.support;
3 import java.io.PrintWriter;
7 import javax.servlet.http.HttpServletRequest;
9 import club.wpia.gigi.Gigi;
10 import club.wpia.gigi.GigiApiException;
11 import club.wpia.gigi.dbObjects.Contract;
12 import club.wpia.gigi.dbObjects.Group;
13 import club.wpia.gigi.dbObjects.Name;
14 import club.wpia.gigi.dbObjects.SupportedUser;
15 import club.wpia.gigi.dbObjects.User;
16 import club.wpia.gigi.localisation.Language;
17 import club.wpia.gigi.output.ArrayIterable;
18 import club.wpia.gigi.output.DateSelector;
19 import club.wpia.gigi.output.GroupList;
20 import club.wpia.gigi.output.GroupSelector;
21 import club.wpia.gigi.output.template.Form;
22 import club.wpia.gigi.output.template.Template;
23 import club.wpia.gigi.output.template.TranslateCommand;
24 import club.wpia.gigi.pages.LoginPage;
25 import club.wpia.gigi.pages.account.MyDetails;
26 import club.wpia.gigi.util.AuthorizationContext;
28 public class SupportUserDetailsForm extends Form {
30 private static final Template t = new Template(FindUserByDomainForm.class.getResource("SupportUserDetailsForm.templ"));
32 private SupportedUser user;
34 private DateSelector dobSelector;
36 private GroupSelector value = new GroupSelector("groupToModify", true);
38 public SupportUserDetailsForm(HttpServletRequest hsr, SupportedUser user) {
41 dobSelector = new DateSelector("dobd", "dobm", "doby", user.getTargetUser().getDoB());
45 public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
46 if (user.getTicket() == null) {
47 throw new GigiApiException("No ticket number set.");
51 numActions += req.getParameter("detailupdate") != null ? 1 : 0;
52 numActions += req.getParameter("addGroup") != null ? 1 : 0;
53 numActions += req.getParameter("removeGroup") != null ? 1 : 0;
54 numActions += req.getParameter("resetPass") != null ? 1 : 0;
56 if (numActions != 1) {
57 throw new GigiApiException("More than one action requested!");
60 if (user.getTargetUser() == LoginPage.getUser(req)) {
61 if (req.getParameter("removeGroup") != null) {
63 Group toMod = value.getGroup();
64 if (toMod == Group.SUPPORTER) {
66 AuthorizationContext ac = LoginPage.getAuthorizationContext(req);
67 req.getSession().setAttribute(Gigi.AUTH_CONTEXT, new AuthorizationContext(ac.getActor(), ac.getActor(), ac.isStronglyAuthenticated()));
68 return new RedirectResult(MyDetails.PATH);
71 throw new GigiApiException("Supporter may not modify himself.");
74 if (req.getParameter("addGroup") != null || req.getParameter("removeGroup") != null) {
76 Group toMod = value.getGroup();
77 if (req.getParameter("addGroup") != null) {
82 return new RedirectResult(req.getPathInfo());
84 if (req.getParameter("resetPass") != null) {
85 String aword = req.getParameter("aword");
86 if (aword == null || aword.equals("")) {
87 throw new GigiApiException("An A-Word is required to perform a password reset.");
89 user.triggerPasswordReset(aword, req);
90 return new SuccessMessageResult(new TranslateCommand("Password reset successful."));
92 dobSelector.update(req);
93 if ( !dobSelector.isValid()) {
94 throw new GigiApiException("Invalid date of birth!");
96 user.setDob(dobSelector.getDate());
97 return new RedirectResult(req.getPathInfo());
101 protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
102 User user = this.user.getTargetUser();
103 vars.put("mail", user.getEmail());
104 vars.put("status", l.getTranslation(user.isValidEmail(user.getEmail()) ? "verified" : "not verified"));
105 vars.put("exNames", new ArrayIterable<Name>(user.getNames()) {
108 public void apply(Name t, Language l, Map<String, Object> vars) {
110 vars.put("preferred", t.getOwner().getPreferredName() == t);
111 vars.put("points", Integer.toString(t.getVerificationPoints()));
115 vars.put("agent", user.canVerify());
116 vars.put("agentcontract", Contract.hasSignedContract(user, Contract.ContractType.RA_AGENT_CONTRACT));
117 vars.put("dob", dobSelector);
118 vars.put("verificationPoints", user.getVerificationPoints());
119 vars.put("exppoints", user.getExperiencePoints());
120 final Set<Group> gr = user.getGroups();
121 vars.put("support-groups", new GroupList(gr, true));
122 vars.put("groups", new GroupList(gr, false));
123 vars.put("groupSelector", value);
124 t.output(out, l, vars);