1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.enterpriseadmin.action;
16  
17  import com.liferay.portal.AddressCityException;
18  import com.liferay.portal.AddressStreetException;
19  import com.liferay.portal.AddressZipException;
20  import com.liferay.portal.ContactFirstNameException;
21  import com.liferay.portal.ContactFullNameException;
22  import com.liferay.portal.ContactLastNameException;
23  import com.liferay.portal.DuplicateUserEmailAddressException;
24  import com.liferay.portal.DuplicateUserScreenNameException;
25  import com.liferay.portal.EmailAddressException;
26  import com.liferay.portal.NoSuchCountryException;
27  import com.liferay.portal.NoSuchListTypeException;
28  import com.liferay.portal.NoSuchRegionException;
29  import com.liferay.portal.NoSuchUserException;
30  import com.liferay.portal.PhoneNumberException;
31  import com.liferay.portal.RequiredUserException;
32  import com.liferay.portal.ReservedUserEmailAddressException;
33  import com.liferay.portal.ReservedUserScreenNameException;
34  import com.liferay.portal.UserEmailAddressException;
35  import com.liferay.portal.UserIdException;
36  import com.liferay.portal.UserPasswordException;
37  import com.liferay.portal.UserReminderQueryException;
38  import com.liferay.portal.UserScreenNameException;
39  import com.liferay.portal.UserSmsException;
40  import com.liferay.portal.WebsiteURLException;
41  import com.liferay.portal.kernel.bean.BeanParamUtil;
42  import com.liferay.portal.kernel.servlet.SessionErrors;
43  import com.liferay.portal.kernel.util.CalendarFactoryUtil;
44  import com.liferay.portal.kernel.util.Constants;
45  import com.liferay.portal.kernel.util.GetterUtil;
46  import com.liferay.portal.kernel.util.HttpUtil;
47  import com.liferay.portal.kernel.util.LocaleUtil;
48  import com.liferay.portal.kernel.util.ParamUtil;
49  import com.liferay.portal.kernel.util.StringPool;
50  import com.liferay.portal.kernel.util.StringUtil;
51  import com.liferay.portal.kernel.util.Validator;
52  import com.liferay.portal.model.Address;
53  import com.liferay.portal.model.Contact;
54  import com.liferay.portal.model.EmailAddress;
55  import com.liferay.portal.model.Group;
56  import com.liferay.portal.model.Layout;
57  import com.liferay.portal.model.Phone;
58  import com.liferay.portal.model.User;
59  import com.liferay.portal.model.UserGroupRole;
60  import com.liferay.portal.model.Website;
61  import com.liferay.portal.security.auth.PrincipalException;
62  import com.liferay.portal.service.ServiceContext;
63  import com.liferay.portal.service.ServiceContextFactory;
64  import com.liferay.portal.service.UserServiceUtil;
65  import com.liferay.portal.struts.PortletAction;
66  import com.liferay.portal.theme.ThemeDisplay;
67  import com.liferay.portal.util.PortalUtil;
68  import com.liferay.portal.util.WebKeys;
69  import com.liferay.portlet.InvokerPortletImpl;
70  import com.liferay.portlet.admin.util.AdminUtil;
71  import com.liferay.portlet.announcements.model.AnnouncementsDelivery;
72  import com.liferay.portlet.announcements.model.AnnouncementsEntryConstants;
73  import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
74  import com.liferay.portlet.communities.util.CommunitiesUtil;
75  import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
76  
77  import java.util.ArrayList;
78  import java.util.Calendar;
79  import java.util.List;
80  
81  import javax.portlet.ActionRequest;
82  import javax.portlet.ActionResponse;
83  import javax.portlet.PortletConfig;
84  import javax.portlet.PortletRequest;
85  import javax.portlet.PortletSession;
86  import javax.portlet.RenderRequest;
87  import javax.portlet.RenderResponse;
88  
89  import javax.servlet.http.HttpServletRequest;
90  import javax.servlet.http.HttpSession;
91  
92  import org.apache.struts.Globals;
93  import org.apache.struts.action.ActionForm;
94  import org.apache.struts.action.ActionForward;
95  import org.apache.struts.action.ActionMapping;
96  
97  /**
98   * <a href="EditUserAction.java.html"><b><i>View Source</i></b></a>
99   *
100  * @author Brian Wing Shun Chan
101  * @author Jorge Ferrer
102  * @author Julio Camarero
103  * @author Wesley Gong
104  */
105 public class EditUserAction extends PortletAction {
106 
107     public void processAction(
108             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
109             ActionRequest actionRequest, ActionResponse actionResponse)
110         throws Exception {
111 
112         String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
113 
114         try {
115             User user = null;
116             String oldScreenName = StringPool.BLANK;
117             String oldLanguageId = StringPool.BLANK;
118 
119             if (cmd.equals(Constants.ADD)) {
120                 user = addUser(actionRequest);
121             }
122             else if (cmd.equals(Constants.DEACTIVATE) ||
123                      cmd.equals(Constants.DELETE) ||
124                      cmd.equals(Constants.RESTORE)) {
125 
126                 deleteUsers(actionRequest);
127             }
128             else if (cmd.equals("deleteRole")) {
129                 deleteRole(actionRequest);
130             }
131             else if (cmd.equals(Constants.UPDATE)) {
132                 Object[] returnValue = updateUser(actionRequest);
133 
134                 user = (User)returnValue[0];
135                 oldScreenName = ((String)returnValue[1]);
136                 oldLanguageId = ((String)returnValue[2]);
137             }
138             else if (cmd.equals("unlock")) {
139                 user = updateLockout(actionRequest);
140             }
141 
142             String redirect = ParamUtil.getString(actionRequest, "redirect");
143 
144             if (user != null) {
145                 ThemeDisplay themeDisplay =
146                     (ThemeDisplay)actionRequest.getAttribute(
147                         WebKeys.THEME_DISPLAY);
148 
149                 if (Validator.isNotNull(oldScreenName)) {
150 
151                     // This will fix the redirect if the user is on his personal
152                     // my account page and changes his screen name. A redirect
153                     // that references the old screen name no longer points to a
154                     // valid screen name and therefore needs to be updated.
155 
156                     Group group = user.getGroup();
157 
158                     if (group.getGroupId() == themeDisplay.getScopeGroupId()) {
159                         Layout layout = themeDisplay.getLayout();
160 
161                         String friendlyURLPath = group.getPathFriendlyURL(
162                             layout.isPrivateLayout(), themeDisplay);
163 
164                         String oldPath =
165                             friendlyURLPath + StringPool.SLASH + oldScreenName;
166                         String newPath =
167                             friendlyURLPath + StringPool.SLASH +
168                                 user.getScreenName();
169 
170                         redirect = StringUtil.replace(
171                             redirect, oldPath, newPath);
172 
173                         redirect = StringUtil.replace(
174                             redirect, HttpUtil.encodeURL(oldPath),
175                             HttpUtil.encodeURL(newPath));
176                     }
177                 }
178 
179                 if (Validator.isNotNull(oldLanguageId) &&
180                     themeDisplay.isI18n()) {
181 
182                     String i18nLanguageId = user.getLanguageId();
183                     int pos = i18nLanguageId.indexOf(StringPool.UNDERLINE);
184 
185                     if (pos != -1){
186                         i18nLanguageId = i18nLanguageId.substring(0, pos);
187                     }
188 
189                     String i18nPath = StringPool.SLASH + i18nLanguageId;
190 
191                     redirect = StringUtil.replace(
192                         redirect, themeDisplay.getI18nPath(), i18nPath);
193                 }
194 
195                 redirect = HttpUtil.setParameter(
196                     redirect, actionResponse.getNamespace() + "p_u_i_d",
197                     user.getUserId());
198             }
199 
200             sendRedirect(actionRequest, actionResponse, redirect);
201         }
202         catch (Exception e) {
203             if (e instanceof NoSuchUserException ||
204                 e instanceof PrincipalException) {
205 
206                 SessionErrors.add(actionRequest, e.getClass().getName());
207 
208                 setForward(actionRequest, "portlet.enterprise_admin.error");
209             }
210             else if (e instanceof AddressCityException ||
211                      e instanceof AddressStreetException ||
212                      e instanceof AddressZipException ||
213                      e instanceof ContactFirstNameException ||
214                      e instanceof ContactFullNameException ||
215                      e instanceof ContactLastNameException ||
216                      e instanceof DuplicateUserEmailAddressException ||
217                      e instanceof DuplicateUserScreenNameException ||
218                      e instanceof EmailAddressException ||
219                      e instanceof NoSuchCountryException ||
220                      e instanceof NoSuchListTypeException ||
221                      e instanceof NoSuchRegionException ||
222                      e instanceof PhoneNumberException ||
223                      e instanceof RequiredUserException ||
224                      e instanceof ReservedUserEmailAddressException ||
225                      e instanceof ReservedUserScreenNameException ||
226                      e instanceof UserEmailAddressException ||
227                      e instanceof UserIdException ||
228                      e instanceof UserPasswordException ||
229                      e instanceof UserReminderQueryException ||
230                      e instanceof UserScreenNameException ||
231                      e instanceof UserSmsException ||
232                      e instanceof WebsiteURLException) {
233 
234                 if (e instanceof NoSuchListTypeException) {
235                     NoSuchListTypeException nslte = (NoSuchListTypeException)e;
236 
237                     SessionErrors.add(
238                         actionRequest,
239                         e.getClass().getName() + nslte.getType());
240                 }
241                 else {
242                     SessionErrors.add(actionRequest, e.getClass().getName(), e);
243                 }
244 
245                 if (e instanceof RequiredUserException) {
246                     actionResponse.sendRedirect(
247                         ParamUtil.getString(actionRequest, "redirect"));
248                 }
249             }
250             else {
251                 throw e;
252             }
253         }
254     }
255 
256     public ActionForward render(
257             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
258             RenderRequest renderRequest, RenderResponse renderResponse)
259         throws Exception {
260 
261         try {
262             PortalUtil.getSelectedUser(renderRequest);
263         }
264         catch (Exception e) {
265             if (e instanceof PrincipalException) {
266                 SessionErrors.add(renderRequest, e.getClass().getName());
267 
268                 return mapping.findForward("portlet.enterprise_admin.error");
269             }
270             else {
271                 throw e;
272             }
273         }
274 
275         return mapping.findForward(
276             getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
277     }
278 
279     protected User addUser(ActionRequest actionRequest)
280         throws Exception {
281 
282         ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
283             WebKeys.THEME_DISPLAY);
284 
285         boolean autoPassword = ParamUtil.getBoolean(
286             actionRequest, "autoPassword", true);
287         String password1 = ParamUtil.getString(actionRequest, "password1");
288         String password2 = ParamUtil.getString(actionRequest, "password2");
289 
290         String reminderQueryQuestion = ParamUtil.getString(
291             actionRequest, "reminderQueryQuestion");
292 
293         if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
294             reminderQueryQuestion = ParamUtil.getString(
295                 actionRequest, "reminderQueryCustomQuestion");
296         }
297 
298         String reminderQueryAnswer = ParamUtil.getString(
299             actionRequest, "reminderQueryAnswer");
300         boolean autoScreenName = ParamUtil.getBoolean(
301             actionRequest, "autoScreenName");
302         String screenName = ParamUtil.getString(actionRequest, "screenName");
303         String emailAddress = ParamUtil.getString(
304             actionRequest, "emailAddress");
305         String openId = ParamUtil.getString(actionRequest, "openId");
306         String languageId = ParamUtil.getString(actionRequest, "languageId");
307         String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
308         String greeting = ParamUtil.getString(actionRequest, "greeting");
309         String firstName = ParamUtil.getString(actionRequest, "firstName");
310         String middleName = ParamUtil.getString(actionRequest, "middleName");
311         String lastName = ParamUtil.getString(actionRequest, "lastName");
312         int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
313         int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
314         boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
315         int birthdayMonth = ParamUtil.getInteger(
316             actionRequest, "birthdayMonth");
317         int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
318         int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
319         String comments = ParamUtil.getString(actionRequest, "comments");
320         String smsSn = ParamUtil.getString(actionRequest, "smsSn");
321         String aimSn = ParamUtil.getString(actionRequest, "aimSn");
322         String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
323         String icqSn = ParamUtil.getString(actionRequest, "icqSn");
324         String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
325         String msnSn = ParamUtil.getString(actionRequest, "msnSn");
326         String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
327         String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
328         String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
329         String ymSn = ParamUtil.getString(actionRequest, "ymSn");
330         String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
331         long[] groupIds = getLongArray(
332             actionRequest, "groupsSearchContainerPrimaryKeys");
333         long[] organizationIds = getLongArray(
334             actionRequest, "organizationsSearchContainerPrimaryKeys");
335         long[] roleIds = getLongArray(
336             actionRequest, "rolesSearchContainerPrimaryKeys");
337         List<UserGroupRole> userGroupRoles =
338             EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
339         long[] userGroupIds = getLongArray(
340             actionRequest, "userGroupsSearchContainerPrimaryKeys");
341         boolean sendEmail = true;
342         List<Address> addresses = EnterpriseAdminUtil.getAddresses(
343             actionRequest);
344         List<EmailAddress> emailAddresses =
345             EnterpriseAdminUtil.getEmailAddresses(actionRequest);
346         List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
347         List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
348         List<AnnouncementsDelivery> announcementsDeliveries =
349             getAnnouncementsDeliveries(actionRequest);
350 
351         ServiceContext serviceContext = ServiceContextFactory.getInstance(
352             User.class.getName(), actionRequest);
353 
354         User user = null;
355 
356         user = UserServiceUtil.addUser(
357             themeDisplay.getCompanyId(), autoPassword, password1, password2,
358             autoScreenName, screenName, emailAddress, openId,
359             LocaleUtil.getDefault(), firstName, middleName, lastName, prefixId,
360             suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle,
361             groupIds, organizationIds, roleIds, userGroupIds, sendEmail,
362             addresses, emailAddresses, phones, websites,
363             announcementsDeliveries, serviceContext);
364 
365         if (!userGroupRoles.isEmpty()) {
366             for (UserGroupRole userGroupRole : userGroupRoles) {
367                 userGroupRole.setUserId(user.getUserId());
368             }
369 
370             user = UserServiceUtil.updateUser(
371                 user.getUserId(), StringPool.BLANK, StringPool.BLANK,
372                 StringPool.BLANK, false, reminderQueryQuestion,
373                 reminderQueryAnswer, screenName, emailAddress, openId,
374                 languageId, timeZoneId, greeting, comments, firstName,
375                 middleName, lastName, prefixId, suffixId, male, birthdayMonth,
376                 birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn,
377                 jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn, jobTitle,
378                 groupIds, organizationIds, roleIds, userGroupRoles,
379                 userGroupIds, addresses, emailAddresses, phones, websites,
380                 announcementsDeliveries, serviceContext);
381         }
382 
383         long publicLayoutSetPrototypeId = ParamUtil.getLong(
384             actionRequest, "publicLayoutSetPrototypeId");
385         long privateLayoutSetPrototypeId = ParamUtil.getLong(
386             actionRequest, "privateLayoutSetPrototypeId");
387 
388         CommunitiesUtil.applyLayoutSetPrototypes(
389             user.getGroup(), publicLayoutSetPrototypeId,
390             privateLayoutSetPrototypeId);
391 
392         return user;
393     }
394 
395     protected void deleteRole(ActionRequest actionRequest) throws Exception {
396         User user = PortalUtil.getSelectedUser(actionRequest);
397 
398         long roleId = ParamUtil.getLong(actionRequest, "roleId");
399 
400         UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
401     }
402 
403     protected void deleteUsers(ActionRequest actionRequest) throws Exception {
404         String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
405 
406         long[] deleteUserIds = StringUtil.split(
407             ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
408 
409         for (int i = 0; i < deleteUserIds.length; i++) {
410             if (cmd.equals(Constants.DEACTIVATE) ||
411                 cmd.equals(Constants.RESTORE)) {
412 
413                 boolean active = !cmd.equals(Constants.DEACTIVATE);
414 
415                 UserServiceUtil.updateActive(deleteUserIds[i], active);
416             }
417             else {
418                 UserServiceUtil.deleteUser(deleteUserIds[i]);
419             }
420         }
421     }
422 
423     protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
424         ActionRequest actionRequest) {
425 
426         List<AnnouncementsDelivery> announcementsDeliveries =
427             new ArrayList<AnnouncementsDelivery>();
428 
429         for (String type : AnnouncementsEntryConstants.TYPES) {
430             boolean email = ParamUtil.getBoolean(
431                 actionRequest, "announcementsType" + type + "Email");
432             boolean sms = ParamUtil.getBoolean(
433                 actionRequest, "announcementsType" + type + "Sms");
434             boolean website = ParamUtil.getBoolean(
435                 actionRequest, "announcementsType" + type + "Website");
436 
437             AnnouncementsDelivery announcementsDelivery =
438                 new AnnouncementsDeliveryImpl();
439 
440             announcementsDelivery.setType(type);
441             announcementsDelivery.setEmail(email);
442             announcementsDelivery.setSms(sms);
443             announcementsDelivery.setWebsite(website);
444 
445             announcementsDeliveries.add(announcementsDelivery);
446         }
447 
448         return announcementsDeliveries;
449     }
450 
451     protected long[] getLongArray(PortletRequest portletRequest, String name) {
452         String value = portletRequest.getParameter(name);
453 
454         if (value == null) {
455             return null;
456         }
457 
458         return StringUtil.split(GetterUtil.getString(value), 0L);
459     }
460 
461     protected User updateLockout(ActionRequest actionRequest) throws Exception {
462         User user = PortalUtil.getSelectedUser(actionRequest);
463 
464         UserServiceUtil.updateLockout(user.getUserId(), false);
465 
466         return user;
467     }
468 
469     protected Object[] updateUser(ActionRequest actionRequest)
470         throws Exception {
471 
472         ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
473             WebKeys.THEME_DISPLAY);
474 
475         User user = PortalUtil.getSelectedUser(actionRequest);
476 
477         Contact contact = user.getContact();
478 
479         String oldPassword = AdminUtil.getUpdateUserPassword(
480             actionRequest, user.getUserId());
481         String newPassword1 = ParamUtil.getString(actionRequest, "password1");
482         String newPassword2 = ParamUtil.getString(actionRequest, "password2");
483         boolean passwordReset = ParamUtil.getBoolean(
484             actionRequest, "passwordReset");
485 
486         String reminderQueryQuestion = BeanParamUtil.getString(
487             user, actionRequest, "reminderQueryQuestion");
488 
489         if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
490             reminderQueryQuestion = BeanParamUtil.getString(
491                 user, actionRequest, "reminderQueryCustomQuestion");
492         }
493 
494         String reminderQueryAnswer = BeanParamUtil.getString(
495             user, actionRequest, "reminderQueryAnswer");
496         String oldScreenName = user.getScreenName();
497         String screenName = BeanParamUtil.getString(
498             user, actionRequest, "screenName");
499         String emailAddress = BeanParamUtil.getString(
500             user, actionRequest, "emailAddress");
501         String openId = BeanParamUtil.getString(user, actionRequest, "openId");
502         String oldLanguageId = user.getLanguageId();
503         String languageId = BeanParamUtil.getString(
504             user, actionRequest, "languageId");
505         String timeZoneId = BeanParamUtil.getString(
506             user, actionRequest, "timeZoneId");
507         String greeting = BeanParamUtil.getString(
508             user, actionRequest, "greeting");
509         String firstName = BeanParamUtil.getString(
510             user, actionRequest, "firstName");
511         String middleName = BeanParamUtil.getString(
512             user, actionRequest, "middleName");
513         String lastName = BeanParamUtil.getString(
514             user, actionRequest, "lastName");
515         int prefixId = BeanParamUtil.getInteger(
516             user, actionRequest, "prefixId");
517         int suffixId = BeanParamUtil.getInteger(
518             user, actionRequest, "suffixId");
519         boolean male = BeanParamUtil.getBoolean(
520             user, actionRequest, "male", true);
521 
522         Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
523 
524         birthdayCal.setTime(contact.getBirthday());
525 
526         int birthdayMonth = ParamUtil.getInteger(
527             actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH));
528         int birthdayDay = ParamUtil.getInteger(
529             actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE));
530         int birthdayYear = ParamUtil.getInteger(
531             actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR));
532         String comments = BeanParamUtil.getString(
533             user, actionRequest, "comments");
534         String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn");
535         String aimSn = BeanParamUtil.getString(contact, actionRequest, "aimSn");
536         String facebookSn = BeanParamUtil.getString(
537             contact, actionRequest, "facebookSn");
538         String icqSn = BeanParamUtil.getString(contact, actionRequest, "icqSn");
539         String jabberSn = BeanParamUtil.getString(
540             contact, actionRequest, "jabberSn");
541         String msnSn = BeanParamUtil.getString(contact, actionRequest, "msnSn");
542         String mySpaceSn = BeanParamUtil.getString(
543             contact, actionRequest, "mySpaceSn");
544         String skypeSn = BeanParamUtil.getString(
545             contact, actionRequest, "skypeSn");
546         String twitterSn = BeanParamUtil.getString(
547             contact, actionRequest, "twitterSn");
548         String ymSn = BeanParamUtil.getString(contact, actionRequest, "ymSn");
549         String jobTitle = BeanParamUtil.getString(
550             user, actionRequest, "jobTitle");
551         long[] groupIds = getLongArray(
552             actionRequest, "groupsSearchContainerPrimaryKeys");
553         long[] organizationIds = getLongArray(
554             actionRequest, "organizationsSearchContainerPrimaryKeys");
555         long[] roleIds = getLongArray(
556             actionRequest, "rolesSearchContainerPrimaryKeys");
557         List<UserGroupRole> userGroupRoles =
558             EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
559         long[] userGroupIds = getLongArray(
560             actionRequest, "userGroupsSearchContainerPrimaryKeys");
561         List<Address> addresses = EnterpriseAdminUtil.getAddresses(
562             actionRequest);
563         List<EmailAddress> emailAddresses =
564             EnterpriseAdminUtil.getEmailAddresses(actionRequest);
565         List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
566         List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
567         List<AnnouncementsDelivery> announcementsDeliveries =
568             getAnnouncementsDeliveries(actionRequest);
569 
570         ServiceContext serviceContext = ServiceContextFactory.getInstance(
571             User.class.getName(), actionRequest);
572 
573         user = UserServiceUtil.updateUser(
574             user.getUserId(), oldPassword, newPassword1, newPassword2,
575             passwordReset, reminderQueryQuestion, reminderQueryAnswer,
576             screenName, emailAddress, openId, languageId, timeZoneId,greeting,
577             comments, firstName, middleName, lastName, prefixId, suffixId, male,
578             birthdayMonth, birthdayDay, birthdayYear, smsSn, aimSn, facebookSn,
579             icqSn, jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn,
580             jobTitle, groupIds, organizationIds, roleIds, userGroupRoles,
581             userGroupIds, addresses, emailAddresses, phones, websites,
582             announcementsDeliveries, serviceContext);
583 
584         if (oldScreenName.equals(user.getScreenName())) {
585             oldScreenName = StringPool.BLANK;
586         }
587 
588         boolean deletePortrait = ParamUtil.getBoolean(
589             actionRequest, "deletePortrait");
590 
591         if (deletePortrait) {
592             UserServiceUtil.deletePortrait(user.getUserId());
593         }
594 
595         if (user.getUserId() == themeDisplay.getUserId()) {
596 
597             // Reset the locale
598 
599             HttpServletRequest request = PortalUtil.getHttpServletRequest(
600                 actionRequest);
601             HttpSession session = request.getSession();
602 
603             session.removeAttribute(Globals.LOCALE_KEY);
604 
605             // Clear cached portlet responses
606 
607             PortletSession portletSession = actionRequest.getPortletSession();
608 
609             InvokerPortletImpl.clearResponses(portletSession);
610 
611             // Password
612 
613             if (Validator.isNotNull(newPassword1)) {
614                 portletSession.setAttribute(
615                     WebKeys.USER_PASSWORD, newPassword1,
616                     PortletSession.APPLICATION_SCOPE);
617             }
618         }
619 
620         long publicLayoutSetPrototypeId = ParamUtil.getLong(
621             actionRequest, "publicLayoutSetPrototypeId");
622         long privateLayoutSetPrototypeId = ParamUtil.getLong(
623             actionRequest, "privateLayoutSetPrototypeId");
624 
625         CommunitiesUtil.applyLayoutSetPrototypes(
626             user.getGroup(), publicLayoutSetPrototypeId,
627             privateLayoutSetPrototypeId);
628 
629         return new Object[] {user, oldScreenName, oldLanguageId};
630     }
631 
632 }