1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.itracker.web.actions.preferences;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Locale;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.servlet.ServletException;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30 import javax.servlet.http.HttpSession;
31
32 import org.apache.log4j.Logger;
33 import org.apache.struts.action.ActionForm;
34 import org.apache.struts.action.ActionForward;
35 import org.apache.struts.action.ActionMapping;
36 import org.apache.struts.action.ActionMessage;
37 import org.apache.struts.action.ActionMessages;
38 import org.itracker.core.resources.ITrackerResources;
39 import org.itracker.model.User;
40 import org.itracker.model.UserPreferences;
41 import org.itracker.services.ConfigurationService;
42 import org.itracker.services.UserService;
43 import org.itracker.services.util.UserUtilities;
44 import org.itracker.web.actions.base.ItrackerBaseAction;
45 import org.itracker.web.forms.UserForm;
46 import org.itracker.web.util.Constants;
47 import org.itracker.web.util.LoginUtilities;
48
49 public class EditPreferencesFormAction extends ItrackerBaseAction {
50 private static final Logger log = Logger
51 .getLogger(EditPreferencesFormAction.class);
52
53 public EditPreferencesFormAction() {
54 }
55
56 public ActionForward execute(ActionMapping mapping, ActionForm form,
57 HttpServletRequest request, HttpServletResponse response)
58 throws ServletException, IOException {
59 ActionMessages errors = new ActionMessages();
60
61
62 try {
63 UserService userService = getITrackerServices().getUserService();
64 request.setAttribute("uh", userService);
65 ConfigurationService configurationService = getITrackerServices()
66 .getConfigurationService();
67 request.setAttribute("sc", configurationService);
68 Map<String, List<String>> languagesMap = configurationService
69 .getAvailableLanguages();
70 request.setAttribute("languagesMap", languagesMap);
71 Set<String> languageCodes = languagesMap.keySet();
72 request.setAttribute("languageCodes", languageCodes);
73
74 Map<String, String> languagesList = ITrackerResources.getLocaleNamesMap(
75 LoginUtilities.getCurrentLocale(request),
76 languageCodes,
77 languagesMap);
78
79
80
81
82
83 request.setAttribute("languagesList", languagesList);
84 Integer languagesListSize = languagesList.size();
85 request.setAttribute("languagesListSize", languagesListSize);
86 HttpSession session = request.getSession();
87 User user = (User) session.getAttribute(Constants.USER_KEY);
88 if (user == null) {
89 return mapping.findForward("login");
90 }
91
92 UserPreferences userPrefs = user.getPreferences();
93
94
95 if (userPrefs == null) {
96 userPrefs = new UserPreferences();
97 user.setPreferences(userPrefs);
98 userPrefs.setUser(user);
99 }
100
101 UserForm userForm = (UserForm) form;
102 if (userForm == null) {
103 userForm = new UserForm();
104 }
105 userForm.setLogin(user.getLogin());
106 userForm.setEmail(user.getEmail());
107 userForm.setFirstName(user.getFirstName());
108 userForm.setLastName(user.getLastName());
109
110 Locale userLocale = ITrackerResources.getLocale(userPrefs
111 .getUserLocale());
112 userForm.setUserLocale((userLocale == null ? ITrackerResources
113 .getDefaultLocale() : userLocale.toString()));
114 userForm
115 .setSaveLogin((userPrefs.getSaveLogin() ? "true" : "false"));
116 userForm
117 .setNumItemsOnIndex((userPrefs.getNumItemsOnIndex() < 1 ? ITrackerResources
118 .getString("itracker.web.generic.all", userLocale)
119 : Integer.toString(userPrefs.getNumItemsOnIndex())));
120 userForm
121 .setNumItemsOnIssueList((userPrefs.getNumItemsOnIssueList() < 1 ? ITrackerResources
122 .getString("itracker.web.generic.all", userLocale)
123 : Integer.toString(userPrefs
124 .getNumItemsOnIssueList())));
125 userForm.setShowClosedOnIssueList((userPrefs
126 .getShowClosedOnIssueList() ? "true" : "false"));
127 userForm.setSortColumnOnIssueList(userPrefs
128 .getSortColumnOnIssueList());
129 userForm
130 .setHiddenIndexSections(UserUtilities
131 .getHiddenIndexSections(userPrefs
132 .getHiddenIndexSections()));
133 userForm
134 .setRememberLastSearch((userPrefs.getRememberLastSearch() ? "true"
135 : "false"));
136 userForm.setUseTextActions((userPrefs.getUseTextActions() ? "true"
137 : "false"));
138
139 Locale locale = getLocale(request);
140 String statusName = UserUtilities.getStatusName(user.getStatus(),
141 locale);
142 request.setAttribute("statusName", statusName);
143 String userLocaleAsString = ITrackerResources.getString(
144 "itracker.locale.name", userPrefs.getUserLocale());
145 request.setAttribute("userLocaleAsString", userLocaleAsString);
146 String getSaveLoginLocalized = ITrackerResources.getString(
147 (userPrefs.getSaveLogin() ? "itracker.web.generic.yes"
148 : "itracker.web.generic.no"), locale);
149 request
150 .setAttribute("getSaveLoginLocalized",
151 getSaveLoginLocalized);
152 String showClosedOnIssueListLocalized = ITrackerResources
153 .getString(
154 (userPrefs.getShowClosedOnIssueList() ? "itracker.web.generic.yes"
155 : "itracker.web.generic.no"), locale);
156 request.setAttribute("showClosedOnIssueListLocalized",
157 showClosedOnIssueListLocalized);
158 String getRememberLastSearchLocalized = ITrackerResources
159 .getString(
160 (userPrefs.getRememberLastSearch() ? "itracker.web.generic.yes"
161 : "itracker.web.generic.no"), locale);
162 request.setAttribute("getRememberLastSearchLocalized",
163 getRememberLastSearchLocalized);
164 request.setAttribute("preferencesForm", userForm);
165 session.setAttribute(Constants.EDIT_USER_KEY, user);
166 session.setAttribute(Constants.EDIT_USER_PREFS_KEY, userPrefs);
167 saveToken(request);
168
169 Boolean allowPreferenceUpdate = false;
170 Boolean allowProfileUpdate = false;
171 Boolean allowPasswordUpdate = false;
172
173 if (user != null) {
174 allowProfileUpdate = userService.allowProfileUpdates(
175 user, null, UserUtilities.AUTH_TYPE_UNKNOWN,
176 UserUtilities.REQ_SOURCE_WEB);
177 allowPasswordUpdate = userService.allowPasswordUpdates(
178 user, null, UserUtilities.AUTH_TYPE_UNKNOWN,
179 UserUtilities.REQ_SOURCE_WEB);
180
181 allowPreferenceUpdate = userService
182 .allowPreferenceUpdates(user, null,
183 UserUtilities.AUTH_TYPE_UNKNOWN,
184 UserUtilities.REQ_SOURCE_WEB);
185
186 }
187
188 request.setAttribute("allowProfileUpdate", allowProfileUpdate);
189 request.setAttribute("allowPasswordUpdate", allowPasswordUpdate);
190 request.setAttribute("allowPreferenceUpdate", allowPreferenceUpdate);
191
192 if (!allowPreferenceUpdate) {
193 StringBuilder hiddenSectionsString = new StringBuilder();
194 userPrefs = (UserPreferences) session
195 .getAttribute("edituserprefs");
196 Integer[] hiddenSections = UserUtilities
197 .getHiddenIndexSections(userPrefs.getHiddenIndexSections());
198 for (int i = 0; i < hiddenSections.length; i++) {
199 int sectionNumber = (hiddenSections[i] != null ? hiddenSections[i]
200 .intValue()
201 : -1);
202 if (sectionNumber == UserUtilities.PREF_HIDE_ASSIGNED) {
203 hiddenSectionsString.append((hiddenSectionsString.length() == 0 ? ""
204 : ", "));
205 hiddenSectionsString.append(", ").append(ITrackerResources.getString(
206 "itracker.web.editprefs.section.assigned",
207 locale));
208 } else if (sectionNumber == UserUtilities.PREF_HIDE_UNASSIGNED) {
209 hiddenSectionsString.append((hiddenSectionsString.length() == 0 ? ""
210 : ", "));
211 hiddenSectionsString.append(", ").append(
212 ITrackerResources
213 .getString(
214 "itracker.web.editprefs.section.unassigned",
215 locale));
216 } else if (sectionNumber == UserUtilities.PREF_HIDE_CREATED) {
217 hiddenSectionsString.append((hiddenSectionsString.length() == 0 ? ""
218 : ", "));
219 hiddenSectionsString.append(", ").append(
220 ITrackerResources.getString(
221 "itracker.web.editprefs.section.created",
222 locale));
223 } else if (sectionNumber == UserUtilities.PREF_HIDE_WATCHED) {
224 hiddenSectionsString.append((hiddenSectionsString.length() == 0 ? ""
225 : ", "));
226 hiddenSectionsString.append(", ").append(
227 ITrackerResources.getString(
228 "itracker.web.editprefs.section.watched",
229 locale));
230 }
231
232 }
233 request.setAttribute("hiddenSectionsString", hiddenSectionsString.toString());
234 }
235
236 request
237 .setAttribute("pageTitleKey",
238 "itracker.web.editprefs.title");
239 request.setAttribute("pageTitleArg", "");
240
241 request.setAttribute("PREF_HIDE_ASSIGNED", UserUtilities.PREF_HIDE_ASSIGNED);
242 request.setAttribute("PREF_HIDE_UNASSIGNED", UserUtilities.PREF_HIDE_UNASSIGNED);
243 request.setAttribute("PREF_HIDE_CREATED", UserUtilities.PREF_HIDE_CREATED);
244 request.setAttribute("PREF_HIDE_WATCHED", UserUtilities.PREF_HIDE_WATCHED);
245
246 return mapping.findForward("editpreferencesform");
247
248 } catch (Exception e) {
249 log.error("Exception while creating edit issue form.", e);
250 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
251 "itracker.web.error.system"));
252 }
253
254 return mapping.findForward("error");
255 }
256
257 }