]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/account/mail/MailManagementForm.java
fix: ResultSet.getDate is often wrong as it fetches day-precision times
[gigi.git] / src / org / cacert / gigi / pages / account / mail / MailManagementForm.java
1 package org.cacert.gigi.pages.account.mail;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.util.Map;
6
7 import javax.servlet.http.HttpServletRequest;
8
9 import org.cacert.gigi.GigiApiException;
10 import org.cacert.gigi.dbObjects.EmailAddress;
11 import org.cacert.gigi.dbObjects.User;
12 import org.cacert.gigi.localisation.Language;
13 import org.cacert.gigi.output.template.Form;
14 import org.cacert.gigi.output.template.IterableDataset;
15 import org.cacert.gigi.output.template.Template;
16 import org.cacert.gigi.pages.Page;
17 import org.cacert.gigi.util.TimeConditions;
18
19 public class MailManagementForm extends Form {
20
21     private static final Template t = new Template(MailAddForm.class.getResource("MailManagementForm.templ"));
22
23     private User target;
24
25     public MailManagementForm(HttpServletRequest hsr, User target) {
26         super(hsr);
27         this.target = target;
28     }
29
30     @Override
31     public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
32         try {
33             String d;
34             if ((d = req.getParameter("default")) != null) {
35                 target.updateDefaultEmail(EmailAddress.getById(Integer.parseInt(d)));
36             } else if ((d = req.getParameter("delete")) != null) {
37                 target.deleteEmail(EmailAddress.getById(Integer.parseInt(d)));
38             } else if ((d = req.getParameter("reping")) != null) {
39                 EmailAddress.getById(Integer.parseInt(d)).requestReping(Page.getLanguage(req));
40             }
41             return new RedirectResult(MailOverview.DEFAULT_PATH);
42         } catch (IOException e1) {
43             throw new GigiApiException("Error while doing reping.");
44         }
45     }
46
47     @Override
48     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
49         final EmailAddress[] emails = target.getEmails();
50         IterableDataset ds = new IterableDataset() {
51
52             private int point = 0;
53
54             @Override
55             public boolean next(Language l, Map<String, Object> vars) {
56                 if (point >= emails.length) {
57                     return false;
58                 }
59                 EmailAddress emailAddress = emails[point];
60                 int mailID = emailAddress.getId();
61                 vars.put("id", mailID);
62                 if (emailAddress.getAddress().equals(target.getEmail())) {
63                     vars.put("default", " disabled");
64                     vars.put("deletable", " disabled");
65                 } else {
66                     vars.put("deletable", "");
67                     vars.put("default", "");
68                 }
69                 if (emailAddress.isVerified()) {
70                     vars.put("verification", l.getTranslation("Verified"));
71                 } else {
72                     // only verified emails may become the default email
73                     // address.
74                     vars.put("default", " disabled");
75                     vars.put("verification", l.getTranslation("Unverified"));
76                 }
77                 vars.put("last_verification", emailAddress.getLastPing(true));
78                 if (target.getEmail().equals(emailAddress.getAddress())) {
79                     vars.put("delete", "N/A");
80                 } else {
81                     vars.put("delete", "<input type=\"checkbox\" name=\"delid[]\" value=\"" + mailID + "\"/>");
82                 }
83                 vars.put("address", emailAddress.getAddress());
84                 point++;
85                 return true;
86             }
87
88         };
89         vars.put("emails", ds);
90         vars.put("maxMonth", TimeConditions.getInstance().getEmailPingMonths());
91         t.output(out, l, vars);
92     }
93 }