/** * 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.dynamic.data.lists.internal.instance.lifecycle; import com.liferay.portal.instance.lifecycle.BasePortalInstanceLifecycleListener; import com.liferay.portal.instance.lifecycle.PortalInstanceLifecycleListener; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.Company; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.GroupConstants; import com.liferay.portal.kernel.model.Layout; import com.liferay.portal.kernel.model.LayoutConstants; import com.liferay.portal.kernel.model.ResourceConstants; import com.liferay.portal.kernel.model.Role; import com.liferay.portal.kernel.model.RoleConstants; import com.liferay.portal.kernel.module.framework.ModuleServiceLifecycle; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.service.GroupLocalService; import com.liferay.portal.kernel.service.LayoutLocalService; import com.liferay.portal.kernel.service.ResourcePermissionLocalService; import com.liferay.portal.kernel.service.RoleLocalService; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.UserLocalService; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.StringPool; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Leonardo Barros */ @Component(immediate = true, service = PortalInstanceLifecycleListener.class) public class AddDefaultSharedFormLayoutPortalInstanceLifecycleListener extends BasePortalInstanceLifecycleListener { @Override public void portalInstanceRegistered(Company company) throws Exception { Group group = _groupLocalService.fetchFriendlyURLGroup( company.getCompanyId(), "/forms"); if (group == null) { group = addFormsGroup(company.getCompanyId()); } Layout sharedLayout = _layoutLocalService.fetchLayoutByFriendlyURL( group.getGroupId(), false, "/shared"); if (sharedLayout == null) { addPublicLayout(company.getCompanyId(), group.getGroupId()); } Layout privateLayout = _layoutLocalService.fetchLayoutByFriendlyURL( group.getGroupId(), true, "/shared"); if (privateLayout == null) { addPrivateLayout(company.getCompanyId(), group.getGroupId()); } } protected Group addFormsGroup(long companyId) throws PortalException { long defaultUserId = _userLocalService.getDefaultUserId(companyId); Map<Locale, String> nameMap = new HashMap<>(); nameMap.put(LocaleUtil.getDefault(), GroupConstants.FORMS); return _groupLocalService.addGroup( defaultUserId, GroupConstants.DEFAULT_PARENT_GROUP_ID, null, 0, GroupConstants.DEFAULT_LIVE_GROUP_ID, nameMap, null, GroupConstants.TYPE_SITE_PRIVATE, true, GroupConstants.DEFAULT_MEMBERSHIP_RESTRICTION, GroupConstants.FORMS_FRIENDLY_URL, false, false, true, null); } protected void addPrivateLayout(long companyId, long groupId) throws PortalException { ServiceContext serviceContext = new ServiceContext(); serviceContext.setAddGuestPermissions(true); serviceContext.setAddGroupPermissions(true); serviceContext.setAttribute( "layout.instanceable.allowed", Boolean.TRUE); serviceContext.setAttribute("layoutUpdateable", Boolean.FALSE); serviceContext.setScopeGroupId(groupId); long defaultUserId = _userLocalService.getDefaultUserId(companyId); serviceContext.setUserId(defaultUserId); Layout layout = _layoutLocalService.addLayout( defaultUserId, groupId, true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, "Shared", StringPool.BLANK, StringPool.BLANK, LayoutConstants.TYPE_SHARED_PORTLET, true, "/shared", serviceContext); updateUserLayoutViewPermissionPermission(companyId, layout); } protected void addPublicLayout(long companyId, long groupId) throws PortalException { ServiceContext serviceContext = new ServiceContext(); serviceContext.setAddGuestPermissions(true); serviceContext.setAddGroupPermissions(true); serviceContext.setAttribute( "layout.instanceable.allowed", Boolean.TRUE); serviceContext.setAttribute("layoutUpdateable", Boolean.FALSE); serviceContext.setScopeGroupId(groupId); long defaultUserId = _userLocalService.getDefaultUserId(companyId); serviceContext.setUserId(defaultUserId); _layoutLocalService.addLayout( defaultUserId, groupId, false, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, "Shared", StringPool.BLANK, StringPool.BLANK, LayoutConstants.TYPE_SHARED_PORTLET, true, "/shared", serviceContext); } @Reference(unbind = "-") protected void setGroupLocalService(GroupLocalService groupLocalService) { _groupLocalService = groupLocalService; } @Reference(unbind = "-") protected void setLayoutLocalService( LayoutLocalService layoutLocalService) { _layoutLocalService = layoutLocalService; } @Reference(target = ModuleServiceLifecycle.PORTAL_INITIALIZED, unbind = "-") protected void setModuleServiceLifecycle( ModuleServiceLifecycle moduleServiceLifecycle) { } @Reference(unbind = "-") protected void setResourcePermissionLocalService( ResourcePermissionLocalService resourcePermissionLocalService) { _resourcePermissionLocalService = resourcePermissionLocalService; } @Reference(unbind = "-") protected void setRoleLocalService(RoleLocalService roleLocalService) { _roleLocalService = roleLocalService; } @Reference(unbind = "-") protected void setUserLocalService(UserLocalService userLocalService) { _userLocalService = userLocalService; } protected void updateUserLayoutViewPermissionPermission( long companyId, Layout layout) throws PortalException { Role role = _roleLocalService.getRole(companyId, RoleConstants.USER); _resourcePermissionLocalService.addResourcePermission( role.getCompanyId(), Layout.class.getName(), ResourceConstants.SCOPE_GROUP, String.valueOf(layout.getGroupId()), role.getRoleId(), ActionKeys.VIEW); } private GroupLocalService _groupLocalService; private LayoutLocalService _layoutLocalService; private ResourcePermissionLocalService _resourcePermissionLocalService; private RoleLocalService _roleLocalService; private UserLocalService _userLocalService; }