View Javadoc

1   /*
2    * This software was designed and created by Jason Carroll.
3    * Copyright (c) 2002, 2003, 2004 Jason Carroll.
4    * The author can be reached at jcarroll@cowsultants.com
5    * ITracker website: http://www.cowsultants.com
6    * ITracker forums: http://www.cowsultants.com/phpBB/index.php
7    *
8    * This program is free software; you can redistribute it and/or modify
9    * it only under the terms of the GNU General Public License as published by
10   * the Free Software Foundation; either version 2 of the License, or
11   * (at your option) any later version.
12   *
13   * This program is distributed in the hope that it will be useful,
14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   * GNU General Public License for more details.
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  		//  TODO: Action Cleanup
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  //			if (languagesList.size() == 0) {
80  //				languagesList.put("en_US", ITrackerResources.getString(
81  //						"itracker.locale.name", "en_US"));
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  			// TODO: remove this hack, this should be handled central, there are other
94  			// instances of this hack
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 }