/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.users.admin.web.portlet.action; import com.liferay.admin.kernel.util.PortalMyAccountApplicationType; import com.liferay.announcements.kernel.model.AnnouncementsDelivery; import com.liferay.announcements.kernel.model.AnnouncementsEntryConstants; import com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalService; import com.liferay.asset.kernel.exception.AssetCategoryException; import com.liferay.asset.kernel.exception.AssetTagException; import com.liferay.document.library.kernel.service.DLAppLocalService; import com.liferay.portal.kernel.bean.BeanParamUtil; import com.liferay.portal.kernel.exception.AddressCityException; import com.liferay.portal.kernel.exception.AddressStreetException; import com.liferay.portal.kernel.exception.AddressZipException; import com.liferay.portal.kernel.exception.CompanyMaxUsersException; import com.liferay.portal.kernel.exception.ContactBirthdayException; import com.liferay.portal.kernel.exception.ContactNameException; import com.liferay.portal.kernel.exception.EmailAddressException; import com.liferay.portal.kernel.exception.GroupFriendlyURLException; import com.liferay.portal.kernel.exception.NoSuchCountryException; import com.liferay.portal.kernel.exception.NoSuchListTypeException; import com.liferay.portal.kernel.exception.NoSuchRegionException; import com.liferay.portal.kernel.exception.NoSuchUserException; import com.liferay.portal.kernel.exception.PhoneNumberException; import com.liferay.portal.kernel.exception.PhoneNumberExtensionException; import com.liferay.portal.kernel.exception.RequiredUserException; import com.liferay.portal.kernel.exception.UserEmailAddressException; import com.liferay.portal.kernel.exception.UserFieldException; import com.liferay.portal.kernel.exception.UserIdException; import com.liferay.portal.kernel.exception.UserPasswordException; import com.liferay.portal.kernel.exception.UserReminderQueryException; import com.liferay.portal.kernel.exception.UserScreenNameException; import com.liferay.portal.kernel.exception.UserSmsException; import com.liferay.portal.kernel.exception.WebsiteURLException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Address; import com.liferay.portal.kernel.model.Company; import com.liferay.portal.kernel.model.Contact; import com.liferay.portal.kernel.model.EmailAddress; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.Layout; import com.liferay.portal.kernel.model.LayoutSet; import com.liferay.portal.kernel.model.ListType; import com.liferay.portal.kernel.model.ListTypeConstants; import com.liferay.portal.kernel.model.PasswordPolicy; import com.liferay.portal.kernel.model.Phone; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.model.UserGroupRole; import com.liferay.portal.kernel.model.Website; import com.liferay.portal.kernel.portlet.DynamicActionRequest; import com.liferay.portal.kernel.portlet.PortletProvider; import com.liferay.portal.kernel.portlet.PortletProviderUtil; import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand; import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.security.auth.PrincipalException; import com.liferay.portal.kernel.security.membershippolicy.MembershipPolicyException; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.service.ListTypeLocalService; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.ServiceContextFactory; import com.liferay.portal.kernel.service.UserLocalService; import com.liferay.portal.kernel.service.UserService; import com.liferay.portal.kernel.service.permission.GroupPermissionUtil; import com.liferay.portal.kernel.service.permission.PortalPermissionUtil; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.servlet.SessionMessages; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.CalendarFactoryUtil; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.Constants; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.Http; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Portal; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.URLCodec; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.util.PropsValues; import com.liferay.portlet.InvokerPortletImpl; import com.liferay.portlet.admin.util.AdminUtil; import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl; import com.liferay.sites.kernel.util.SitesUtil; import com.liferay.users.admin.constants.UsersAdminPortletKeys; import com.liferay.users.admin.kernel.util.UsersAdmin; import com.liferay.users.admin.kernel.util.UsersAdminUtil; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletRequest; import javax.portlet.PortletSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.Globals; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Brian Wing Shun Chan * @author Jorge Ferrer * @author Julio Camarero * @author Wesley Gong */ @Component( immediate = true, property = { "javax.portlet.name=" + UsersAdminPortletKeys.MY_ORGANIZATIONS, "javax.portlet.name=" + UsersAdminPortletKeys.USERS_ADMIN, "mvc.command.name=/users_admin/edit_user" }, service = MVCActionCommand.class ) public class EditUserMVCActionCommand extends BaseMVCActionCommand { protected User addUser(ActionRequest actionRequest) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute( WebKeys.THEME_DISPLAY); boolean autoPassword = ParamUtil.getBoolean( actionRequest, "autoPassword", true); String password1 = actionRequest.getParameter("password1"); String password2 = actionRequest.getParameter("password2"); String reminderQueryQuestion = ParamUtil.getString( actionRequest, "reminderQueryQuestion"); if (reminderQueryQuestion.equals(UsersAdmin.CUSTOM_QUESTION)) { reminderQueryQuestion = ParamUtil.getString( actionRequest, "reminderQueryCustomQuestion"); } String reminderQueryAnswer = ParamUtil.getString( actionRequest, "reminderQueryAnswer"); boolean autoScreenName = ParamUtil.getBoolean( actionRequest, "autoScreenName"); String screenName = ParamUtil.getString(actionRequest, "screenName"); String emailAddress = ParamUtil.getString( actionRequest, "emailAddress"); long facebookId = 0; String openId = ParamUtil.getString(actionRequest, "openId"); String languageId = ParamUtil.getString(actionRequest, "languageId"); String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId"); String greeting = ParamUtil.getString(actionRequest, "greeting"); String firstName = ParamUtil.getString(actionRequest, "firstName"); String middleName = ParamUtil.getString(actionRequest, "middleName"); String lastName = ParamUtil.getString(actionRequest, "lastName"); long prefixId = ParamUtil.getInteger(actionRequest, "prefixId"); long suffixId = ParamUtil.getInteger(actionRequest, "suffixId"); boolean male = ParamUtil.getBoolean(actionRequest, "male", true); int birthdayMonth = ParamUtil.getInteger( actionRequest, "birthdayMonth"); int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay"); int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear"); String comments = ParamUtil.getString(actionRequest, "comments"); String smsSn = ParamUtil.getString(actionRequest, "smsSn"); String facebookSn = ParamUtil.getString(actionRequest, "facebookSn"); String jabberSn = ParamUtil.getString(actionRequest, "jabberSn"); String skypeSn = ParamUtil.getString(actionRequest, "skypeSn"); String twitterSn = ParamUtil.getString(actionRequest, "twitterSn"); String jobTitle = ParamUtil.getString(actionRequest, "jobTitle"); long[] groupIds = UsersAdminUtil.getGroupIds(actionRequest); long[] organizationIds = UsersAdminUtil.getOrganizationIds( actionRequest); long[] roleIds = UsersAdminUtil.getRoleIds(actionRequest); List<UserGroupRole> userGroupRoles = UsersAdminUtil.getUserGroupRoles( actionRequest); long[] userGroupIds = UsersAdminUtil.getUserGroupIds(actionRequest); List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest); List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses( actionRequest); List<Phone> phones = UsersAdminUtil.getPhones(actionRequest); List<Website> websites = UsersAdminUtil.getWebsites(actionRequest); List<AnnouncementsDelivery> announcementsDeliveries = getAnnouncementsDeliveries(actionRequest); boolean sendEmail = true; ServiceContext serviceContext = ServiceContextFactory.getInstance( User.class.getName(), actionRequest); User user = _userService.addUser( themeDisplay.getCompanyId(), autoPassword, password1, password2, autoScreenName, screenName, emailAddress, facebookId, openId, LocaleUtil.fromLanguageId(languageId), firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds, organizationIds, roleIds, userGroupIds, addresses, emailAddresses, phones, websites, announcementsDeliveries, sendEmail, serviceContext); if (!userGroupRoles.isEmpty()) { for (UserGroupRole userGroupRole : userGroupRoles) { userGroupRole.setUserId(user.getUserId()); } user = _userService.updateUser( user.getUserId(), StringPool.BLANK, StringPool.BLANK, StringPool.BLANK, false, reminderQueryQuestion, reminderQueryAnswer, user.getScreenName(), user.getEmailAddress(), facebookId, openId, true, null, languageId, timeZoneId, greeting, comments, firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn, facebookSn, jabberSn, skypeSn, twitterSn, jobTitle, groupIds, organizationIds, roleIds, userGroupRoles, userGroupIds, addresses, emailAddresses, phones, websites, announcementsDeliveries, serviceContext); } long publicLayoutSetPrototypeId = ParamUtil.getLong( actionRequest, "publicLayoutSetPrototypeId"); long privateLayoutSetPrototypeId = ParamUtil.getLong( actionRequest, "privateLayoutSetPrototypeId"); boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean( actionRequest, "publicLayoutSetPrototypeLinkEnabled"); boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean( actionRequest, "privateLayoutSetPrototypeLinkEnabled"); SitesUtil.updateLayoutSetPrototypesLinks( user.getGroup(), publicLayoutSetPrototypeId, privateLayoutSetPrototypeId, publicLayoutSetPrototypeLinkEnabled, privateLayoutSetPrototypeLinkEnabled); return user; } protected void deleteRole(ActionRequest actionRequest) throws Exception { User user = portal.getSelectedUser(actionRequest); long roleId = ParamUtil.getLong(actionRequest, "roleId"); _userService.deleteRoleUser(roleId, user.getUserId()); } protected void deleteUsers(ActionRequest actionRequest) throws Exception { String cmd = ParamUtil.getString(actionRequest, Constants.CMD); long[] deleteUserIds = StringUtil.split( ParamUtil.getString(actionRequest, "deleteUserIds"), 0L); for (long deleteUserId : deleteUserIds) { if (cmd.equals(Constants.DEACTIVATE) || cmd.equals(Constants.RESTORE)) { int status = WorkflowConstants.STATUS_APPROVED; if (cmd.equals(Constants.DEACTIVATE)) { status = WorkflowConstants.STATUS_INACTIVE; } _userService.updateStatus( deleteUserId, status, new ServiceContext()); } else { _userService.deleteUser(deleteUserId); } } } @Override protected void doProcessAction( ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { DynamicActionRequest dynamicActionRequest = new DynamicActionRequest( actionRequest); long prefixId = getListTypeId( actionRequest, "prefixValue", ListTypeConstants.CONTACT_PREFIX); dynamicActionRequest.setParameter("prefixId", String.valueOf(prefixId)); long suffixId = getListTypeId( actionRequest, "suffixValue", ListTypeConstants.CONTACT_SUFFIX); dynamicActionRequest.setParameter("suffixId", String.valueOf(suffixId)); actionRequest = dynamicActionRequest; String cmd = ParamUtil.getString(actionRequest, Constants.CMD); try { User user = null; String oldScreenName = StringPool.BLANK; boolean updateLanguageId = false; if (cmd.equals(Constants.ADD)) { user = addUser(actionRequest); } else if (cmd.equals(Constants.DEACTIVATE) || cmd.equals(Constants.DELETE) || cmd.equals(Constants.RESTORE)) { deleteUsers(actionRequest); } else if (cmd.equals("deleteRole")) { deleteRole(actionRequest); } else if (cmd.equals(Constants.UPDATE)) { Object[] returnValue = updateUser( actionRequest, actionResponse); user = (User)returnValue[0]; oldScreenName = (String)returnValue[1]; updateLanguageId = (Boolean)returnValue[2]; } else if (cmd.equals("unlock")) { user = updateLockout(actionRequest); } ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY); String redirect = ParamUtil.getString(actionRequest, "redirect"); if (user != null) { if (Validator.isNotNull(oldScreenName)) { // This will fix the redirect if the user is on his personal // my account page and changes his screen name. A redirect // that references the old screen name no longer points to a // valid screen name and therefore needs to be updated. Group group = user.getGroup(); if (group.getGroupId() == themeDisplay.getScopeGroupId()) { Layout layout = themeDisplay.getLayout(); String friendlyURLPath = group.getPathFriendlyURL( layout.isPrivateLayout(), themeDisplay); String oldPath = friendlyURLPath + StringPool.SLASH + oldScreenName; String newPath = friendlyURLPath + StringPool.SLASH + user.getScreenName(); redirect = StringUtil.replace( redirect, oldPath, newPath); redirect = StringUtil.replace( redirect, URLCodec.encodeURL(oldPath), URLCodec.encodeURL(newPath)); } } if (updateLanguageId && themeDisplay.isI18n()) { String i18nLanguageId = user.getLanguageId(); int pos = i18nLanguageId.indexOf(CharPool.UNDERLINE); if (pos != -1) { i18nLanguageId = i18nLanguageId.substring(0, pos); } String i18nPath = StringPool.SLASH + i18nLanguageId; redirect = StringUtil.replace( redirect, themeDisplay.getI18nPath(), i18nPath); } redirect = _http.setParameter( redirect, actionResponse.getNamespace() + "p_u_i_d", user.getUserId()); } Group scopeGroup = themeDisplay.getScopeGroup(); if (scopeGroup.isUser() && (userLocalService.fetchUserById(scopeGroup.getClassPK()) == null)) { redirect = _http.setParameter(redirect, "doAsGroupId", 0); redirect = _http.setParameter(redirect, "refererPlid", 0); } sendRedirect(actionRequest, actionResponse, redirect); } catch (Exception e) { String mvcPath = "/edit_user.jsp"; if (e instanceof NoSuchUserException || e instanceof PrincipalException) { SessionErrors.add(actionRequest, e.getClass()); mvcPath = "/error.jsp"; } else if (e instanceof AddressCityException || e instanceof AddressStreetException || e instanceof AddressZipException || e instanceof AssetCategoryException || e instanceof AssetTagException || e instanceof CompanyMaxUsersException || e instanceof ContactBirthdayException || e instanceof ContactNameException || e instanceof EmailAddressException || e instanceof GroupFriendlyURLException || e instanceof MembershipPolicyException || e instanceof NoSuchCountryException || e instanceof NoSuchListTypeException || e instanceof NoSuchRegionException || e instanceof PhoneNumberException || e instanceof PhoneNumberExtensionException || e instanceof RequiredUserException || e instanceof UserEmailAddressException || e instanceof UserFieldException || e instanceof UserIdException || e instanceof UserPasswordException || e instanceof UserReminderQueryException || e instanceof UserScreenNameException || e instanceof UserSmsException || e instanceof WebsiteURLException) { if (e instanceof NoSuchListTypeException) { NoSuchListTypeException nslte = (NoSuchListTypeException)e; Class<?> clazz = e.getClass(); SessionErrors.add( actionRequest, clazz.getName() + nslte.getType()); } else { SessionErrors.add(actionRequest, e.getClass(), e); } String password1 = actionRequest.getParameter("password1"); String password2 = actionRequest.getParameter("password2"); boolean submittedPassword = false; if (!Validator.isBlank(password1) || !Validator.isBlank(password2)) { submittedPassword = true; } if (e instanceof CompanyMaxUsersException || e instanceof RequiredUserException || submittedPassword) { String redirect = portal.escapeRedirect( ParamUtil.getString(actionRequest, "redirect")); if (submittedPassword) { User user = portal.getSelectedUser(actionRequest); redirect = _http.setParameter( redirect, actionResponse.getNamespace() + "p_u_i_d", user.getUserId()); } if (Validator.isNotNull(redirect)) { sendRedirect(actionRequest, actionResponse, redirect); return; } } } else { throw e; } actionResponse.setRenderParameter("mvcPath", mvcPath); } } protected List<AnnouncementsDelivery> getAnnouncementsDeliveries( ActionRequest actionRequest) { List<AnnouncementsDelivery> announcementsDeliveries = new ArrayList<>(); for (String type : AnnouncementsEntryConstants.TYPES) { boolean email = ParamUtil.getBoolean( actionRequest, "announcementsType" + type + "Email"); boolean sms = ParamUtil.getBoolean( actionRequest, "announcementsType" + type + "Sms"); boolean website = ParamUtil.getBoolean( actionRequest, "announcementsType" + type + "Website"); AnnouncementsDelivery announcementsDelivery = new AnnouncementsDeliveryImpl(); announcementsDelivery.setType(type); announcementsDelivery.setEmail(email); announcementsDelivery.setSms(sms); announcementsDelivery.setWebsite(website); announcementsDeliveries.add(announcementsDelivery); } return announcementsDeliveries; } protected List<AnnouncementsDelivery> getAnnouncementsDeliveries( ActionRequest actionRequest, User user) throws Exception { if (actionRequest.getParameter( "announcementsType" + AnnouncementsEntryConstants.TYPES[0] + "Email") == null) { return _announcementsDeliveryLocalService.getUserDeliveries( user.getUserId()); } return getAnnouncementsDeliveries(actionRequest); } protected long getListTypeId( PortletRequest portletRequest, String parameterName, String type) throws Exception { String parameterValue = ParamUtil.getString( portletRequest, parameterName); ListType listType = _listTypeLocalService.addListType( parameterValue, type); return listType.getListTypeId(); } @Reference(unbind = "-") protected void setAnnouncementsDeliveryLocalService( AnnouncementsDeliveryLocalService announcementsDeliveryLocalService) { _announcementsDeliveryLocalService = announcementsDeliveryLocalService; } @Reference(unbind = "-") protected void setDLAppLocalService(DLAppLocalService dlAppLocalService) { _dlAppLocalService = dlAppLocalService; } @Reference(unbind = "-") protected void setListTypeLocalService( ListTypeLocalService listTypeLocalService) { _listTypeLocalService = listTypeLocalService; } @Reference(unbind = "-") protected void setUserLocalService(UserLocalService userLocalService) { this.userLocalService = userLocalService; } @Reference(unbind = "-") protected void setUserService(UserService userService) { _userService = userService; } protected User updateLockout(ActionRequest actionRequest) throws Exception { User user = portal.getSelectedUser(actionRequest); _userService.updateLockoutById(user.getUserId(), false); return user; } protected Object[] updateUser( ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute( WebKeys.THEME_DISPLAY); User user = portal.getSelectedUser(actionRequest); Contact contact = user.getContact(); String oldPassword = AdminUtil.getUpdateUserPassword( actionRequest, user.getUserId()); String newPassword1 = actionRequest.getParameter("password1"); String newPassword2 = actionRequest.getParameter("password2"); boolean passwordReset = false; PasswordPolicy passwordPolicy = user.getPasswordPolicy(); if ((user.getLastLoginDate() == null) && ((passwordPolicy == null) || (passwordPolicy.isChangeable() && passwordPolicy.isChangeRequired()))) { passwordReset = true; } else { passwordReset = ParamUtil.getBoolean( actionRequest, "passwordReset"); } String reminderQueryQuestion = BeanParamUtil.getString( user, actionRequest, "reminderQueryQuestion"); if (reminderQueryQuestion.equals(UsersAdmin.CUSTOM_QUESTION)) { reminderQueryQuestion = BeanParamUtil.getStringSilent( user, actionRequest, "reminderQueryCustomQuestion"); } String reminderQueryAnswer = BeanParamUtil.getString( user, actionRequest, "reminderQueryAnswer"); String oldScreenName = user.getScreenName(); String screenName = BeanParamUtil.getString( user, actionRequest, "screenName"); String oldEmailAddress = user.getEmailAddress(); String emailAddress = BeanParamUtil.getString( user, actionRequest, "emailAddress"); long facebookId = user.getFacebookId(); String openId = BeanParamUtil.getString(user, actionRequest, "openId"); boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo"); byte[] portraitBytes = null; long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId"); if (fileEntryId > 0) { FileEntry fileEntry = _dlAppLocalService.getFileEntry(fileEntryId); portraitBytes = FileUtil.getBytes(fileEntry.getContentStream()); } String languageId = BeanParamUtil.getString( user, actionRequest, "languageId"); String timeZoneId = BeanParamUtil.getString( user, actionRequest, "timeZoneId"); String greeting = BeanParamUtil.getString( user, actionRequest, "greeting"); String firstName = BeanParamUtil.getString( user, actionRequest, "firstName"); String middleName = BeanParamUtil.getString( user, actionRequest, "middleName"); String lastName = BeanParamUtil.getString( user, actionRequest, "lastName"); long prefixId = BeanParamUtil.getInteger( contact, actionRequest, "prefixId"); long suffixId = BeanParamUtil.getInteger( contact, actionRequest, "suffixId"); boolean male = BeanParamUtil.getBoolean( user, actionRequest, "male", true); Calendar birthdayCal = CalendarFactoryUtil.getCalendar(); birthdayCal.setTime(contact.getBirthday()); int birthdayMonth = ParamUtil.getInteger( actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH)); int birthdayDay = ParamUtil.getInteger( actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE)); int birthdayYear = ParamUtil.getInteger( actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR)); String comments = BeanParamUtil.getString( user, actionRequest, "comments"); String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn"); String facebookSn = BeanParamUtil.getString( contact, actionRequest, "facebookSn"); String jabberSn = BeanParamUtil.getString( contact, actionRequest, "jabberSn"); String skypeSn = BeanParamUtil.getString( contact, actionRequest, "skypeSn"); String twitterSn = BeanParamUtil.getString( contact, actionRequest, "twitterSn"); String jobTitle = BeanParamUtil.getString( user, actionRequest, "jobTitle"); long[] groupIds = UsersAdminUtil.getGroupIds(actionRequest); long[] organizationIds = UsersAdminUtil.getOrganizationIds( actionRequest); long[] roleIds = UsersAdminUtil.getRoleIds(actionRequest); List<UserGroupRole> userGroupRoles = null; if ((actionRequest.getParameter("addGroupRolesGroupIds") != null) || (actionRequest.getParameter("addGroupRolesRoleIds") != null) || (actionRequest.getParameter("deleteGroupRolesGroupIds") != null) || (actionRequest.getParameter("deleteGroupRolesRoleIds") != null)) { userGroupRoles = UsersAdminUtil.getUserGroupRoles(actionRequest); } long[] userGroupIds = UsersAdminUtil.getUserGroupIds(actionRequest); List<Address> addresses = UsersAdminUtil.getAddresses( actionRequest, user.getAddresses()); List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses( actionRequest, user.getEmailAddresses()); List<Phone> phones = UsersAdminUtil.getPhones( actionRequest, user.getPhones()); List<Website> websites = UsersAdminUtil.getWebsites( actionRequest, user.getWebsites()); List<AnnouncementsDelivery> announcementsDeliveries = getAnnouncementsDeliveries(actionRequest, user); ServiceContext serviceContext = ServiceContextFactory.getInstance( User.class.getName(), actionRequest); user = _userService.updateUser( user.getUserId(), oldPassword, newPassword1, newPassword2, passwordReset, reminderQueryQuestion, reminderQueryAnswer, screenName, emailAddress, facebookId, openId, !deleteLogo, portraitBytes, languageId, timeZoneId, greeting, comments, firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn, facebookSn, jabberSn, skypeSn, twitterSn, jobTitle, groupIds, organizationIds, roleIds, userGroupRoles, userGroupIds, addresses, emailAddresses, phones, websites, announcementsDeliveries, serviceContext); if (oldScreenName.equals(user.getScreenName())) { oldScreenName = StringPool.BLANK; } boolean updateLanguageId = false; if (user.getUserId() == themeDisplay.getUserId()) { // Reset the locale HttpServletRequest request = portal.getOriginalServletRequest( portal.getHttpServletRequest(actionRequest)); HttpServletResponse response = portal.getHttpServletResponse( actionResponse); HttpSession session = request.getSession(); session.removeAttribute(Globals.LOCALE_KEY); Locale locale = LocaleUtil.fromLanguageId(languageId); LanguageUtil.updateCookie(request, response, locale); // Clear cached portlet responses PortletSession portletSession = actionRequest.getPortletSession(); InvokerPortletImpl.clearResponses(portletSession); // Password if (PropsValues.SESSION_STORE_PASSWORD && Validator.isNotNull(newPassword1)) { portletSession.setAttribute( WebKeys.USER_PASSWORD, newPassword1, PortletSession.APPLICATION_SCOPE); } updateLanguageId = true; } String portletId = serviceContext.getPortletId(); String myAccountPortletId = PortletProviderUtil.getPortletId( PortalMyAccountApplicationType.MyAccount.CLASS_NAME, PortletProvider.Action.VIEW); Group group = user.getGroup(); if (!portletId.equals(myAccountPortletId) && GroupPermissionUtil.contains( themeDisplay.getPermissionChecker(), group.getGroupId(), ActionKeys.UPDATE) && PortalPermissionUtil.contains( themeDisplay.getPermissionChecker(), ActionKeys.UNLINK_LAYOUT_SET_PROTOTYPE)) { long publicLayoutSetPrototypeId = ParamUtil.getLong( actionRequest, "publicLayoutSetPrototypeId"); long privateLayoutSetPrototypeId = ParamUtil.getLong( actionRequest, "privateLayoutSetPrototypeId"); boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean( actionRequest, "publicLayoutSetPrototypeLinkEnabled"); boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean( actionRequest, "privateLayoutSetPrototypeLinkEnabled"); LayoutSet publicLayoutSet = group.getPublicLayoutSet(); LayoutSet privateLayoutSet = group.getPrivateLayoutSet(); if ((publicLayoutSetPrototypeId > 0) || (privateLayoutSetPrototypeId > 0) || (publicLayoutSetPrototypeLinkEnabled != publicLayoutSet.isLayoutSetPrototypeLinkEnabled()) || (privateLayoutSetPrototypeLinkEnabled != privateLayoutSet.isLayoutSetPrototypeLinkEnabled())) { SitesUtil.updateLayoutSetPrototypesLinks( group, publicLayoutSetPrototypeId, privateLayoutSetPrototypeId, publicLayoutSetPrototypeLinkEnabled, privateLayoutSetPrototypeLinkEnabled); } } Company company = portal.getCompany(actionRequest); if (company.isStrangersVerify() && !StringUtil.equalsIgnoreCase(oldEmailAddress, emailAddress)) { SessionMessages.add(actionRequest, "verificationEmailSent"); } return new Object[] {user, oldScreenName, updateLanguageId}; } @Reference protected Portal portal; protected UserLocalService userLocalService; private AnnouncementsDeliveryLocalService _announcementsDeliveryLocalService; private DLAppLocalService _dlAppLocalService; @Reference private Http _http; private ListTypeLocalService _listTypeLocalService; private UserService _userService; }