1
22
23 package com.liferay.portlet.enterpriseadmin.action;
24
25 import com.liferay.portal.AddressCityException;
26 import com.liferay.portal.AddressStreetException;
27 import com.liferay.portal.AddressZipException;
28 import com.liferay.portal.ContactFirstNameException;
29 import com.liferay.portal.ContactLastNameException;
30 import com.liferay.portal.DuplicateUserEmailAddressException;
31 import com.liferay.portal.DuplicateUserScreenNameException;
32 import com.liferay.portal.EmailAddressException;
33 import com.liferay.portal.NoSuchCountryException;
34 import com.liferay.portal.NoSuchListTypeException;
35 import com.liferay.portal.NoSuchRegionException;
36 import com.liferay.portal.NoSuchUserException;
37 import com.liferay.portal.PhoneNumberException;
38 import com.liferay.portal.RequiredUserException;
39 import com.liferay.portal.ReservedUserEmailAddressException;
40 import com.liferay.portal.ReservedUserScreenNameException;
41 import com.liferay.portal.UserEmailAddressException;
42 import com.liferay.portal.UserIdException;
43 import com.liferay.portal.UserPasswordException;
44 import com.liferay.portal.UserReminderQueryException;
45 import com.liferay.portal.UserScreenNameException;
46 import com.liferay.portal.UserSmsException;
47 import com.liferay.portal.WebsiteURLException;
48 import com.liferay.portal.kernel.servlet.SessionErrors;
49 import com.liferay.portal.kernel.util.Constants;
50 import com.liferay.portal.kernel.util.GetterUtil;
51 import com.liferay.portal.kernel.util.HttpUtil;
52 import com.liferay.portal.kernel.util.ParamUtil;
53 import com.liferay.portal.kernel.util.StringPool;
54 import com.liferay.portal.kernel.util.StringUtil;
55 import com.liferay.portal.kernel.util.Validator;
56 import com.liferay.portal.model.Address;
57 import com.liferay.portal.model.EmailAddress;
58 import com.liferay.portal.model.Group;
59 import com.liferay.portal.model.Layout;
60 import com.liferay.portal.model.Phone;
61 import com.liferay.portal.model.User;
62 import com.liferay.portal.model.UserGroupRole;
63 import com.liferay.portal.model.Website;
64 import com.liferay.portal.security.auth.PrincipalException;
65 import com.liferay.portal.service.ServiceContext;
66 import com.liferay.portal.service.ServiceContextFactory;
67 import com.liferay.portal.service.UserServiceUtil;
68 import com.liferay.portal.struts.PortletAction;
69 import com.liferay.portal.theme.ThemeDisplay;
70 import com.liferay.portal.util.PortalUtil;
71 import com.liferay.portal.util.WebKeys;
72 import com.liferay.portlet.InvokerPortletImpl;
73 import com.liferay.portlet.admin.util.AdminUtil;
74 import com.liferay.portlet.announcements.model.AnnouncementsDelivery;
75 import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
76 import com.liferay.portlet.announcements.model.impl.AnnouncementsEntryImpl;
77 import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
78
79 import java.util.ArrayList;
80 import java.util.List;
81
82 import javax.portlet.ActionRequest;
83 import javax.portlet.ActionResponse;
84 import javax.portlet.PortletConfig;
85 import javax.portlet.PortletRequest;
86 import javax.portlet.PortletSession;
87 import javax.portlet.RenderRequest;
88 import javax.portlet.RenderResponse;
89
90 import javax.servlet.http.HttpServletRequest;
91 import javax.servlet.http.HttpSession;
92
93 import org.apache.struts.Globals;
94 import org.apache.struts.action.ActionForm;
95 import org.apache.struts.action.ActionForward;
96 import org.apache.struts.action.ActionMapping;
97
98
106 public class EditUserAction extends PortletAction {
107
108 public void processAction(
109 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
110 ActionRequest actionRequest, ActionResponse actionResponse)
111 throws Exception {
112
113 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
114
115 try {
116 User user = null;
117 String oldScreenName = StringPool.BLANK;
118
119 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
120 Object[] returnValue = updateUser(actionRequest);
121
122 user = (User)returnValue[0];
123 oldScreenName = ((String)returnValue[1]);
124 }
125 else if (cmd.equals(Constants.DEACTIVATE) ||
126 cmd.equals(Constants.DELETE) ||
127 cmd.equals(Constants.RESTORE)) {
128
129 deleteUsers(actionRequest);
130 }
131 else if (cmd.equals("deleteRole")) {
132 deleteRole(actionRequest);
133 }
134 else if (cmd.equals("unlock")) {
135 user = updateLockout(actionRequest);
136 }
137
138 String redirect = ParamUtil.getString(actionRequest, "redirect");
139
140 if (user != null) {
141 if (Validator.isNotNull(oldScreenName)) {
142
143
148 ThemeDisplay themeDisplay =
149 (ThemeDisplay)actionRequest.getAttribute(
150 WebKeys.THEME_DISPLAY);
151
152 Group group = user.getGroup();
153
154 if (group.getGroupId() == themeDisplay.getScopeGroupId()) {
155 Layout layout = themeDisplay.getLayout();
156
157 String friendlyURLPath = group.getPathFriendlyURL(
158 layout.isPrivateLayout(), themeDisplay);
159
160 String oldPath =
161 friendlyURLPath + StringPool.SLASH + oldScreenName;
162 String newPath =
163 friendlyURLPath + StringPool.SLASH +
164 user.getScreenName();
165
166 redirect = StringUtil.replace(
167 redirect, oldPath, newPath);
168
169 redirect = StringUtil.replace(
170 redirect, HttpUtil.encodeURL(oldPath),
171 HttpUtil.encodeURL(newPath));
172 }
173 }
174
175 redirect = HttpUtil.setParameter(
176 redirect, actionResponse.getNamespace() + "p_u_i_d",
177 user.getUserId());
178 }
179
180 sendRedirect(actionRequest, actionResponse, redirect);
181 }
182 catch (Exception e) {
183 if (e instanceof NoSuchUserException ||
184 e instanceof PrincipalException) {
185
186 SessionErrors.add(actionRequest, e.getClass().getName());
187
188 setForward(actionRequest, "portlet.enterprise_admin.error");
189 }
190 else if (e instanceof AddressCityException ||
191 e instanceof AddressStreetException ||
192 e instanceof AddressZipException ||
193 e instanceof ContactFirstNameException ||
194 e instanceof ContactLastNameException ||
195 e instanceof DuplicateUserEmailAddressException ||
196 e instanceof DuplicateUserScreenNameException ||
197 e instanceof EmailAddressException ||
198 e instanceof NoSuchCountryException ||
199 e instanceof NoSuchListTypeException ||
200 e instanceof NoSuchRegionException ||
201 e instanceof PhoneNumberException ||
202 e instanceof RequiredUserException ||
203 e instanceof ReservedUserEmailAddressException ||
204 e instanceof ReservedUserScreenNameException ||
205 e instanceof UserEmailAddressException ||
206 e instanceof UserIdException ||
207 e instanceof UserPasswordException ||
208 e instanceof UserReminderQueryException ||
209 e instanceof UserScreenNameException ||
210 e instanceof UserSmsException ||
211 e instanceof WebsiteURLException) {
212
213 if (e instanceof NoSuchListTypeException) {
214 NoSuchListTypeException nslte = (NoSuchListTypeException)e;
215
216 SessionErrors.add(
217 actionRequest,
218 e.getClass().getName() + nslte.getType());
219 }
220 else {
221 SessionErrors.add(actionRequest, e.getClass().getName(), e);
222 }
223
224 if (e instanceof RequiredUserException) {
225 actionResponse.sendRedirect(
226 ParamUtil.getString(actionRequest, "redirect"));
227 }
228 }
229 else {
230 throw e;
231 }
232 }
233 }
234
235 public ActionForward render(
236 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
237 RenderRequest renderRequest, RenderResponse renderResponse)
238 throws Exception {
239
240 try {
241 PortalUtil.getSelectedUser(renderRequest);
242 }
243 catch (Exception e) {
244 if (e instanceof PrincipalException) {
245 SessionErrors.add(renderRequest, e.getClass().getName());
246
247 return mapping.findForward("portlet.enterprise_admin.error");
248 }
249 else {
250 throw e;
251 }
252 }
253
254 return mapping.findForward(
255 getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
256 }
257
258 protected void deleteRole(ActionRequest actionRequest) throws Exception {
259 User user = PortalUtil.getSelectedUser(actionRequest);
260
261 long roleId = ParamUtil.getLong(actionRequest, "roleId");
262
263 UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
264 }
265
266 protected void deleteUsers(ActionRequest actionRequest) throws Exception {
267 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
268
269 long[] deleteUserIds = StringUtil.split(
270 ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
271
272 for (int i = 0; i < deleteUserIds.length; i++) {
273 if (cmd.equals(Constants.DEACTIVATE) ||
274 cmd.equals(Constants.RESTORE)) {
275
276 boolean active = !cmd.equals(Constants.DEACTIVATE);
277
278 UserServiceUtil.updateActive(deleteUserIds[i], active);
279 }
280 else {
281 UserServiceUtil.deleteUser(deleteUserIds[i]);
282 }
283 }
284 }
285
286 protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
287 ActionRequest actionRequest) {
288
289 List<AnnouncementsDelivery> announcementsDeliveries =
290 new ArrayList<AnnouncementsDelivery>();
291
292 for (String type : AnnouncementsEntryImpl.TYPES) {
293 boolean email = ParamUtil.getBoolean(
294 actionRequest, "announcementsType" + type + "Email");
295 boolean sms = ParamUtil.getBoolean(
296 actionRequest, "announcementsType" + type + "Sms");
297 boolean website = ParamUtil.getBoolean(
298 actionRequest, "announcementsType" + type + "Website");
299
300 AnnouncementsDelivery announcementsDelivery =
301 new AnnouncementsDeliveryImpl();
302
303 announcementsDelivery.setType(type);
304 announcementsDelivery.setEmail(email);
305 announcementsDelivery.setSms(sms);
306 announcementsDelivery.setWebsite(website);
307
308 announcementsDeliveries.add(announcementsDelivery);
309 }
310
311 return announcementsDeliveries;
312 }
313
314 protected long[] getLongArray(PortletRequest portletRequest, String name) {
315 String value = portletRequest.getParameter(name);
316
317 if (value == null) {
318 return null;
319 }
320
321 return StringUtil.split(GetterUtil.getString(value), 0L);
322 }
323
324 protected User updateLockout(ActionRequest actionRequest) throws Exception {
325 User user = PortalUtil.getSelectedUser(actionRequest);
326
327 UserServiceUtil.updateLockout(user.getUserId(), false);
328
329 return user;
330 }
331
332 protected Object[] updateUser(ActionRequest actionRequest)
333 throws Exception {
334
335 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
336
337 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
338 WebKeys.THEME_DISPLAY);
339
340 boolean autoPassword = ParamUtil.getBoolean(
341 actionRequest, "autoPassword", true);
342 String password1 = ParamUtil.getString(actionRequest, "password1");
343 String password2 = ParamUtil.getString(actionRequest, "password2");
344
345 String reminderQueryQuestion = ParamUtil.getString(
346 actionRequest, "reminderQueryQuestion");
347
348 if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
349 reminderQueryQuestion = ParamUtil.getString(
350 actionRequest, "reminderQueryCustomQuestion");
351 }
352
353 String reminderQueryAnswer = ParamUtil.getString(
354 actionRequest, "reminderQueryAnswer");
355 boolean autoScreenName = ParamUtil.getBoolean(
356 actionRequest, "autoScreenName");
357 String screenName = ParamUtil.getString(actionRequest, "screenName");
358 String emailAddress = ParamUtil.getString(
359 actionRequest, "emailAddress");
360 String openId = ParamUtil.getString(actionRequest, "openId");
361 String languageId = ParamUtil.getString(actionRequest, "languageId");
362 String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
363 String greeting = ParamUtil.getString(actionRequest, "greeting");
364 String firstName = ParamUtil.getString(actionRequest, "firstName");
365 String middleName = ParamUtil.getString(actionRequest, "middleName");
366 String lastName = ParamUtil.getString(actionRequest, "lastName");
367 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
368 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
369 boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
370 int birthdayMonth = ParamUtil.getInteger(
371 actionRequest, "birthdayMonth");
372 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
373 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
374 String comments = ParamUtil.getString(actionRequest, "comments");
375 String smsSn = ParamUtil.getString(actionRequest, "smsSn");
376 String aimSn = ParamUtil.getString(actionRequest, "aimSn");
377 String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
378 String icqSn = ParamUtil.getString(actionRequest, "icqSn");
379 String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
380 String msnSn = ParamUtil.getString(actionRequest, "msnSn");
381 String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
382 String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
383 String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
384 String ymSn = ParamUtil.getString(actionRequest, "ymSn");
385 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
386 long[] groupIds = getLongArray(
387 actionRequest, "groupsSearchContainerPrimaryKeys");
388 long[] organizationIds = getLongArray(
389 actionRequest, "organizationsSearchContainerPrimaryKeys");
390 long[] roleIds = getLongArray(
391 actionRequest, "rolesSearchContainerPrimaryKeys");
392 List<UserGroupRole> userGroupRoles =
393 EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
394 long[] userGroupIds = getLongArray(
395 actionRequest, "userGroupsSearchContainerPrimaryKeys");
396 boolean sendEmail = true;
397 List<Address> addresses = EnterpriseAdminUtil.getAddresses(
398 actionRequest);
399 List<EmailAddress> emailAddresses =
400 EnterpriseAdminUtil.getEmailAddresses(actionRequest);
401 List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
402 List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
403 List<AnnouncementsDelivery> announcementsDeliveries =
404 getAnnouncementsDeliveries(actionRequest);
405
406 ServiceContext serviceContext = ServiceContextFactory.getInstance(
407 User.class.getName(), actionRequest);
408
409 User user = null;
410 String oldScreenName = StringPool.BLANK;
411
412 if (cmd.equals(Constants.ADD)) {
413
414
416 user = UserServiceUtil.addUser(
417 themeDisplay.getCompanyId(), autoPassword, password1, password2,
418 autoScreenName, screenName, emailAddress, openId,
419 themeDisplay.getLocale(), firstName, middleName, lastName,
420 prefixId, suffixId, male, birthdayMonth, birthdayDay,
421 birthdayYear, jobTitle, groupIds, organizationIds,
422 roleIds, userGroupIds, sendEmail, addresses, emailAddresses,
423 phones, websites, announcementsDeliveries, serviceContext);
424
425 if (!userGroupRoles.isEmpty()) {
426 for (UserGroupRole userGroupRole : userGroupRoles) {
427 userGroupRole.setUserId(user.getUserId());
428 }
429
430 user = UserServiceUtil.updateUser(
431 user.getUserId(), StringPool.BLANK, StringPool.BLANK,
432 StringPool.BLANK, false, reminderQueryQuestion,
433 reminderQueryAnswer, screenName, emailAddress, openId,
434 languageId, timeZoneId, greeting, comments, firstName,
435 middleName, lastName, prefixId, suffixId, male,
436 birthdayMonth, birthdayDay, birthdayYear, smsSn, aimSn,
437 facebookSn, icqSn, jabberSn, msnSn, mySpaceSn, skypeSn,
438 twitterSn, ymSn, jobTitle, groupIds, organizationIds,
439 roleIds, userGroupRoles, userGroupIds, addresses,
440 emailAddresses, phones, websites, announcementsDeliveries,
441 serviceContext);
442 }
443 }
444 else {
445
446
448 user = PortalUtil.getSelectedUser(actionRequest);
449
450 String oldPassword = AdminUtil.getUpdateUserPassword(
451 actionRequest, user.getUserId());
452 String newPassword1 = ParamUtil.getString(
453 actionRequest, "password1");
454 String newPassword2 = ParamUtil.getString(
455 actionRequest, "password2");
456 boolean passwordReset = ParamUtil.getBoolean(
457 actionRequest, "passwordReset");
458
459 String tempOldScreenName = user.getScreenName();
460
461 user = UserServiceUtil.updateUser(
462 user.getUserId(), oldPassword, newPassword1, newPassword2,
463 passwordReset, reminderQueryQuestion, reminderQueryAnswer,
464 screenName, emailAddress, openId, languageId, timeZoneId,
465 greeting, comments, firstName, middleName, lastName, prefixId,
466 suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn,
467 aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn, skypeSn,
468 twitterSn, ymSn, jobTitle, groupIds, organizationIds, roleIds,
469 userGroupRoles, userGroupIds, addresses, emailAddresses, phones,
470 websites, announcementsDeliveries, serviceContext);
471
472 boolean deletePortrait = ParamUtil.getBoolean(
473 actionRequest, "deletePortrait");
474
475 if (deletePortrait) {
476 UserServiceUtil.deletePortrait(user.getUserId());
477 }
478
479 if (!tempOldScreenName.equals(user.getScreenName())) {
480 oldScreenName = tempOldScreenName;
481 }
482
483 if (user.getUserId() == themeDisplay.getUserId()) {
484
485
487 HttpServletRequest request = PortalUtil.getHttpServletRequest(
488 actionRequest);
489 HttpSession session = request.getSession();
490
491 session.removeAttribute(Globals.LOCALE_KEY);
492
493
495 PortletSession portletSession =
496 actionRequest.getPortletSession();
497
498 InvokerPortletImpl.clearResponses(portletSession);
499
500
502 if (Validator.isNotNull(newPassword1)) {
503 portletSession.setAttribute(
504 WebKeys.USER_PASSWORD, newPassword1,
505 PortletSession.APPLICATION_SCOPE);
506 }
507 }
508 }
509
510 return new Object[] {user, oldScreenName};
511 }
512
513 }