1
22
23 package com.liferay.portlet.enterpriseadmin.action;
24
25 import com.liferay.portal.ContactFirstNameException;
26 import com.liferay.portal.ContactLastNameException;
27 import com.liferay.portal.DuplicateUserEmailAddressException;
28 import com.liferay.portal.DuplicateUserScreenNameException;
29 import com.liferay.portal.NoSuchUserException;
30 import com.liferay.portal.RequiredUserException;
31 import com.liferay.portal.ReservedUserEmailAddressException;
32 import com.liferay.portal.ReservedUserScreenNameException;
33 import com.liferay.portal.UserEmailAddressException;
34 import com.liferay.portal.UserIdException;
35 import com.liferay.portal.UserPasswordException;
36 import com.liferay.portal.UserScreenNameException;
37 import com.liferay.portal.UserSmsException;
38 import com.liferay.portal.kernel.servlet.SessionErrors;
39 import com.liferay.portal.kernel.util.Constants;
40 import com.liferay.portal.kernel.util.HttpUtil;
41 import com.liferay.portal.kernel.util.ParamUtil;
42 import com.liferay.portal.kernel.util.StringPool;
43 import com.liferay.portal.kernel.util.StringUtil;
44 import com.liferay.portal.kernel.util.Validator;
45 import com.liferay.portal.model.Group;
46 import com.liferay.portal.model.Layout;
47 import com.liferay.portal.model.User;
48 import com.liferay.portal.security.auth.PrincipalException;
49 import com.liferay.portal.service.UserServiceUtil;
50 import com.liferay.portal.struts.PortletAction;
51 import com.liferay.portal.theme.ThemeDisplay;
52 import com.liferay.portal.util.PortalUtil;
53 import com.liferay.portal.util.WebKeys;
54 import com.liferay.portlet.InvokerPortlet;
55 import com.liferay.portlet.admin.util.AdminUtil;
56 import com.liferay.portlet.announcements.model.impl.AnnouncementsEntryImpl;
57 import com.liferay.portlet.announcements.service.AnnouncementsDeliveryServiceUtil;
58
59 import javax.portlet.ActionRequest;
60 import javax.portlet.ActionResponse;
61 import javax.portlet.PortletConfig;
62 import javax.portlet.PortletSession;
63 import javax.portlet.RenderRequest;
64 import javax.portlet.RenderResponse;
65
66 import javax.servlet.http.HttpServletRequest;
67 import javax.servlet.http.HttpSession;
68
69 import org.apache.struts.Globals;
70 import org.apache.struts.action.ActionForm;
71 import org.apache.struts.action.ActionForward;
72 import org.apache.struts.action.ActionMapping;
73
74
80 public class EditUserAction extends PortletAction {
81
82 public void processAction(
83 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
84 ActionRequest actionRequest, ActionResponse actionResponse)
85 throws Exception {
86
87 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
88
89 try {
90 User user = null;
91 String oldScreenName = StringPool.BLANK;
92
93 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
94 Object[] returnValue = updateUser(actionRequest);
95
96 user = (User)returnValue[0];
97 oldScreenName = ((String)returnValue[1]);
98 }
99 else if (cmd.equals(Constants.DEACTIVATE) ||
100 cmd.equals(Constants.DELETE) ||
101 cmd.equals(Constants.RESTORE)) {
102
103 deleteUsers(actionRequest);
104 }
105 else if (cmd.equals("deleteRole")) {
106 deleteRole(actionRequest);
107 }
108 else if (cmd.equals("unlock")) {
109 user = updateLockout(actionRequest);
110 }
111
112 String redirect = ParamUtil.getString(actionRequest, "redirect");
113
114 if (user != null) {
115 if (Validator.isNotNull(oldScreenName)) {
116
117
122 ThemeDisplay themeDisplay =
123 (ThemeDisplay)actionRequest.getAttribute(
124 WebKeys.THEME_DISPLAY);
125
126 Group group = user.getGroup();
127
128 if (group.getGroupId() ==
129 themeDisplay.getPortletGroupId()) {
130
131 Layout layout = themeDisplay.getLayout();
132
133 String friendlyURLPath = group.getPathFriendlyURL(
134 layout.isPrivateLayout(), themeDisplay);
135
136 String oldPath =
137 friendlyURLPath + StringPool.SLASH + oldScreenName;
138 String newPath =
139 friendlyURLPath + StringPool.SLASH +
140 user.getScreenName();
141
142 redirect = StringUtil.replace(
143 redirect, oldPath, newPath);
144
145 redirect = StringUtil.replace(
146 redirect, HttpUtil.encodeURL(oldPath),
147 HttpUtil.encodeURL(newPath));
148 }
149 }
150
151 redirect += user.getUserId();
152 }
153
154 sendRedirect(actionRequest, actionResponse, redirect);
155 }
156 catch (Exception e) {
157 if (e instanceof NoSuchUserException ||
158 e instanceof PrincipalException) {
159
160 SessionErrors.add(actionRequest, e.getClass().getName());
161
162 setForward(actionRequest, "portlet.enterprise_admin.error");
163 }
164 else if (e instanceof ContactFirstNameException ||
165 e instanceof ContactLastNameException ||
166 e instanceof DuplicateUserEmailAddressException ||
167 e instanceof DuplicateUserScreenNameException ||
168 e instanceof RequiredUserException ||
169 e instanceof ReservedUserEmailAddressException ||
170 e instanceof ReservedUserScreenNameException ||
171 e instanceof UserEmailAddressException ||
172 e instanceof UserIdException ||
173 e instanceof UserPasswordException ||
174 e instanceof UserScreenNameException ||
175 e instanceof UserSmsException) {
176
177 SessionErrors.add(actionRequest, e.getClass().getName(), e);
178
179 if (e instanceof RequiredUserException) {
180 actionResponse.sendRedirect(
181 ParamUtil.getString(actionRequest, "redirect"));
182 }
183 }
184 else {
185 throw e;
186 }
187 }
188 }
189
190 public ActionForward render(
191 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
192 RenderRequest renderRequest, RenderResponse renderResponse)
193 throws Exception {
194
195 try {
196 PortalUtil.getSelectedUser(renderRequest);
197 }
198 catch (Exception e) {
199 if (e instanceof PrincipalException) {
200 SessionErrors.add(renderRequest, e.getClass().getName());
201
202 return mapping.findForward("portlet.enterprise_admin.error");
203 }
204 else {
205 throw e;
206 }
207 }
208
209 return mapping.findForward(
210 getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
211 }
212
213 protected void deleteRole(ActionRequest actionRequest) throws Exception {
214 User user = PortalUtil.getSelectedUser(actionRequest);
215
216 long roleId = ParamUtil.getLong(actionRequest, "roleId");
217
218 UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
219 }
220
221 protected void deleteUsers(ActionRequest actionRequest) throws Exception {
222 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
223
224 long[] deleteUserIds = StringUtil.split(
225 ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
226
227 for (int i = 0; i < deleteUserIds.length; i++) {
228 if (cmd.equals(Constants.DEACTIVATE) ||
229 cmd.equals(Constants.RESTORE)) {
230
231 boolean active = !cmd.equals(Constants.DEACTIVATE);
232
233 UserServiceUtil.updateActive(deleteUserIds[i], active);
234 }
235 else {
236 UserServiceUtil.deleteUser(deleteUserIds[i]);
237 }
238 }
239 }
240
241 protected User updateLockout(ActionRequest actionRequest) throws Exception {
242 User user = PortalUtil.getSelectedUser(actionRequest);
243
244 UserServiceUtil.updateLockout(user.getUserId(), false);
245
246 return user;
247 }
248
249 protected Object[] updateUser(ActionRequest actionRequest)
250 throws Exception {
251
252 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
253
254 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
255 WebKeys.THEME_DISPLAY);
256
257 boolean autoPassword = ParamUtil.getBoolean(
258 actionRequest, "autoPassword", true);
259 String password1 = ParamUtil.getString(actionRequest, "password1");
260 String password2 = ParamUtil.getString(actionRequest, "password2");
261 boolean autoScreenName = ParamUtil.getBoolean(
262 actionRequest, "autoScreenName");
263 String screenName = ParamUtil.getString(actionRequest, "screenName");
264 String emailAddress = ParamUtil.getString(
265 actionRequest, "emailAddress");
266 String languageId = ParamUtil.getString(actionRequest, "languageId");
267 String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
268 String greeting = ParamUtil.getString(actionRequest, "greeting");
269 String firstName = ParamUtil.getString(actionRequest, "firstName");
270 String middleName = ParamUtil.getString(actionRequest, "middleName");
271 String lastName = ParamUtil.getString(actionRequest, "lastName");
272 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
273 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
274 boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
275 int birthdayMonth = ParamUtil.getInteger(
276 actionRequest, "birthdayMonth");
277 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
278 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
279 String comments = ParamUtil.getString(actionRequest, "comments");
280 String smsSn = ParamUtil.getString(actionRequest, "smsSn");
281 String aimSn = ParamUtil.getString(actionRequest, "aimSn");
282 String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
283 String icqSn = ParamUtil.getString(actionRequest, "icqSn");
284 String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
285 String msnSn = ParamUtil.getString(actionRequest, "msnSn");
286 String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
287 String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
288 String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
289 String ymSn = ParamUtil.getString(actionRequest, "ymSn");
290 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
291 long[] organizationIds = StringUtil.split(
292 ParamUtil.getString(actionRequest, "organizationIds"), 0L);
293 boolean sendEmail = true;
294
295 User user = null;
296 String oldScreenName = StringPool.BLANK;
297
298 if (cmd.equals(Constants.ADD)) {
299
300
302 user = UserServiceUtil.addUser(
303 themeDisplay.getCompanyId(), autoPassword, password1, password2,
304 autoScreenName, screenName, emailAddress,
305 themeDisplay.getLocale(), firstName, middleName, lastName,
306 prefixId, suffixId, male, birthdayMonth, birthdayDay,
307 birthdayYear, jobTitle, organizationIds, sendEmail);
308 }
309 else {
310
311
313 user = PortalUtil.getSelectedUser(actionRequest);
314
315 String oldPassword = AdminUtil.getUpdateUserPassword(
316 actionRequest, user.getUserId());
317 String newPassword1 = ParamUtil.getString(
318 actionRequest, "password1");
319 String newPassword2 = ParamUtil.getString(
320 actionRequest, "password2");
321 boolean passwordReset = ParamUtil.getBoolean(
322 actionRequest, "passwordReset");
323
324 String tempOldScreenName = user.getScreenName();
325
326 user = UserServiceUtil.updateUser(
327 user.getUserId(), oldPassword, newPassword1, newPassword2,
328 passwordReset, screenName, emailAddress, languageId, timeZoneId,
329 greeting, comments, firstName, middleName, lastName, prefixId,
330 suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn,
331 aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn, skypeSn,
332 twitterSn, ymSn, jobTitle, organizationIds);
333
334 String openId = ParamUtil.getString(actionRequest, "openId");
335
336 if (!openId.equals(user.getOpenId())) {
337 UserServiceUtil.updateOpenId(user.getUserId(), openId);
338 }
339
340 for (String type : AnnouncementsEntryImpl.TYPES) {
341 boolean email = ParamUtil.getBoolean(
342 actionRequest, "announcementsType" + type + "Email");
343 boolean sms = ParamUtil.getBoolean(
344 actionRequest, "announcementsType" + type + "Sms");
345 boolean website = ParamUtil.getBoolean(
346 actionRequest, "announcementsType" + type + "Website");
347
348 AnnouncementsDeliveryServiceUtil.updateDelivery(
349 user.getUserId(), type, email, sms, website);
350 }
351
352 if (!tempOldScreenName.equals(user.getScreenName())) {
353 oldScreenName = tempOldScreenName;
354 }
355
356 if (user.getUserId() == themeDisplay.getUserId()) {
357
358
360 HttpServletRequest request = PortalUtil.getHttpServletRequest(
361 actionRequest);
362 HttpSession session = request.getSession();
363
364 session.removeAttribute(Globals.LOCALE_KEY);
365
366
368 PortletSession portletSession =
369 actionRequest.getPortletSession();
370
371 InvokerPortlet.clearResponses(portletSession);
372
373
375 if (Validator.isNotNull(newPassword1)) {
376 portletSession.setAttribute(
377 WebKeys.USER_PASSWORD, newPassword1,
378 PortletSession.APPLICATION_SCOPE);
379 }
380 }
381 }
382
383 return new Object[] {user, oldScreenName};
384 }
385
386 }