]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java
add: send notification to support and user after support actions
[gigi.git] / src / org / cacert / gigi / pages / admin / support / SupportUserDetailsForm.java
1 package org.cacert.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 org.cacert.gigi.GigiApiException;
10 import org.cacert.gigi.dbObjects.Group;
11 import org.cacert.gigi.dbObjects.Name;
12 import org.cacert.gigi.dbObjects.SupportedUser;
13 import org.cacert.gigi.dbObjects.User;
14 import org.cacert.gigi.localisation.Language;
15 import org.cacert.gigi.output.ArrayIterable;
16 import org.cacert.gigi.output.DateSelector;
17 import org.cacert.gigi.output.GroupIterator;
18 import org.cacert.gigi.output.GroupSelector;
19 import org.cacert.gigi.output.template.Form;
20 import org.cacert.gigi.output.template.Outputable;
21 import org.cacert.gigi.output.template.SprintfCommand;
22 import org.cacert.gigi.output.template.Template;
23 import org.cacert.gigi.output.template.TranslateCommand;
24 import org.cacert.gigi.pages.PasswordResetPage;
25
26 public class SupportUserDetailsForm extends Form {
27
28     private static final Template t = new Template(FindUserByDomainForm.class.getResource("SupportUserDetailsForm.templ"));
29
30     private SupportedUser user;
31
32     private DateSelector dobSelector;
33
34     private GroupSelector value = new GroupSelector("groupToModify", true);
35
36     public SupportUserDetailsForm(HttpServletRequest hsr, SupportedUser user) {
37         super(hsr);
38         this.user = user;
39         dobSelector = new DateSelector("dobd", "dobm", "doby", user.getTargetUser().getDoB());
40     }
41
42     @Override
43     public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
44         if (user.getTicket() == null) {
45             return false;
46         }
47         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) {
48             throw new GigiApiException("More than one action requested!");
49         }
50         if (req.getParameter("addGroup") != null || req.getParameter("removeGroup") != null) {
51             value.update(req);
52             Group toMod = value.getGroup();
53             boolean grant;
54             if (req.getParameter("addGroup") != null) {
55                 grant = true;
56                 user.grant(toMod);
57             } else {
58                 grant = false;
59                 user.revoke(toMod);
60             }
61             String subject = "Change Group Permissions";
62             // send notification to support
63             Outputable message = SprintfCommand.createSimple(grant ? "The group permission '{0}' was granted." : "The group permission '{0}' was revoked.", toMod.getName());
64             user.sendSupportNotification(subject, message);
65             // send notification to user
66             message = SprintfCommand.createSimple(grant ? "The group permission '{0}' was granted to your account." : "The group permission '{0}' was revoked from your account.", toMod.getName());
67             user.sendSupportUserNotification(subject, message);
68             return true;
69         }
70         if (req.getParameter("resetPass") != null) {
71             String aword = req.getParameter("aword");
72             if (aword == null || aword.equals("")) {
73                 throw new GigiApiException("An A-Word is required to perform a password reset.");
74             }
75             Language l = Language.getInstance(user.getTargetUser().getPreferredLocale());
76             String method = l.getTranslation("A password reset was triggered. Please enter the required text sent to you by support on this page:");
77             String subject = l.getTranslation("Password reset by support.");
78             PasswordResetPage.initPasswordResetProcess(out, user.getTargetUser(), req, aword, l, method, subject);
79             Outputable message = new TranslateCommand("A password reset was triggered and an email was sent to user.");
80             user.sendSupportNotification(subject, message);
81             return true;
82         }
83         dobSelector.update(req);
84         if ( !dobSelector.isValid()) {
85             throw new GigiApiException("Invalid date of birth!");
86         }
87         user.setDob(dobSelector.getDate());
88
89         String subject = "Change DoB Data";
90         // send notification to support
91         Outputable message = new TranslateCommand("The DoB was changed.");
92         user.sendSupportNotification(subject, message);
93         // send notification to user
94         message = SprintfCommand.createSimple("The DoB in your account was changed to {0}.", dobSelector.getDate());
95         user.sendSupportUserNotification(subject, message);
96         return true;
97     }
98
99     @Override
100     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
101         User user = this.user.getTargetUser();
102         vars.put("mail", user.getEmail());
103         vars.put("status", l.getTranslation(user.isValidEmail(user.getEmail()) ? "verified" : "not verified"));
104         vars.put("exNames", new ArrayIterable<Name>(user.getNames()) {
105
106             @Override
107             public void apply(Name t, Language l, Map<String, Object> vars) {
108                 vars.put("name", t);
109                 vars.put("points", Integer.toString(t.getAssurancePoints()));
110             }
111
112         });
113         vars.put("assurer", user.canAssure());
114         vars.put("dob", dobSelector);
115         vars.put("assurancepoints", user.getAssurancePoints());
116         vars.put("exppoints", user.getExperiencePoints());
117         final Set<Group> gr = user.getGroups();
118         vars.put("support-groups", new GroupIterator(gr.iterator(), true));
119         vars.put("groups", new GroupIterator(gr.iterator(), false));
120         vars.put("groupSelector", value);
121         t.output(out, l, vars);
122     }
123
124 }