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