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