]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/account/MyDetailsForm.java
add: Allow multiple names, name-schemes, multi-name-assurance, etc.
[gigi.git] / src / org / cacert / gigi / pages / account / MyDetailsForm.java
1 package org.cacert.gigi.pages.account;
2
3 import java.io.PrintWriter;
4 import java.util.Map;
5
6 import javax.servlet.http.HttpServletRequest;
7
8 import org.cacert.gigi.GigiApiException;
9 import org.cacert.gigi.dbObjects.Name;
10 import org.cacert.gigi.dbObjects.User;
11 import org.cacert.gigi.localisation.Language;
12 import org.cacert.gigi.output.ArrayIterable;
13 import org.cacert.gigi.output.DateSelector;
14 import org.cacert.gigi.output.NameInput;
15 import org.cacert.gigi.output.template.Form;
16 import org.cacert.gigi.output.template.Template;
17 import org.cacert.gigi.pages.Page;
18
19 public class MyDetailsForm extends Form {
20
21     private static final Template assured = new Template(MyDetails.class.getResource("MyDetailsFormAssured.templ"));
22
23     private static final Template templ = new Template(MyDetailsForm.class.getResource("MyDetailsForm.templ"));
24
25     private static final Template names = new Template(MyDetailsForm.class.getResource("NamesForm.templ"));
26
27     private User target;
28
29     private DateSelector ds;
30
31     private NameInput ni;
32
33     public MyDetailsForm(HttpServletRequest hsr, User target) {
34         super(hsr);
35         this.target = target;
36         ni = new NameInput();
37
38         this.ds = new DateSelector("day", "month", "year", target.getDoB());
39     }
40
41     @Override
42     public boolean submit(PrintWriter out, HttpServletRequest req) {
43         try {
44             String rn = req.getParameter("removeName");
45             if (rn != null) {
46                 Name n = Name.getById(Integer.parseInt(rn));
47                 if (n.getOwner() != target) {
48                     throw new GigiApiException("Cannot remove a name that does not belong to this account.");
49                 }
50                 if (n.equals(target.getPreferredName())) {
51                     throw new GigiApiException("Cannot remove the account's preferred name.");
52                 }
53                 n.remove();
54                 return true;
55             }
56             String dn = req.getParameter("deprecateName");
57             if (dn != null) {
58                 Name n = Name.getById(Integer.parseInt(dn));
59                 if (n.getOwner() != target) {
60                     throw new GigiApiException("Cannot deprecate a name that does not belong to this account.");
61                 }
62                 if (n.equals(target.getPreferredName())) {
63                     throw new GigiApiException("Cannot deprecate the account's preferred name.");
64                 }
65                 n.deprecate();
66                 return true;
67             }
68             String pn = req.getParameter("preferred");
69             if (pn != null) {
70                 Name n = Name.getById(Integer.parseInt(pn));
71                 target.setPreferredName(n);
72                 return true;
73             }
74
75             String action = req.getParameter("action");
76             if ("addName".equals(action)) {
77                 ni.update(req);
78                 ni.createName(target);
79                 return true;
80             }
81             if ("updateDoB".equals(action)) {
82                 ds.update(req);
83                 target.setDoB(ds.getDate());
84             }
85         } catch (GigiApiException e) {
86             e.format(out, Page.getLanguage(req));
87             return false;
88         } catch (NumberFormatException e) {
89             new GigiApiException("Invalid value.").format(out, Page.getLanguage(req));
90             return false;
91         }
92         return false;
93     }
94
95     @Override
96     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
97         vars.put("exNames", new ArrayIterable<Name>(target.getNames()) {
98
99             Name preferred = target.getPreferredName();
100
101             @Override
102             public void apply(Name t, Language l, Map<String, Object> vars) {
103                 if (t.equals(preferred)) {
104                     vars.put("preferred", " disabled");
105                     vars.put("deprecated", " disabled");
106                 } else {
107                     if (t.isDeprecated()) {
108                         vars.put("deprecated", " disabled");
109                     } else {
110                         vars.put("deprecated", "");
111                     }
112                     vars.put("preferred", "");
113                 }
114                 vars.put("name", t);
115                 vars.put("id", t.getId());
116                 vars.put("npoints", Integer.toString(t.getAssurancePoints()));
117             }
118
119         });
120         vars.put("name", ni);
121         names.output(out, l, vars);
122         if (target.getAssurancePoints() == 0) {
123             vars.put("DoB", ds);
124             templ.output(out, l, vars);
125         } else {
126             vars.put("DoB", target.getDoB());
127             assured.output(out, l, vars);
128         }
129     }
130
131 }