1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
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.CharPool;
45  import com.liferay.portal.kernel.util.Constants;
46  import com.liferay.portal.kernel.util.GetterUtil;
47  import com.liferay.portal.kernel.util.HttpUtil;
48  import com.liferay.portal.kernel.util.LocaleUtil;
49  import com.liferay.portal.kernel.util.ParamUtil;
50  import com.liferay.portal.kernel.util.StringPool;
51  import com.liferay.portal.kernel.util.StringUtil;
52  import com.liferay.portal.kernel.util.Validator;
53  import com.liferay.portal.model.Address;
54  import com.liferay.portal.model.Contact;
55  import com.liferay.portal.model.EmailAddress;
56  import com.liferay.portal.model.Group;
57  import com.liferay.portal.model.Layout;
58  import com.liferay.portal.model.Phone;
59  import com.liferay.portal.model.User;
60  import com.liferay.portal.model.UserGroupRole;
61  import com.liferay.portal.model.Website;
62  import com.liferay.portal.security.auth.PrincipalException;
63  import com.liferay.portal.service.ServiceContext;
64  import com.liferay.portal.service.ServiceContextFactory;
65  import com.liferay.portal.service.UserLocalServiceUtil;
66  import com.liferay.portal.service.UserServiceUtil;
67  import com.liferay.portal.struts.PortletAction;
68  import com.liferay.portal.theme.ThemeDisplay;
69  import com.liferay.portal.util.PortalUtil;
70  import com.liferay.portal.util.WebKeys;
71  import com.liferay.portlet.InvokerPortletImpl;
72  import com.liferay.portlet.admin.util.AdminUtil;
73  import com.liferay.portlet.announcements.model.AnnouncementsDelivery;
74  import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
75  import com.liferay.portlet.announcements.model.impl.AnnouncementsEntryImpl;
76  import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
77  
78  import java.util.ArrayList;
79  import java.util.Calendar;
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  /**
99   * <a href="EditUserAction.java.html"><b><i>View Source</i></b></a>
100  *
101  * @author Brian Wing Shun Chan
102  * @author Jorge Ferrer
103  * @author Julio Camarero
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             ThemeDisplay themeDisplay =
143                 (ThemeDisplay)actionRequest.getAttribute(
144                     WebKeys.THEME_DISPLAY);
145 
146             String redirect = ParamUtil.getString(actionRequest, "redirect");
147 
148             if (user != null) {
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(CharPool.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             Group scopeGroup = themeDisplay.getScopeGroup();
201 
202             if (scopeGroup.isUser()) {
203                 try {
204                     UserLocalServiceUtil.getUserById(scopeGroup.getClassPK());
205                 }
206                 catch (NoSuchUserException nsue) {
207                     redirect = HttpUtil.setParameter(
208                         redirect, "doAsGroupId" , 0);
209                     redirect = HttpUtil.setParameter(
210                         redirect, "refererPlid" , 0);
211                 }
212             }
213 
214             sendRedirect(actionRequest, actionResponse, redirect);
215         }
216         catch (Exception e) {
217             if (e instanceof NoSuchUserException ||
218                 e instanceof PrincipalException) {
219 
220                 SessionErrors.add(actionRequest, e.getClass().getName());
221 
222                 setForward(actionRequest, "portlet.enterprise_admin.error");
223             }
224             else if (e instanceof AddressCityException ||
225                      e instanceof AddressStreetException ||
226                      e instanceof AddressZipException ||
227                      e instanceof ContactFirstNameException ||
228                      e instanceof ContactFullNameException ||
229                      e instanceof ContactLastNameException ||
230                      e instanceof DuplicateUserEmailAddressException ||
231                      e instanceof DuplicateUserScreenNameException ||
232                      e instanceof EmailAddressException ||
233                      e instanceof NoSuchCountryException ||
234                      e instanceof NoSuchListTypeException ||
235                      e instanceof NoSuchRegionException ||
236                      e instanceof PhoneNumberException ||
237                      e instanceof RequiredUserException ||
238                      e instanceof ReservedUserEmailAddressException ||
239                      e instanceof ReservedUserScreenNameException ||
240                      e instanceof UserEmailAddressException ||
241                      e instanceof UserIdException ||
242                      e instanceof UserPasswordException ||
243                      e instanceof UserReminderQueryException ||
244                      e instanceof UserScreenNameException ||
245                      e instanceof UserSmsException ||
246                      e instanceof WebsiteURLException) {
247 
248                 if (e instanceof NoSuchListTypeException) {
249                     NoSuchListTypeException nslte = (NoSuchListTypeException)e;
250 
251                     SessionErrors.add(
252                         actionRequest,
253                         e.getClass().getName() + nslte.getType());
254                 }
255                 else {
256                     SessionErrors.add(actionRequest, e.getClass().getName(), e);
257                 }
258 
259                 if (e instanceof RequiredUserException) {
260                     actionResponse.sendRedirect(
261                         ParamUtil.getString(actionRequest, "redirect"));
262                 }
263             }
264             else {
265                 throw e;
266             }
267         }
268     }
269 
270     public ActionForward render(
271             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
272             RenderRequest renderRequest, RenderResponse renderResponse)
273         throws Exception {
274 
275         try {
276             PortalUtil.getSelectedUser(renderRequest);
277         }
278         catch (Exception e) {
279             if (e instanceof PrincipalException) {
280                 SessionErrors.add(renderRequest, e.getClass().getName());
281 
282                 return mapping.findForward("portlet.enterprise_admin.error");
283             }
284             else {
285                 throw e;
286             }
287         }
288 
289         return mapping.findForward(
290             getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
291     }
292 
293     protected User addUser(ActionRequest actionRequest)
294         throws Exception {
295 
296         ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
297             WebKeys.THEME_DISPLAY);
298 
299         boolean autoPassword = ParamUtil.getBoolean(
300             actionRequest, "autoPassword", true);
301         String password1 = ParamUtil.getString(actionRequest, "password1");
302         String password2 = ParamUtil.getString(actionRequest, "password2");
303 
304         String reminderQueryQuestion = ParamUtil.getString(
305             actionRequest, "reminderQueryQuestion");
306 
307         if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
308             reminderQueryQuestion = ParamUtil.getString(
309                 actionRequest, "reminderQueryCustomQuestion");
310         }
311 
312         String reminderQueryAnswer = ParamUtil.getString(
313             actionRequest, "reminderQueryAnswer");
314         boolean autoScreenName = ParamUtil.getBoolean(
315             actionRequest, "autoScreenName");
316         String screenName = ParamUtil.getString(actionRequest, "screenName");
317         String emailAddress = ParamUtil.getString(
318             actionRequest, "emailAddress");
319         String openId = ParamUtil.getString(actionRequest, "openId");
320         String languageId = ParamUtil.getString(actionRequest, "languageId");
321         String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
322         String greeting = ParamUtil.getString(actionRequest, "greeting");
323         String firstName = ParamUtil.getString(actionRequest, "firstName");
324         String middleName = ParamUtil.getString(actionRequest, "middleName");
325         String lastName = ParamUtil.getString(actionRequest, "lastName");
326         int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
327         int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
328         boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
329         int birthdayMonth = ParamUtil.getInteger(
330             actionRequest, "birthdayMonth");
331         int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
332         int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
333         String comments = ParamUtil.getString(actionRequest, "comments");
334         String smsSn = ParamUtil.getString(actionRequest, "smsSn");
335         String aimSn = ParamUtil.getString(actionRequest, "aimSn");
336         String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
337         String icqSn = ParamUtil.getString(actionRequest, "icqSn");
338         String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
339         String msnSn = ParamUtil.getString(actionRequest, "msnSn");
340         String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
341         String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
342         String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
343         String ymSn = ParamUtil.getString(actionRequest, "ymSn");
344         String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
345         long[] groupIds = getLongArray(
346             actionRequest, "groupsSearchContainerPrimaryKeys");
347         long[] organizationIds = getLongArray(
348             actionRequest, "organizationsSearchContainerPrimaryKeys");
349         long[] roleIds = getLongArray(
350             actionRequest, "rolesSearchContainerPrimaryKeys");
351         List<UserGroupRole> userGroupRoles =
352             EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
353         long[] userGroupIds = getLongArray(
354             actionRequest, "userGroupsSearchContainerPrimaryKeys");
355         boolean sendEmail = true;
356         List<Address> addresses = EnterpriseAdminUtil.getAddresses(
357             actionRequest);
358         List<EmailAddress> emailAddresses =
359             EnterpriseAdminUtil.getEmailAddresses(actionRequest);
360         List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
361         List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
362         List<AnnouncementsDelivery> announcementsDeliveries =
363             getAnnouncementsDeliveries(actionRequest);
364 
365         ServiceContext serviceContext = ServiceContextFactory.getInstance(
366             User.class.getName(), actionRequest);
367 
368         User user = null;
369 
370         user = UserServiceUtil.addUser(
371             themeDisplay.getCompanyId(), autoPassword, password1, password2,
372             autoScreenName, screenName, emailAddress, openId,
373             LocaleUtil.getDefault(), firstName, middleName, lastName, prefixId,
374             suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle,
375             groupIds, organizationIds, roleIds, userGroupIds, sendEmail,
376             addresses, emailAddresses, phones, websites,
377             announcementsDeliveries, serviceContext);
378 
379         if (!userGroupRoles.isEmpty()) {
380             for (UserGroupRole userGroupRole : userGroupRoles) {
381                 userGroupRole.setUserId(user.getUserId());
382             }
383 
384             user = UserServiceUtil.updateUser(
385                 user.getUserId(), StringPool.BLANK, StringPool.BLANK,
386                 StringPool.BLANK, false, reminderQueryQuestion,
387                 reminderQueryAnswer, screenName, emailAddress, openId,
388                 languageId, timeZoneId, greeting, comments, firstName,
389                 middleName, lastName, prefixId, suffixId, male, birthdayMonth,
390                 birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn,
391                 jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn, jobTitle,
392                 groupIds, organizationIds, roleIds, userGroupRoles,
393                 userGroupIds, addresses, emailAddresses, phones, websites,
394                 announcementsDeliveries, serviceContext);
395         }
396 
397         return user;
398     }
399 
400     protected void deleteRole(ActionRequest actionRequest) throws Exception {
401         User user = PortalUtil.getSelectedUser(actionRequest);
402 
403         long roleId = ParamUtil.getLong(actionRequest, "roleId");
404 
405         UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
406     }
407 
408     protected void deleteUsers(ActionRequest actionRequest) throws Exception {
409         String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
410 
411         long[] deleteUserIds = StringUtil.split(
412             ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
413 
414         for (int i = 0; i < deleteUserIds.length; i++) {
415             if (cmd.equals(Constants.DEACTIVATE) ||
416                 cmd.equals(Constants.RESTORE)) {
417 
418                 boolean active = !cmd.equals(Constants.DEACTIVATE);
419 
420                 UserServiceUtil.updateActive(deleteUserIds[i], active);
421             }
422             else {
423                 UserServiceUtil.deleteUser(deleteUserIds[i]);
424             }
425         }
426     }
427 
428     protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
429         ActionRequest actionRequest) {
430 
431         List<AnnouncementsDelivery> announcementsDeliveries =
432             new ArrayList<AnnouncementsDelivery>();
433 
434         for (String type : AnnouncementsEntryImpl.TYPES) {
435             boolean email = ParamUtil.getBoolean(
436                 actionRequest, "announcementsType" + type + "Email");
437             boolean sms = ParamUtil.getBoolean(
438                 actionRequest, "announcementsType" + type + "Sms");
439             boolean website = ParamUtil.getBoolean(
440                 actionRequest, "announcementsType" + type + "Website");
441 
442             AnnouncementsDelivery announcementsDelivery =
443                 new AnnouncementsDeliveryImpl();
444 
445             announcementsDelivery.setType(type);
446             announcementsDelivery.setEmail(email);
447             announcementsDelivery.setSms(sms);
448             announcementsDelivery.setWebsite(website);
449 
450             announcementsDeliveries.add(announcementsDelivery);
451         }
452 
453         return announcementsDeliveries;
454     }
455 
456     protected long[] getLongArray(PortletRequest portletRequest, String name) {
457         String value = portletRequest.getParameter(name);
458 
459         if (value == null) {
460             return null;
461         }
462 
463         return StringUtil.split(GetterUtil.getString(value), 0L);
464     }
465 
466     protected User updateLockout(ActionRequest actionRequest) throws Exception {
467         User user = PortalUtil.getSelectedUser(actionRequest);
468 
469         UserServiceUtil.updateLockout(user.getUserId(), false);
470 
471         return user;
472     }
473 
474     protected Object[] updateUser(ActionRequest actionRequest)
475         throws Exception {
476 
477         ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
478             WebKeys.THEME_DISPLAY);
479 
480         User user = PortalUtil.getSelectedUser(actionRequest);
481 
482         Contact contact = user.getContact();
483 
484         String oldPassword = AdminUtil.getUpdateUserPassword(
485             actionRequest, user.getUserId());
486         String newPassword1 = ParamUtil.getString(actionRequest, "password1");
487         String newPassword2 = ParamUtil.getString(actionRequest, "password2");
488         boolean passwordReset = ParamUtil.getBoolean(
489             actionRequest, "passwordReset");
490 
491         String reminderQueryQuestion = BeanParamUtil.getString(
492             user, actionRequest, "reminderQueryQuestion");
493 
494         if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
495             reminderQueryQuestion = BeanParamUtil.getString(
496                 user, actionRequest, "reminderQueryCustomQuestion");
497         }
498 
499         String reminderQueryAnswer = BeanParamUtil.getString(
500             user, actionRequest, "reminderQueryAnswer");
501         String oldScreenName = user.getScreenName();
502         String screenName = BeanParamUtil.getString(
503             user, actionRequest, "screenName");
504         String emailAddress = BeanParamUtil.getString(
505             user, actionRequest, "emailAddress");
506         String openId = BeanParamUtil.getString(user, actionRequest, "openId");
507         String oldLanguageId = user.getLanguageId();
508         String languageId = BeanParamUtil.getString(
509             user, actionRequest, "languageId");
510         String timeZoneId = BeanParamUtil.getString(
511             user, actionRequest, "timeZoneId");
512         String greeting = BeanParamUtil.getString(
513             user, actionRequest, "greeting");
514         String firstName = BeanParamUtil.getString(
515             user, actionRequest, "firstName");
516         String middleName = BeanParamUtil.getString(
517             user, actionRequest, "middleName");
518         String lastName = BeanParamUtil.getString(
519             user, actionRequest, "lastName");
520         int prefixId = BeanParamUtil.getInteger(
521             contact, actionRequest, "prefixId");
522         int suffixId = BeanParamUtil.getInteger(
523             contact, actionRequest, "suffixId");
524         boolean male = BeanParamUtil.getBoolean(
525             user, actionRequest, "male", true);
526 
527         Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
528 
529         birthdayCal.setTime(contact.getBirthday());
530 
531         int birthdayMonth = ParamUtil.getInteger(
532             actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH));
533         int birthdayDay = ParamUtil.getInteger(
534             actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE));
535         int birthdayYear = ParamUtil.getInteger(
536             actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR));
537         String comments = BeanParamUtil.getString(
538             user, actionRequest, "comments");
539         String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn");
540         String aimSn = BeanParamUtil.getString(contact, actionRequest, "aimSn");
541         String facebookSn = BeanParamUtil.getString(
542             contact, actionRequest, "facebookSn");
543         String icqSn = BeanParamUtil.getString(contact, actionRequest, "icqSn");
544         String jabberSn = BeanParamUtil.getString(
545             contact, actionRequest, "jabberSn");
546         String msnSn = BeanParamUtil.getString(contact, actionRequest, "msnSn");
547         String mySpaceSn = BeanParamUtil.getString(
548             contact, actionRequest, "mySpaceSn");
549         String skypeSn = BeanParamUtil.getString(
550             contact, actionRequest, "skypeSn");
551         String twitterSn = BeanParamUtil.getString(
552             contact, actionRequest, "twitterSn");
553         String ymSn = BeanParamUtil.getString(contact, actionRequest, "ymSn");
554         String jobTitle = BeanParamUtil.getString(
555             user, actionRequest, "jobTitle");
556         long[] groupIds = getLongArray(
557             actionRequest, "groupsSearchContainerPrimaryKeys");
558         long[] organizationIds = getLongArray(
559             actionRequest, "organizationsSearchContainerPrimaryKeys");
560         long[] roleIds = getLongArray(
561             actionRequest, "rolesSearchContainerPrimaryKeys");
562         List<UserGroupRole> userGroupRoles =
563             EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
564         long[] userGroupIds = getLongArray(
565             actionRequest, "userGroupsSearchContainerPrimaryKeys");
566         List<Address> addresses = EnterpriseAdminUtil.getAddresses(
567             actionRequest);
568         List<EmailAddress> emailAddresses =
569             EnterpriseAdminUtil.getEmailAddresses(actionRequest);
570         List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
571         List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
572         List<AnnouncementsDelivery> announcementsDeliveries =
573             getAnnouncementsDeliveries(actionRequest);
574 
575         ServiceContext serviceContext = ServiceContextFactory.getInstance(
576             User.class.getName(), actionRequest);
577 
578         user = UserServiceUtil.updateUser(
579             user.getUserId(), oldPassword, newPassword1, newPassword2,
580             passwordReset, reminderQueryQuestion, reminderQueryAnswer,
581             screenName, emailAddress, openId, languageId, timeZoneId, greeting,
582             comments, firstName, middleName, lastName, prefixId, suffixId, male,
583             birthdayMonth, birthdayDay, birthdayYear, smsSn, aimSn, facebookSn,
584             icqSn, jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn,
585             jobTitle, groupIds, organizationIds, roleIds, userGroupRoles,
586             userGroupIds, addresses, emailAddresses, phones, websites,
587             announcementsDeliveries, serviceContext);
588 
589         if (oldScreenName.equals(user.getScreenName())) {
590             oldScreenName = StringPool.BLANK;
591         }
592 
593         boolean deletePortrait = ParamUtil.getBoolean(
594             actionRequest, "deletePortrait");
595 
596         if (deletePortrait) {
597             UserServiceUtil.deletePortrait(user.getUserId());
598         }
599 
600         if (user.getUserId() == themeDisplay.getUserId()) {
601 
602             // Reset the locale
603 
604             HttpServletRequest request = PortalUtil.getHttpServletRequest(
605                 actionRequest);
606             HttpSession session = request.getSession();
607 
608             session.removeAttribute(Globals.LOCALE_KEY);
609 
610             // Clear cached portlet responses
611 
612             PortletSession portletSession = actionRequest.getPortletSession();
613 
614             InvokerPortletImpl.clearResponses(portletSession);
615 
616             // Password
617 
618             if (Validator.isNotNull(newPassword1)) {
619                 portletSession.setAttribute(
620                     WebKeys.USER_PASSWORD, newPassword1,
621                     PortletSession.APPLICATION_SCOPE);
622             }
623         }
624 
625         return new Object[] {user, oldScreenName, oldLanguageId};
626     }
627 
628 }