001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portlet.enterpriseadmin.action;
016    
017    import com.liferay.portal.AddressCityException;
018    import com.liferay.portal.AddressStreetException;
019    import com.liferay.portal.AddressZipException;
020    import com.liferay.portal.CompanyMaxUsersException;
021    import com.liferay.portal.ContactFirstNameException;
022    import com.liferay.portal.ContactFullNameException;
023    import com.liferay.portal.ContactLastNameException;
024    import com.liferay.portal.DuplicateUserEmailAddressException;
025    import com.liferay.portal.DuplicateUserScreenNameException;
026    import com.liferay.portal.EmailAddressException;
027    import com.liferay.portal.NoSuchCountryException;
028    import com.liferay.portal.NoSuchListTypeException;
029    import com.liferay.portal.NoSuchRegionException;
030    import com.liferay.portal.NoSuchUserException;
031    import com.liferay.portal.PhoneNumberException;
032    import com.liferay.portal.RequiredUserException;
033    import com.liferay.portal.ReservedUserEmailAddressException;
034    import com.liferay.portal.ReservedUserScreenNameException;
035    import com.liferay.portal.UserEmailAddressException;
036    import com.liferay.portal.UserIdException;
037    import com.liferay.portal.UserPasswordException;
038    import com.liferay.portal.UserReminderQueryException;
039    import com.liferay.portal.UserScreenNameException;
040    import com.liferay.portal.UserSmsException;
041    import com.liferay.portal.WebsiteURLException;
042    import com.liferay.portal.kernel.bean.BeanParamUtil;
043    import com.liferay.portal.kernel.servlet.SessionErrors;
044    import com.liferay.portal.kernel.util.CalendarFactoryUtil;
045    import com.liferay.portal.kernel.util.CharPool;
046    import com.liferay.portal.kernel.util.Constants;
047    import com.liferay.portal.kernel.util.GetterUtil;
048    import com.liferay.portal.kernel.util.HttpUtil;
049    import com.liferay.portal.kernel.util.LocaleUtil;
050    import com.liferay.portal.kernel.util.ParamUtil;
051    import com.liferay.portal.kernel.util.StringPool;
052    import com.liferay.portal.kernel.util.StringUtil;
053    import com.liferay.portal.kernel.util.Validator;
054    import com.liferay.portal.model.Address;
055    import com.liferay.portal.model.Contact;
056    import com.liferay.portal.model.EmailAddress;
057    import com.liferay.portal.model.Group;
058    import com.liferay.portal.model.Layout;
059    import com.liferay.portal.model.Phone;
060    import com.liferay.portal.model.User;
061    import com.liferay.portal.model.UserGroupRole;
062    import com.liferay.portal.model.Website;
063    import com.liferay.portal.security.auth.PrincipalException;
064    import com.liferay.portal.service.ServiceContext;
065    import com.liferay.portal.service.ServiceContextFactory;
066    import com.liferay.portal.service.UserServiceUtil;
067    import com.liferay.portal.struts.PortletAction;
068    import com.liferay.portal.theme.ThemeDisplay;
069    import com.liferay.portal.util.PortalUtil;
070    import com.liferay.portal.util.PropsValues;
071    import com.liferay.portal.util.WebKeys;
072    import com.liferay.portlet.InvokerPortletImpl;
073    import com.liferay.portlet.admin.util.AdminUtil;
074    import com.liferay.portlet.announcements.model.AnnouncementsDelivery;
075    import com.liferay.portlet.announcements.model.AnnouncementsEntryConstants;
076    import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
077    import com.liferay.portlet.communities.util.CommunitiesUtil;
078    import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
079    
080    import java.util.ArrayList;
081    import java.util.Calendar;
082    import java.util.List;
083    
084    import javax.portlet.ActionRequest;
085    import javax.portlet.ActionResponse;
086    import javax.portlet.PortletConfig;
087    import javax.portlet.PortletRequest;
088    import javax.portlet.PortletSession;
089    import javax.portlet.RenderRequest;
090    import javax.portlet.RenderResponse;
091    
092    import javax.servlet.http.HttpServletRequest;
093    import javax.servlet.http.HttpSession;
094    
095    import org.apache.struts.Globals;
096    import org.apache.struts.action.ActionForm;
097    import org.apache.struts.action.ActionForward;
098    import org.apache.struts.action.ActionMapping;
099    
100    /**
101     * @author Brian Wing Shun Chan
102     * @author Jorge Ferrer
103     * @author Julio Camarero
104     * @author Wesley Gong
105     */
106    public class EditUserAction extends PortletAction {
107    
108            public void processAction(
109                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
110                            ActionRequest actionRequest, ActionResponse actionResponse)
111                    throws Exception {
112    
113                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
114    
115                    try {
116                            User user = null;
117                            String oldScreenName = StringPool.BLANK;
118                            String oldLanguageId = StringPool.BLANK;
119    
120                            if (cmd.equals(Constants.ADD)) {
121                                    user = addUser(actionRequest);
122                            }
123                            else if (cmd.equals(Constants.DEACTIVATE) ||
124                                             cmd.equals(Constants.DELETE) ||
125                                             cmd.equals(Constants.RESTORE)) {
126    
127                                    deleteUsers(actionRequest);
128                            }
129                            else if (cmd.equals("deleteRole")) {
130                                    deleteRole(actionRequest);
131                            }
132                            else if (cmd.equals(Constants.UPDATE)) {
133                                    Object[] returnValue = updateUser(actionRequest);
134    
135                                    user = (User)returnValue[0];
136                                    oldScreenName = ((String)returnValue[1]);
137                                    oldLanguageId = ((String)returnValue[2]);
138                            }
139                            else if (cmd.equals("unlock")) {
140                                    user = updateLockout(actionRequest);
141                            }
142    
143                            String redirect = ParamUtil.getString(actionRequest, "redirect");
144    
145                            if (user != null) {
146                                    ThemeDisplay themeDisplay =
147                                            (ThemeDisplay)actionRequest.getAttribute(
148                                                    WebKeys.THEME_DISPLAY);
149    
150                                    if (Validator.isNotNull(oldScreenName)) {
151    
152                                            // This will fix the redirect if the user is on his personal
153                                            // my account page and changes his screen name. A redirect
154                                            // that references the old screen name no longer points to a
155                                            // valid screen name and therefore needs to be updated.
156    
157                                            Group group = user.getGroup();
158    
159                                            if (group.getGroupId() == themeDisplay.getScopeGroupId()) {
160                                                    Layout layout = themeDisplay.getLayout();
161    
162                                                    String friendlyURLPath = group.getPathFriendlyURL(
163                                                            layout.isPrivateLayout(), themeDisplay);
164    
165                                                    String oldPath =
166                                                            friendlyURLPath + StringPool.SLASH + oldScreenName;
167                                                    String newPath =
168                                                            friendlyURLPath + StringPool.SLASH +
169                                                                    user.getScreenName();
170    
171                                                    redirect = StringUtil.replace(
172                                                            redirect, oldPath, newPath);
173    
174                                                    redirect = StringUtil.replace(
175                                                            redirect, HttpUtil.encodeURL(oldPath),
176                                                            HttpUtil.encodeURL(newPath));
177                                            }
178                                    }
179    
180                                    if (Validator.isNotNull(oldLanguageId) &&
181                                            themeDisplay.isI18n()) {
182    
183                                            String i18nLanguageId = user.getLanguageId();
184                                            int pos = i18nLanguageId.indexOf(CharPool.UNDERLINE);
185    
186                                            if (pos != -1){
187                                                    i18nLanguageId = i18nLanguageId.substring(0, pos);
188                                            }
189    
190                                            String i18nPath = StringPool.SLASH + i18nLanguageId;
191    
192                                            redirect = StringUtil.replace(
193                                                    redirect, themeDisplay.getI18nPath(), i18nPath);
194                                    }
195    
196                                    redirect = HttpUtil.setParameter(
197                                            redirect, actionResponse.getNamespace() + "p_u_i_d",
198                                            user.getUserId());
199                            }
200    
201                            sendRedirect(actionRequest, actionResponse, redirect);
202                    }
203                    catch (Exception e) {
204                            if (e instanceof NoSuchUserException ||
205                                    e instanceof PrincipalException) {
206    
207                                    SessionErrors.add(actionRequest, e.getClass().getName());
208    
209                                    setForward(actionRequest, "portlet.enterprise_admin.error");
210                            }
211                            else if (e instanceof AddressCityException ||
212                                             e instanceof AddressStreetException ||
213                                             e instanceof AddressZipException ||
214                                             e instanceof CompanyMaxUsersException ||
215                                             e instanceof ContactFirstNameException ||
216                                             e instanceof ContactFullNameException ||
217                                             e instanceof ContactLastNameException ||
218                                             e instanceof DuplicateUserEmailAddressException ||
219                                             e instanceof DuplicateUserScreenNameException ||
220                                             e instanceof EmailAddressException ||
221                                             e instanceof NoSuchCountryException ||
222                                             e instanceof NoSuchListTypeException ||
223                                             e instanceof NoSuchRegionException ||
224                                             e instanceof PhoneNumberException ||
225                                             e instanceof RequiredUserException ||
226                                             e instanceof ReservedUserEmailAddressException ||
227                                             e instanceof ReservedUserScreenNameException ||
228                                             e instanceof UserEmailAddressException ||
229                                             e instanceof UserIdException ||
230                                             e instanceof UserPasswordException ||
231                                             e instanceof UserReminderQueryException ||
232                                             e instanceof UserScreenNameException ||
233                                             e instanceof UserSmsException ||
234                                             e instanceof WebsiteURLException) {
235    
236                                    if (e instanceof NoSuchListTypeException) {
237                                            NoSuchListTypeException nslte = (NoSuchListTypeException)e;
238    
239                                            SessionErrors.add(
240                                                    actionRequest,
241                                                    e.getClass().getName() + nslte.getType());
242                                    }
243                                    else {
244                                            SessionErrors.add(actionRequest, e.getClass().getName(), e);
245                                    }
246    
247                                    if (e instanceof RequiredUserException) {
248                                            actionResponse.sendRedirect(
249                                                    ParamUtil.getString(actionRequest, "redirect"));
250                                    }
251                            }
252                            else {
253                                    throw e;
254                            }
255                    }
256            }
257    
258            public ActionForward render(
259                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
260                            RenderRequest renderRequest, RenderResponse renderResponse)
261                    throws Exception {
262    
263                    try {
264                            PortalUtil.getSelectedUser(renderRequest);
265                    }
266                    catch (Exception e) {
267                            if (e instanceof PrincipalException) {
268                                    SessionErrors.add(renderRequest, e.getClass().getName());
269    
270                                    return mapping.findForward("portlet.enterprise_admin.error");
271                            }
272                            else {
273                                    throw e;
274                            }
275                    }
276    
277                    return mapping.findForward(
278                            getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
279            }
280    
281            protected User addUser(ActionRequest actionRequest)
282                    throws Exception {
283    
284                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
285                            WebKeys.THEME_DISPLAY);
286    
287                    boolean autoPassword = ParamUtil.getBoolean(
288                            actionRequest, "autoPassword", true);
289                    String password1 = ParamUtil.getString(actionRequest, "password1");
290                    String password2 = ParamUtil.getString(actionRequest, "password2");
291    
292                    String reminderQueryQuestion = ParamUtil.getString(
293                            actionRequest, "reminderQueryQuestion");
294    
295                    if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
296                            reminderQueryQuestion = ParamUtil.getString(
297                                    actionRequest, "reminderQueryCustomQuestion");
298                    }
299    
300                    String reminderQueryAnswer = ParamUtil.getString(
301                            actionRequest, "reminderQueryAnswer");
302                    boolean autoScreenName = ParamUtil.getBoolean(
303                            actionRequest, "autoScreenName");
304                    String screenName = ParamUtil.getString(actionRequest, "screenName");
305                    String emailAddress = ParamUtil.getString(
306                            actionRequest, "emailAddress");
307                    long facebookId = 0;
308                    String openId = ParamUtil.getString(actionRequest, "openId");
309                    String languageId = ParamUtil.getString(actionRequest, "languageId");
310                    String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
311                    String greeting = ParamUtil.getString(actionRequest, "greeting");
312                    String firstName = ParamUtil.getString(actionRequest, "firstName");
313                    String middleName = ParamUtil.getString(actionRequest, "middleName");
314                    String lastName = ParamUtil.getString(actionRequest, "lastName");
315                    int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
316                    int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
317                    boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
318                    int birthdayMonth = ParamUtil.getInteger(
319                            actionRequest, "birthdayMonth");
320                    int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
321                    int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
322                    String comments = ParamUtil.getString(actionRequest, "comments");
323                    String smsSn = ParamUtil.getString(actionRequest, "smsSn");
324                    String aimSn = ParamUtil.getString(actionRequest, "aimSn");
325                    String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
326                    String icqSn = ParamUtil.getString(actionRequest, "icqSn");
327                    String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
328                    String msnSn = ParamUtil.getString(actionRequest, "msnSn");
329                    String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
330                    String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
331                    String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
332                    String ymSn = ParamUtil.getString(actionRequest, "ymSn");
333                    String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
334                    long[] groupIds = getLongArray(
335                            actionRequest, "groupsSearchContainerPrimaryKeys");
336                    long[] organizationIds = getLongArray(
337                            actionRequest, "organizationsSearchContainerPrimaryKeys");
338                    long[] roleIds = getLongArray(
339                            actionRequest, "rolesSearchContainerPrimaryKeys");
340                    List<UserGroupRole> userGroupRoles =
341                            EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
342                    long[] userGroupIds = getLongArray(
343                            actionRequest, "userGroupsSearchContainerPrimaryKeys");
344                    boolean sendEmail = true;
345                    List<Address> addresses = EnterpriseAdminUtil.getAddresses(
346                            actionRequest);
347                    List<EmailAddress> emailAddresses =
348                            EnterpriseAdminUtil.getEmailAddresses(actionRequest);
349                    List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
350                    List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
351                    List<AnnouncementsDelivery> announcementsDeliveries =
352                            getAnnouncementsDeliveries(actionRequest);
353    
354                    ServiceContext serviceContext = ServiceContextFactory.getInstance(
355                            User.class.getName(), actionRequest);
356    
357                    User user = null;
358    
359                    user = UserServiceUtil.addUser(
360                            themeDisplay.getCompanyId(), autoPassword, password1, password2,
361                            autoScreenName, screenName, emailAddress, facebookId, openId,
362                            LocaleUtil.getDefault(), firstName, middleName, lastName, prefixId,
363                            suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle,
364                            groupIds, organizationIds, roleIds, userGroupIds, sendEmail,
365                            addresses, emailAddresses, phones, websites,
366                            announcementsDeliveries, serviceContext);
367    
368                    if (!userGroupRoles.isEmpty()) {
369                            for (UserGroupRole userGroupRole : userGroupRoles) {
370                                    userGroupRole.setUserId(user.getUserId());
371                            }
372    
373                            user = UserServiceUtil.updateUser(
374                                    user.getUserId(), StringPool.BLANK, StringPool.BLANK,
375                                    StringPool.BLANK, false, reminderQueryQuestion,
376                                    reminderQueryAnswer, screenName, emailAddress, facebookId,
377                                    openId, languageId, timeZoneId, greeting, comments, firstName,
378                                    middleName, lastName, prefixId, suffixId, male, birthdayMonth,
379                                    birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn,
380                                    jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn, jobTitle,
381                                    groupIds, organizationIds, roleIds, userGroupRoles,
382                                    userGroupIds, addresses, emailAddresses, phones, websites,
383                                    announcementsDeliveries, serviceContext);
384                    }
385    
386                    long publicLayoutSetPrototypeId = ParamUtil.getLong(
387                            actionRequest, "publicLayoutSetPrototypeId");
388                    long privateLayoutSetPrototypeId = ParamUtil.getLong(
389                            actionRequest, "privateLayoutSetPrototypeId");
390    
391                    CommunitiesUtil.applyLayoutSetPrototypes(
392                            user.getGroup(), publicLayoutSetPrototypeId,
393                            privateLayoutSetPrototypeId);
394    
395                    return user;
396            }
397    
398            protected void deleteRole(ActionRequest actionRequest) throws Exception {
399                    User user = PortalUtil.getSelectedUser(actionRequest);
400    
401                    long roleId = ParamUtil.getLong(actionRequest, "roleId");
402    
403                    UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
404            }
405    
406            protected void deleteUsers(ActionRequest actionRequest) throws Exception {
407                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
408    
409                    long[] deleteUserIds = StringUtil.split(
410                            ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
411    
412                    for (int i = 0; i < deleteUserIds.length; i++) {
413                            if (cmd.equals(Constants.DEACTIVATE) ||
414                                    cmd.equals(Constants.RESTORE)) {
415    
416                                    boolean active = !cmd.equals(Constants.DEACTIVATE);
417    
418                                    UserServiceUtil.updateActive(deleteUserIds[i], active);
419                            }
420                            else {
421                                    UserServiceUtil.deleteUser(deleteUserIds[i]);
422                            }
423                    }
424            }
425    
426            protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
427                    ActionRequest actionRequest) {
428    
429                    List<AnnouncementsDelivery> announcementsDeliveries =
430                            new ArrayList<AnnouncementsDelivery>();
431    
432                    for (String type : AnnouncementsEntryConstants.TYPES) {
433                            boolean email = ParamUtil.getBoolean(
434                                    actionRequest, "announcementsType" + type + "Email");
435                            boolean sms = ParamUtil.getBoolean(
436                                    actionRequest, "announcementsType" + type + "Sms");
437                            boolean website = ParamUtil.getBoolean(
438                                    actionRequest, "announcementsType" + type + "Website");
439    
440                            AnnouncementsDelivery announcementsDelivery =
441                                    new AnnouncementsDeliveryImpl();
442    
443                            announcementsDelivery.setType(type);
444                            announcementsDelivery.setEmail(email);
445                            announcementsDelivery.setSms(sms);
446                            announcementsDelivery.setWebsite(website);
447    
448                            announcementsDeliveries.add(announcementsDelivery);
449                    }
450    
451                    return announcementsDeliveries;
452            }
453    
454            protected long[] getLongArray(PortletRequest portletRequest, String name) {
455                    String value = portletRequest.getParameter(name);
456    
457                    if (value == null) {
458                            return null;
459                    }
460    
461                    return StringUtil.split(GetterUtil.getString(value), 0L);
462            }
463    
464            protected User updateLockout(ActionRequest actionRequest) throws Exception {
465                    User user = PortalUtil.getSelectedUser(actionRequest);
466    
467                    UserServiceUtil.updateLockout(user.getUserId(), false);
468    
469                    return user;
470            }
471    
472            protected Object[] updateUser(ActionRequest actionRequest)
473                    throws Exception {
474    
475                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
476                            WebKeys.THEME_DISPLAY);
477    
478                    User user = PortalUtil.getSelectedUser(actionRequest);
479    
480                    Contact contact = user.getContact();
481    
482                    String oldPassword = AdminUtil.getUpdateUserPassword(
483                            actionRequest, user.getUserId());
484                    String newPassword1 = ParamUtil.getString(actionRequest, "password1");
485                    String newPassword2 = ParamUtil.getString(actionRequest, "password2");
486                    boolean passwordReset = ParamUtil.getBoolean(
487                            actionRequest, "passwordReset");
488    
489                    String reminderQueryQuestion = BeanParamUtil.getString(
490                            user, actionRequest, "reminderQueryQuestion");
491    
492                    if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
493                            reminderQueryQuestion = BeanParamUtil.getString(
494                                    user, actionRequest, "reminderQueryCustomQuestion");
495                    }
496    
497                    String reminderQueryAnswer = BeanParamUtil.getString(
498                            user, actionRequest, "reminderQueryAnswer");
499                    String oldScreenName = user.getScreenName();
500                    String screenName = BeanParamUtil.getString(
501                            user, actionRequest, "screenName");
502                    String emailAddress = BeanParamUtil.getString(
503                            user, actionRequest, "emailAddress");
504                    long facebookId = user.getFacebookId();
505                    String openId = BeanParamUtil.getString(user, actionRequest, "openId");
506                    String oldLanguageId = user.getLanguageId();
507                    String languageId = BeanParamUtil.getString(
508                            user, actionRequest, "languageId");
509                    String timeZoneId = BeanParamUtil.getString(
510                            user, actionRequest, "timeZoneId");
511                    String greeting = BeanParamUtil.getString(
512                            user, actionRequest, "greeting");
513                    String firstName = BeanParamUtil.getString(
514                            user, actionRequest, "firstName");
515                    String middleName = BeanParamUtil.getString(
516                            user, actionRequest, "middleName");
517                    String lastName = BeanParamUtil.getString(
518                            user, actionRequest, "lastName");
519                    int prefixId = BeanParamUtil.getInteger(
520                            contact, actionRequest, "prefixId");
521                    int suffixId = BeanParamUtil.getInteger(
522                            contact, actionRequest, "suffixId");
523                    boolean male = BeanParamUtil.getBoolean(
524                            user, actionRequest, "male", true);
525    
526                    Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
527    
528                    birthdayCal.setTime(contact.getBirthday());
529    
530                    int birthdayMonth = ParamUtil.getInteger(
531                            actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH));
532                    int birthdayDay = ParamUtil.getInteger(
533                            actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE));
534                    int birthdayYear = ParamUtil.getInteger(
535                            actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR));
536                    String comments = BeanParamUtil.getString(
537                            user, actionRequest, "comments");
538                    String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn");
539                    String aimSn = BeanParamUtil.getString(contact, actionRequest, "aimSn");
540                    String facebookSn = BeanParamUtil.getString(
541                            contact, actionRequest, "facebookSn");
542                    String icqSn = BeanParamUtil.getString(contact, actionRequest, "icqSn");
543                    String jabberSn = BeanParamUtil.getString(
544                            contact, actionRequest, "jabberSn");
545                    String msnSn = BeanParamUtil.getString(contact, actionRequest, "msnSn");
546                    String mySpaceSn = BeanParamUtil.getString(
547                            contact, actionRequest, "mySpaceSn");
548                    String skypeSn = BeanParamUtil.getString(
549                            contact, actionRequest, "skypeSn");
550                    String twitterSn = BeanParamUtil.getString(
551                            contact, actionRequest, "twitterSn");
552                    String ymSn = BeanParamUtil.getString(contact, actionRequest, "ymSn");
553                    String jobTitle = BeanParamUtil.getString(
554                            user, actionRequest, "jobTitle");
555                    long[] groupIds = getLongArray(
556                            actionRequest, "groupsSearchContainerPrimaryKeys");
557                    long[] organizationIds = getLongArray(
558                            actionRequest, "organizationsSearchContainerPrimaryKeys");
559                    long[] roleIds = getLongArray(
560                            actionRequest, "rolesSearchContainerPrimaryKeys");
561                    List<UserGroupRole> userGroupRoles =
562                            EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
563                    long[] userGroupIds = getLongArray(
564                            actionRequest, "userGroupsSearchContainerPrimaryKeys");
565                    List<Address> addresses = EnterpriseAdminUtil.getAddresses(
566                            actionRequest);
567                    List<EmailAddress> emailAddresses =
568                            EnterpriseAdminUtil.getEmailAddresses(actionRequest);
569                    List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
570                    List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
571                    List<AnnouncementsDelivery> announcementsDeliveries =
572                            getAnnouncementsDeliveries(actionRequest);
573    
574                    ServiceContext serviceContext = ServiceContextFactory.getInstance(
575                            User.class.getName(), actionRequest);
576    
577                    user = UserServiceUtil.updateUser(
578                            user.getUserId(), oldPassword, newPassword1, newPassword2,
579                            passwordReset, reminderQueryQuestion, reminderQueryAnswer,
580                            screenName, emailAddress, facebookId, openId, languageId,
581                            timeZoneId, greeting, comments, firstName, middleName, lastName,
582                            prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear,
583                            smsSn, aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn,
584                            skypeSn, twitterSn, ymSn, jobTitle, groupIds, organizationIds,
585                            roleIds, userGroupRoles, userGroupIds, addresses, emailAddresses,
586                            phones, websites, announcementsDeliveries, serviceContext);
587    
588                    if (oldScreenName.equals(user.getScreenName())) {
589                            oldScreenName = StringPool.BLANK;
590                    }
591    
592                    boolean deletePortrait = ParamUtil.getBoolean(
593                            actionRequest, "deletePortrait");
594    
595                    if (deletePortrait) {
596                            UserServiceUtil.deletePortrait(user.getUserId());
597                    }
598    
599                    if (user.getUserId() == themeDisplay.getUserId()) {
600    
601                            // Reset the locale
602    
603                            HttpServletRequest request = PortalUtil.getHttpServletRequest(
604                                    actionRequest);
605                            HttpSession session = request.getSession();
606    
607                            session.removeAttribute(Globals.LOCALE_KEY);
608    
609                            // Clear cached portlet responses
610    
611                            PortletSession portletSession = actionRequest.getPortletSession();
612    
613                            InvokerPortletImpl.clearResponses(portletSession);
614    
615                            // Password
616    
617                            if (PropsValues.SESSION_STORE_PASSWORD &&
618                                    Validator.isNotNull(newPassword1)) {
619    
620                                    portletSession.setAttribute(
621                                            WebKeys.USER_PASSWORD, newPassword1,
622                                            PortletSession.APPLICATION_SCOPE);
623                            }
624                    }
625    
626                    long publicLayoutSetPrototypeId = ParamUtil.getLong(
627                            actionRequest, "publicLayoutSetPrototypeId");
628                    long privateLayoutSetPrototypeId = ParamUtil.getLong(
629                            actionRequest, "privateLayoutSetPrototypeId");
630    
631                    CommunitiesUtil.applyLayoutSetPrototypes(
632                            user.getGroup(), publicLayoutSetPrototypeId,
633                            privateLayoutSetPrototypeId);
634    
635                    return new Object[] {user, oldScreenName, oldLanguageId};
636            }
637    
638    }