/** * 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.asset.kernel.exception.AssetCategoryException; import com.liferay.asset.kernel.exception.AssetTagException; import com.liferay.document.library.kernel.service.DLAppLocalService; 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.DuplicateOrganizationException; import com.liferay.portal.kernel.exception.EmailAddressException; import com.liferay.portal.kernel.exception.NoSuchCountryException; import com.liferay.portal.kernel.exception.NoSuchListTypeException; import com.liferay.portal.kernel.exception.NoSuchOrganizationException; import com.liferay.portal.kernel.exception.NoSuchRegionException; import com.liferay.portal.kernel.exception.OrganizationNameException; import com.liferay.portal.kernel.exception.OrganizationParentException; import com.liferay.portal.kernel.exception.PhoneNumberException; import com.liferay.portal.kernel.exception.PhoneNumberExtensionException; import com.liferay.portal.kernel.exception.RequiredOrganizationException; import com.liferay.portal.kernel.exception.WebsiteURLException; import com.liferay.portal.kernel.model.Address; import com.liferay.portal.kernel.model.EmailAddress; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.OrgLabor; import com.liferay.portal.kernel.model.Organization; import com.liferay.portal.kernel.model.OrganizationConstants; import com.liferay.portal.kernel.model.Phone; import com.liferay.portal.kernel.model.Website; 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.permission.ActionKeys; import com.liferay.portal.kernel.service.OrganizationService; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.ServiceContextFactory; import com.liferay.portal.kernel.service.permission.GroupPermissionUtil; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.theme.ThemeDisplay; 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.LocalizationUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Portal; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.sites.kernel.util.SitesUtil; import com.liferay.users.admin.constants.UsersAdminPortletKeys; import com.liferay.users.admin.kernel.util.UsersAdminUtil; import java.util.List; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletPreferences; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Brian Wing Shun Chan * @author Julio Camarero * @author Jorge Ferrer */ @Component( immediate = true, property = { "javax.portlet.name=" + UsersAdminPortletKeys.MY_ORGANIZATIONS, "javax.portlet.name=" + UsersAdminPortletKeys.USERS_ADMIN, "mvc.command.name=/users_admin/edit_organization" }, service = MVCActionCommand.class ) public class EditOrganizationMVCActionCommand extends BaseMVCActionCommand { protected void deleteOrganizations(ActionRequest actionRequest) throws Exception { long[] deleteOrganizationIds = StringUtil.split( ParamUtil.getString(actionRequest, "deleteOrganizationIds"), 0L); for (long deleteOrganizationId : deleteOrganizationIds) { _organizationService.deleteOrganization(deleteOrganizationId); } } @Override protected void doProcessAction( ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { String cmd = ParamUtil.getString(actionRequest, Constants.CMD); try { Organization organization = null; if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) { organization = updateOrganization(actionRequest); } else if (cmd.equals(Constants.DELETE)) { deleteOrganizations(actionRequest); } String redirect = ParamUtil.getString(actionRequest, "redirect"); if (organization != null) { redirect = _http.setParameter( redirect, actionResponse.getNamespace() + "organizationId", organization.getOrganizationId()); } sendRedirect(actionRequest, actionResponse, redirect); } catch (Exception e) { String mvcPath = "/edit_organization.jsp"; if (e instanceof NoSuchOrganizationException || e instanceof PrincipalException) { SessionErrors.add(actionRequest, e.getClass()); mvcPath = "/error.jsp"; } else if (e instanceof AssetCategoryException || e instanceof AssetTagException) { SessionErrors.add(actionRequest, e.getClass(), e); } else if (e instanceof AddressCityException || e instanceof AddressStreetException || e instanceof AddressZipException || e instanceof DuplicateOrganizationException || e instanceof EmailAddressException || e instanceof NoSuchCountryException || e instanceof NoSuchListTypeException || e instanceof NoSuchRegionException || e instanceof OrganizationNameException || e instanceof OrganizationParentException || e instanceof PhoneNumberException || e instanceof PhoneNumberExtensionException || e instanceof RequiredOrganizationException || 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()); } if (e instanceof RequiredOrganizationException) { String redirect = _portal.escapeRedirect( ParamUtil.getString(actionRequest, "redirect")); long organizationId = ParamUtil.getLong( actionRequest, "organizationId"); if (organizationId > 0) { redirect = _http.setParameter( redirect, actionResponse.getNamespace() + "organizationId", organizationId); } if (Validator.isNotNull(redirect)) { sendRedirect(actionRequest, actionResponse, redirect); return; } } } else { throw e; } actionResponse.setRenderParameter("mvcPath", mvcPath); } } @Reference(unbind = "-") protected void setDLAppLocalService(DLAppLocalService dlAppLocalService) { _dlAppLocalService = dlAppLocalService; } @Reference(unbind = "-") protected void setOrganizationService( OrganizationService organizationService) { _organizationService = organizationService; } protected Organization updateOrganization(ActionRequest actionRequest) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute( WebKeys.THEME_DISPLAY); long organizationId = ParamUtil.getLong( actionRequest, "organizationId"); long parentOrganizationId = ParamUtil.getLong( actionRequest, "parentOrganizationSearchContainerPrimaryKeys", OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID); String name = ParamUtil.getString(actionRequest, "name"); long statusId = ParamUtil.getLong(actionRequest, "statusId"); String type = ParamUtil.getString(actionRequest, "type"); long regionId = ParamUtil.getLong(actionRequest, "regionId"); long countryId = ParamUtil.getLong(actionRequest, "countryId"); String comments = ParamUtil.getString(actionRequest, "comments"); boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo"); byte[] logoBytes = null; long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId"); if (fileEntryId > 0) { FileEntry fileEntry = _dlAppLocalService.getFileEntry(fileEntryId); logoBytes = FileUtil.getBytes(fileEntry.getContentStream()); } boolean site = ParamUtil.getBoolean(actionRequest, "site"); List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest); List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses( actionRequest); List<OrgLabor> orgLabors = UsersAdminUtil.getOrgLabors(actionRequest); List<Phone> phones = UsersAdminUtil.getPhones(actionRequest); List<Website> websites = UsersAdminUtil.getWebsites(actionRequest); ServiceContext serviceContext = ServiceContextFactory.getInstance( Organization.class.getName(), actionRequest); Organization organization = null; if (organizationId <= 0) { // Add organization organization = _organizationService.addOrganization( parentOrganizationId, name, type, regionId, countryId, statusId, comments, site, addresses, emailAddresses, orgLabors, phones, websites, serviceContext); } else { // Update organization organization = _organizationService.updateOrganization( organizationId, parentOrganizationId, name, type, regionId, countryId, statusId, comments, !deleteLogo, logoBytes, site, addresses, emailAddresses, orgLabors, phones, websites, serviceContext); } // Layout set prototypes long publicLayoutSetPrototypeId = ParamUtil.getLong( actionRequest, "publicLayoutSetPrototypeId"); long privateLayoutSetPrototypeId = ParamUtil.getLong( actionRequest, "privateLayoutSetPrototypeId"); boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean( actionRequest, "publicLayoutSetPrototypeLinkEnabled", publicLayoutSetPrototypeId > 0); boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean( actionRequest, "privateLayoutSetPrototypeLinkEnabled", privateLayoutSetPrototypeId > 0); Group organizationGroup = organization.getGroup(); if (GroupPermissionUtil.contains( themeDisplay.getPermissionChecker(), organizationGroup, ActionKeys.UPDATE)) { SitesUtil.updateLayoutSetPrototypesLinks( organizationGroup, publicLayoutSetPrototypeId, privateLayoutSetPrototypeId, publicLayoutSetPrototypeLinkEnabled, privateLayoutSetPrototypeLinkEnabled); } // Reminder queries String reminderQueries = actionRequest.getParameter("reminderQueries"); PortletPreferences portletPreferences = organization.getPreferences(); LocalizationUtil.setLocalizedPreferencesValues( actionRequest, portletPreferences, "reminderQueries"); portletPreferences.setValue("reminderQueries", reminderQueries); portletPreferences.store(); return organization; } private DLAppLocalService _dlAppLocalService; @Reference private Http _http; private OrganizationService _organizationService; @Reference private Portal _portal; }