--- /dev/null
+/**\r
+ * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.\r
+ *\r
+ * This library is free software; you can redistribute it and/or modify it under\r
+ * the terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation; either version 2.1 of the License, or (at your option)\r
+ * any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ */\r
+\r
+package com.liferay.portal.events;\r
+\r
+import com.liferay.portal.LayoutPermissionException;\r
+import com.liferay.portal.NoSuchGroupException;\r
+import com.liferay.portal.NoSuchLayoutException;\r
+import com.liferay.portal.NoSuchUserException;\r
+import com.liferay.portal.kernel.dao.orm.QueryUtil;\r
+import com.liferay.portal.kernel.events.Action;\r
+import com.liferay.portal.kernel.events.ActionException;\r
+import com.liferay.portal.kernel.exception.PortalException;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.language.LanguageUtil;\r
+import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;\r
+import com.liferay.portal.kernel.log.Log;\r
+import com.liferay.portal.kernel.log.LogFactoryUtil;\r
+import com.liferay.portal.kernel.portlet.LiferayPortletURL;\r
+import com.liferay.portal.kernel.portlet.LiferayWindowState;\r
+import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;\r
+import com.liferay.portal.kernel.servlet.HttpHeaders;\r
+import com.liferay.portal.kernel.servlet.SessionErrors;\r
+import com.liferay.portal.kernel.util.FriendlyURLNormalizerUtil;\r
+import com.liferay.portal.kernel.util.GetterUtil;\r
+import com.liferay.portal.kernel.util.HttpUtil;\r
+import com.liferay.portal.kernel.util.LocaleUtil;\r
+import com.liferay.portal.kernel.util.ParamUtil;\r
+import com.liferay.portal.kernel.util.PropsKeys;\r
+import com.liferay.portal.kernel.util.SessionParamUtil;\r
+import com.liferay.portal.kernel.util.StringBundler;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.StringUtil;\r
+import com.liferay.portal.kernel.util.UnicodeProperties;\r
+import com.liferay.portal.kernel.util.Validator;\r
+import com.liferay.portal.model.ColorScheme;\r
+import com.liferay.portal.model.Company;\r
+import com.liferay.portal.model.Group;\r
+import com.liferay.portal.model.GroupConstants;\r
+import com.liferay.portal.model.Image;\r
+import com.liferay.portal.model.Layout;\r
+import com.liferay.portal.model.LayoutConstants;\r
+import com.liferay.portal.model.LayoutSet;\r
+import com.liferay.portal.model.LayoutTypePortlet;\r
+import com.liferay.portal.model.LayoutTypePortletConstants;\r
+import com.liferay.portal.model.Portlet;\r
+import com.liferay.portal.model.RoleConstants;\r
+import com.liferay.portal.model.Theme;\r
+import com.liferay.portal.model.User;\r
+import com.liferay.portal.model.impl.ColorSchemeImpl;\r
+import com.liferay.portal.model.impl.VirtualLayout;\r
+import com.liferay.portal.security.auth.PrincipalException;\r
+import com.liferay.portal.security.permission.ActionKeys;\r
+import com.liferay.portal.security.permission.PermissionChecker;\r
+import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;\r
+import com.liferay.portal.security.permission.PermissionThreadLocal;\r
+import com.liferay.portal.service.GroupLocalServiceUtil;\r
+import com.liferay.portal.service.ImageLocalServiceUtil;\r
+import com.liferay.portal.service.LayoutLocalServiceUtil;\r
+import com.liferay.portal.service.LayoutSetLocalServiceUtil;\r
+import com.liferay.portal.service.PortletLocalServiceUtil;\r
+import com.liferay.portal.service.RoleLocalServiceUtil;\r
+import com.liferay.portal.service.ServiceContext;\r
+import com.liferay.portal.service.ServiceContextFactory;\r
+import com.liferay.portal.service.ServiceContextThreadLocal;\r
+import com.liferay.portal.service.ThemeLocalServiceUtil;\r
+import com.liferay.portal.service.UserLocalServiceUtil;\r
+import com.liferay.portal.service.permission.GroupPermissionUtil;\r
+import com.liferay.portal.service.permission.LayoutPermissionUtil;\r
+import com.liferay.portal.service.permission.PortletPermissionUtil;\r
+import com.liferay.portal.theme.ThemeDisplay;\r
+import com.liferay.portal.theme.ThemeDisplayFactory;\r
+import com.liferay.portal.util.CookieKeys;\r
+import com.liferay.portal.util.LayoutClone;\r
+import com.liferay.portal.util.LayoutCloneFactory;\r
+import com.liferay.portal.util.PortalUtil;\r
+import com.liferay.portal.util.PortletCategoryKeys;\r
+import com.liferay.portal.util.PortletKeys;\r
+import com.liferay.portal.util.PrefsPropsUtil;\r
+import com.liferay.portal.util.PropsUtil;\r
+import com.liferay.portal.util.PropsValues;\r
+import com.liferay.portal.util.WebKeys;\r
+import com.liferay.portal.webserver.WebServerServletTokenUtil;\r
+import com.liferay.portlet.PortalPreferences;\r
+import com.liferay.portlet.PortletPreferencesFactoryUtil;\r
+import com.liferay.portlet.PortletURLImpl;\r
+import com.liferay.portlet.asset.model.AssetEntry;\r
+import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;\r
+import com.liferay.portlet.journal.NoSuchArticleException;\r
+import com.liferay.portlet.journal.model.JournalArticle;\r
+import com.liferay.portlet.journal.service.JournalArticleServiceUtil;\r
+import com.liferay.portlet.sites.util.SitesUtil;\r
+import com.pentila.entSavoie.communityInfos.model.CommunityInfos;\r
+import com.pentila.entSavoie.communityInfos.service.CommunityInfosLocalServiceUtil;\r
+\r
+import java.io.File;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Enumeration;\r
+import java.util.HashMap;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Locale;\r
+import java.util.Map;\r
+import java.util.TimeZone;\r
+\r
+import javax.portlet.PortletMode;\r
+import javax.portlet.PortletRequest;\r
+import javax.portlet.PortletURL;\r
+import javax.portlet.WindowState;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import javax.servlet.http.HttpSession;\r
+\r
+import org.apache.commons.lang.time.StopWatch;\r
+import org.apache.struts.Globals;\r
+\r
+/**\r
+ * @author Brian Wing Shun Chan\r
+ * @author Felix Ventero\r
+ * @author Jorge Ferrer\r
+ */\r
+public class ServicePreAction extends Action {\r
+\r
+ public ServicePreAction() {\r
+ initImportLARFiles();\r
+ }\r
+\r
+ public ThemeDisplay initThemeDisplay(\r
+ HttpServletRequest request, HttpServletResponse response)\r
+ throws Exception {\r
+\r
+ HttpSession session = request.getSession();\r
+\r
+ // Company\r
+\r
+ Company company = PortalUtil.getCompany(request);\r
+\r
+ long companyId = company.getCompanyId();\r
+\r
+ // CDN host\r
+\r
+ String cdnHost = PortalUtil.getCDNHost(request);\r
+\r
+ String dynamicResourcesCDNHost = StringPool.BLANK;\r
+\r
+ boolean cdnDynamicResourceEnabled =\r
+ PortalUtil.isCDNDynamicResourcesEnabled(request);\r
+\r
+ if (cdnDynamicResourceEnabled) {\r
+ dynamicResourcesCDNHost = cdnHost;\r
+ }\r
+\r
+ // Portal URL\r
+\r
+ String portalURL = PortalUtil.getPortalURL(request);\r
+\r
+ // Paths\r
+\r
+ String contextPath = PortalUtil.getPathContext();\r
+ String friendlyURLPrivateGroupPath =\r
+ PortalUtil.getPathFriendlyURLPrivateGroup();\r
+ String friendlyURLPrivateUserPath =\r
+ PortalUtil.getPathFriendlyURLPrivateUser();\r
+ String friendlyURLPublicPath = PortalUtil.getPathFriendlyURLPublic();\r
+ String imagePath = dynamicResourcesCDNHost.concat(\r
+ PortalUtil.getPathImage());\r
+ String mainPath = PortalUtil.getPathMain();\r
+\r
+ String i18nPath = (String)request.getAttribute(WebKeys.I18N_PATH);\r
+\r
+ if (Validator.isNotNull(i18nPath)) {\r
+ if (Validator.isNotNull(contextPath)) {\r
+ String i18nContextPath = contextPath.concat(i18nPath);\r
+\r
+ friendlyURLPrivateGroupPath = StringUtil.replaceFirst(\r
+ friendlyURLPrivateGroupPath, contextPath, i18nContextPath);\r
+ friendlyURLPrivateUserPath = StringUtil.replaceFirst(\r
+ friendlyURLPrivateUserPath, contextPath, i18nContextPath);\r
+ friendlyURLPublicPath = StringUtil.replaceFirst(\r
+ friendlyURLPublicPath, contextPath, i18nContextPath);\r
+ mainPath = StringUtil.replaceFirst(\r
+ mainPath, contextPath, i18nContextPath);\r
+ }\r
+ else {\r
+ friendlyURLPrivateGroupPath = i18nPath.concat(\r
+ friendlyURLPrivateGroupPath);\r
+ friendlyURLPrivateUserPath = i18nPath.concat(\r
+ friendlyURLPrivateUserPath);\r
+ friendlyURLPublicPath = i18nPath.concat(friendlyURLPublicPath);\r
+ mainPath = i18nPath.concat(mainPath);\r
+ }\r
+ }\r
+\r
+ // Company logo\r
+\r
+ StringBundler sb = new StringBundler(5);\r
+\r
+ sb.append(imagePath);\r
+ sb.append("/company_logo?img_id=");\r
+ sb.append(company.getLogoId());\r
+ sb.append("&t=");\r
+ sb.append(WebServerServletTokenUtil.getToken(company.getLogoId()));\r
+\r
+ String companyLogo = sb.toString();\r
+\r
+ int companyLogoHeight = 0;\r
+ int companyLogoWidth = 0;\r
+\r
+ Image companyLogoImage = ImageLocalServiceUtil.getCompanyLogo(\r
+ company.getLogoId());\r
+\r
+ if (companyLogoImage != null) {\r
+ companyLogoHeight = companyLogoImage.getHeight();\r
+ companyLogoWidth = companyLogoImage.getWidth();\r
+ }\r
+\r
+ String realCompanyLogo = companyLogo;\r
+ int realCompanyLogoHeight = companyLogoHeight;\r
+ int realCompanyLogoWidth = companyLogoWidth;\r
+\r
+ // User\r
+\r
+ User user = null;\r
+\r
+ try {\r
+ user = PortalUtil.getUser(request);\r
+ }\r
+ catch (NoSuchUserException nsue) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(nsue.getMessage());\r
+ }\r
+\r
+ long userId = PortalUtil.getUserId(request);\r
+\r
+ if (userId > 0) {\r
+ session.invalidate();\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ boolean signedIn = false;\r
+\r
+ if (user == null) {\r
+ user = company.getDefaultUser();\r
+ }\r
+ else if (!user.isDefaultUser()) {\r
+ signedIn = true;\r
+ }\r
+\r
+ if (PropsValues.BROWSER_CACHE_DISABLED ||\r
+ (PropsValues.BROWSER_CACHE_SIGNED_IN_DISABLED && signedIn)) {\r
+\r
+ response.setDateHeader(HttpHeaders.EXPIRES, 0);\r
+ response.setHeader(\r
+ HttpHeaders.CACHE_CONTROL,\r
+ HttpHeaders.CACHE_CONTROL_NO_CACHE_VALUE);\r
+ response.setHeader(\r
+ HttpHeaders.PRAGMA, HttpHeaders.PRAGMA_NO_CACHE_VALUE);\r
+ }\r
+\r
+ User realUser = user;\r
+\r
+ Long realUserId = (Long)session.getAttribute(WebKeys.USER_ID);\r
+\r
+ if (realUserId != null) {\r
+ if (user.getUserId() != realUserId.longValue()) {\r
+ realUser = UserLocalServiceUtil.getUserById(\r
+ realUserId.longValue());\r
+ }\r
+ }\r
+\r
+ String doAsUserId = ParamUtil.getString(request, "doAsUserId");\r
+ String doAsUserLanguageId = ParamUtil.getString(\r
+ request, "doAsUserLanguageId");\r
+ long doAsGroupId = ParamUtil.getLong(request, "doAsGroupId");\r
+\r
+ long refererPlid = ParamUtil.getLong(request, "refererPlid");\r
+\r
+ if (LayoutLocalServiceUtil.fetchLayout(refererPlid) == null) {\r
+ refererPlid = 0;\r
+ }\r
+\r
+ String controlPanelCategory = ParamUtil.getString(\r
+ request, "controlPanelCategory");\r
+\r
+ // Permission checker\r
+\r
+ PermissionChecker permissionChecker =\r
+ PermissionCheckerFactoryUtil.create(user);\r
+\r
+ PermissionThreadLocal.setPermissionChecker(permissionChecker);\r
+\r
+ // Locale\r
+\r
+ Locale locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);\r
+\r
+ if (Validator.isNotNull(doAsUserLanguageId)) {\r
+ locale = LocaleUtil.fromLanguageId(doAsUserLanguageId);\r
+ }\r
+\r
+ String i18nLanguageId = (String)request.getAttribute(\r
+ WebKeys.I18N_LANGUAGE_ID);\r
+\r
+ if (Validator.isNotNull(i18nLanguageId)) {\r
+ locale = LocaleUtil.fromLanguageId(i18nLanguageId);\r
+ }\r
+ else if (locale == null) {\r
+ if (signedIn) {\r
+ locale = user.getLocale();\r
+ }\r
+ else {\r
+\r
+ // User previously set their preferred language\r
+\r
+ String languageId = CookieKeys.getCookie(\r
+ request, CookieKeys.GUEST_LANGUAGE_ID, false);\r
+\r
+ if (Validator.isNotNull(languageId)) {\r
+ locale = LocaleUtil.fromLanguageId(languageId);\r
+ }\r
+\r
+ // Get locale from the request\r
+\r
+ if ((locale == null) && PropsValues.LOCALE_DEFAULT_REQUEST) {\r
+ Enumeration<Locale> locales = request.getLocales();\r
+\r
+ while (locales.hasMoreElements()) {\r
+ Locale requestLocale = locales.nextElement();\r
+\r
+ if (Validator.isNull(requestLocale.getCountry())) {\r
+\r
+ // Locales must contain a country code\r
+\r
+ requestLocale = LanguageUtil.getLocale(\r
+ requestLocale.getLanguage());\r
+ }\r
+\r
+ if (LanguageUtil.isAvailableLocale(requestLocale)) {\r
+ locale = requestLocale;\r
+\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ // Get locale from the default user\r
+\r
+ if (locale == null) {\r
+ locale = user.getLocale();\r
+ }\r
+\r
+ if (Validator.isNull(locale.getCountry())) {\r
+\r
+ // Locales must contain a country code\r
+\r
+ locale = LanguageUtil.getLocale(locale.getLanguage());\r
+ }\r
+\r
+ if (!LanguageUtil.isAvailableLocale(locale)) {\r
+ locale = user.getLocale();\r
+ }\r
+ }\r
+\r
+ session.setAttribute(Globals.LOCALE_KEY, locale);\r
+\r
+ LanguageUtil.updateCookie(request, response, locale);\r
+ }\r
+\r
+ // Cookie support\r
+\r
+ try {\r
+\r
+ // LEP-4069\r
+\r
+ CookieKeys.validateSupportCookie(request);\r
+ }\r
+ catch (Exception e) {\r
+ CookieKeys.addSupportCookie(request, response);\r
+ }\r
+\r
+ // Time zone\r
+\r
+ TimeZone timeZone = user.getTimeZone();\r
+\r
+ if (timeZone == null) {\r
+ timeZone = company.getTimeZone();\r
+ }\r
+\r
+ // Layouts\r
+\r
+ if (signedIn) {\r
+ updateUserLayouts(user);\r
+ }\r
+\r
+ Layout layout = null;\r
+ List<Layout> layouts = null;\r
+\r
+ long plid = ParamUtil.getLong(request, "p_l_id");\r
+\r
+ if (plid > 0) {\r
+ layout = LayoutLocalServiceUtil.getLayout(plid);\r
+\r
+ long sourceGroupId = ParamUtil.getLong(request, "p_v_l_s_g_id");\r
+\r
+ if ((sourceGroupId > 0) && (sourceGroupId != layout.getGroupId())) {\r
+ Group sourceGroup = GroupLocalServiceUtil.getGroup(\r
+ sourceGroupId);\r
+\r
+ if (layout.isPublicLayout() ||\r
+ SitesUtil.isUserGroupLayoutSetViewable(\r
+ permissionChecker, layout.getGroup())) {\r
+\r
+ layout = new VirtualLayout(layout, sourceGroup);\r
+ }\r
+ else {\r
+ layout = null;\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ long groupId = ParamUtil.getLong(request, "groupId");\r
+ boolean privateLayout = ParamUtil.getBoolean(\r
+ request, "privateLayout");\r
+ long layoutId = ParamUtil.getLong(request, "layoutId");\r
+\r
+ if ((groupId > 0) && (layoutId > 0)) {\r
+ layout = LayoutLocalServiceUtil.getLayout(\r
+ groupId, privateLayout, layoutId);\r
+ }\r
+ }\r
+\r
+ Boolean redirectToDefaultLayout = (Boolean)request.getAttribute(\r
+ WebKeys.REDIRECT_TO_DEFAULT_LAYOUT);\r
+\r
+ if (redirectToDefaultLayout == null) {\r
+ redirectToDefaultLayout = Boolean.FALSE;\r
+ }\r
+\r
+ if (layout != null) {\r
+ Group group = layout.getGroup();\r
+\r
+ if (!signedIn && PropsValues.AUTH_FORWARD_BY_REDIRECT) {\r
+ request.setAttribute(WebKeys.REQUESTED_LAYOUT, layout);\r
+ }\r
+\r
+ String ppid = ParamUtil.getString(request, "p_p_id");\r
+\r
+ if (Validator.isNull(controlPanelCategory) &&\r
+ Validator.isNotNull(ppid) &&\r
+ (LiferayWindowState.isPopUp(request) ||\r
+ LiferayWindowState.isExclusive(request))) {\r
+\r
+ controlPanelCategory =\r
+ _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX + ppid;\r
+ }\r
+\r
+ boolean viewableGroup = LayoutPermissionUtil.contains(\r
+ permissionChecker, layout, controlPanelCategory, true,\r
+ ActionKeys.VIEW);\r
+ boolean viewableStaging = GroupPermissionUtil.contains(\r
+ permissionChecker, group.getGroupId(), ActionKeys.VIEW_STAGING);\r
+\r
+ if (viewableStaging) {\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ layout.getGroupId(), layout.isPrivateLayout(),\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+ }\r
+ else if (!viewableGroup && group.isStagingGroup()) {\r
+ layout = null;\r
+ }\r
+ else if (!isLoginRequest(request) &&\r
+ (!viewableGroup ||\r
+ (!redirectToDefaultLayout &&\r
+ !LayoutPermissionUtil.contains(\r
+ permissionChecker, layout, false,\r
+ ActionKeys.VIEW)))) {\r
+\r
+ if (user.isDefaultUser() &&\r
+ PropsValues.AUTH_LOGIN_PROMPT_ENABLED) {\r
+\r
+ throw new PrincipalException("User is not authenticated");\r
+ }\r
+\r
+ sb = new StringBundler(6);\r
+\r
+ sb.append("User ");\r
+ sb.append(user.getUserId());\r
+ sb.append(" is not allowed to access the ");\r
+ sb.append(layout.isPrivateLayout() ? "private": "public");\r
+ sb.append(" pages of group ");\r
+ sb.append(layout.getGroupId());\r
+\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(sb.toString());\r
+ }\r
+\r
+ throw new NoSuchLayoutException(sb.toString());\r
+ }\r
+ else if (isLoginRequest(request) && !viewableGroup) {\r
+ layout = null;\r
+ }\r
+ else if (group.isLayoutPrototype()) {\r
+ layouts = new ArrayList<Layout>();\r
+ }\r
+ else {\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ layout.getGroupId(), layout.isPrivateLayout(),\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ if (!group.isControlPanel()) {\r
+ doAsGroupId = 0;\r
+ }\r
+ }\r
+ }\r
+\r
+ List<Layout> unfilteredLayouts = layouts;\r
+\r
+ if (layout == null) {\r
+ Object[] defaultLayout = getDefaultLayout(request, user, signedIn);\r
+\r
+ layout = (Layout)defaultLayout[0];\r
+ layouts = (List<Layout>)defaultLayout[1];\r
+\r
+ request.setAttribute(WebKeys.LAYOUT_DEFAULT, Boolean.TRUE);\r
+ }\r
+\r
+ Object[] viewableLayouts = getViewableLayouts(\r
+ request, user, permissionChecker, layout, layouts);\r
+\r
+ String layoutSetLogo = null;\r
+\r
+ layout = (Layout)viewableLayouts[0];\r
+ layouts = (List<Layout>)viewableLayouts[1];\r
+\r
+ Group group = null;\r
+\r
+ if (layout != null) {\r
+ group = layout.getGroup();\r
+\r
+ if (!group.isControlPanel()) {\r
+ rememberVisitedGroupIds(request, group.getGroupId());\r
+ }\r
+ }\r
+\r
+ LayoutTypePortlet layoutTypePortlet = null;\r
+\r
+ layouts = mergeAdditionalLayouts(\r
+ request, user, permissionChecker, layout, layouts);\r
+\r
+ LayoutSet layoutSet = null;\r
+\r
+ boolean hasCustomizeLayoutPermission = false;\r
+ boolean hasUpdateLayoutPermission = false;\r
+\r
+ boolean customizedView = SessionParamUtil.getBoolean(\r
+ request, "customized_view", true);\r
+\r
+ if (layout != null) {\r
+ hasCustomizeLayoutPermission = LayoutPermissionUtil.contains(\r
+ permissionChecker, layout, ActionKeys.CUSTOMIZE);\r
+ hasUpdateLayoutPermission = LayoutPermissionUtil.contains(\r
+ permissionChecker, layout, ActionKeys.UPDATE);\r
+\r
+ layoutSet = layout.getLayoutSet();\r
+\r
+ if (company.isSiteLogo()) {\r
+ long logoId = 0;\r
+\r
+ if (layoutSet.isLogo()) {\r
+ logoId = layoutSet.getLogoId();\r
+\r
+ if (logoId == 0) {\r
+ logoId = layoutSet.getLiveLogoId();\r
+ }\r
+ }\r
+ else {\r
+ LayoutSet siblingLayoutSet =\r
+ LayoutSetLocalServiceUtil.getLayoutSet(\r
+ layout.getGroupId(), !layout.isPrivateLayout());\r
+\r
+ if (siblingLayoutSet.isLogo()) {\r
+ logoId = siblingLayoutSet.getLogoId();\r
+ }\r
+ }\r
+\r
+ if (logoId > 0) {\r
+ sb = new StringBundler(5);\r
+\r
+ sb.append(imagePath);\r
+ sb.append("/layout_set_logo?img_id=");\r
+ sb.append(logoId);\r
+ sb.append("&t=");\r
+ sb.append(WebServerServletTokenUtil.getToken(logoId));\r
+\r
+ layoutSetLogo = sb.toString();\r
+\r
+ Image layoutSetLogoImage =\r
+ ImageLocalServiceUtil.getCompanyLogo(logoId);\r
+\r
+ companyLogo = layoutSetLogo;\r
+ companyLogoHeight = layoutSetLogoImage.getHeight();\r
+ companyLogoWidth = layoutSetLogoImage.getWidth();\r
+ }\r
+ }\r
+\r
+ plid = layout.getPlid();\r
+\r
+ // Updates to shared layouts are not reflected until the next time\r
+ // the user logs in because group layouts are cached in the session\r
+\r
+ layout = (Layout)layout.clone();\r
+\r
+ layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType();\r
+\r
+ boolean customizable = layoutTypePortlet.isCustomizable();\r
+\r
+ if (!customizable ||\r
+ (group.isLayoutPrototype() || group.isLayoutSetPrototype())) {\r
+\r
+ customizedView = false;\r
+ }\r
+\r
+ layoutTypePortlet.setCustomizedView(customizedView);\r
+ layoutTypePortlet.setUpdatePermission(hasUpdateLayoutPermission);\r
+\r
+ if (signedIn && customizable && customizedView &&\r
+ hasCustomizeLayoutPermission) {\r
+\r
+ PortalPreferences portalPreferences =\r
+ PortletPreferencesFactoryUtil.getPortalPreferences(\r
+ companyId, user.getUserId(), true);\r
+\r
+ layoutTypePortlet.setPortalPreferences(portalPreferences);\r
+ }\r
+\r
+ LayoutClone layoutClone = LayoutCloneFactory.getInstance();\r
+\r
+ if (layoutClone != null) {\r
+ String typeSettings = layoutClone.get(request, plid);\r
+\r
+ if (typeSettings != null) {\r
+ UnicodeProperties typeSettingsProperties =\r
+ new UnicodeProperties(true);\r
+\r
+ typeSettingsProperties.load(typeSettings);\r
+\r
+ String stateMax = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.STATE_MAX);\r
+ String stateMin = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.STATE_MIN);\r
+ String modeAbout = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_ABOUT);\r
+ String modeConfig = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_CONFIG);\r
+ String modeEdit = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_EDIT);\r
+ String modeEditDefaults =\r
+ typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_EDIT_DEFAULTS);\r
+ String modeEditGuest = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_EDIT_GUEST);\r
+ String modeHelp = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_HELP);\r
+ String modePreview = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_PREVIEW);\r
+ String modePrint = typeSettingsProperties.getProperty(\r
+ LayoutTypePortletConstants.MODE_PRINT);\r
+\r
+ layoutTypePortlet.setStateMax(stateMax);\r
+ layoutTypePortlet.setStateMin(stateMin);\r
+ layoutTypePortlet.setModeAbout(modeAbout);\r
+ layoutTypePortlet.setModeConfig(modeConfig);\r
+ layoutTypePortlet.setModeEdit(modeEdit);\r
+ layoutTypePortlet.setModeEditDefaults(modeEditDefaults);\r
+ layoutTypePortlet.setModeEditGuest(modeEditGuest);\r
+ layoutTypePortlet.setModeHelp(modeHelp);\r
+ layoutTypePortlet.setModePreview(modePreview);\r
+ layoutTypePortlet.setModePrint(modePrint);\r
+ }\r
+ }\r
+\r
+ request.setAttribute(WebKeys.LAYOUT, layout);\r
+ request.setAttribute(WebKeys.LAYOUTS, layouts);\r
+ }\r
+\r
+ // Scope\r
+\r
+ long scopeGroupId = PortalUtil.getScopeGroupId(request);\r
+\r
+ if ((scopeGroupId <= 0) && (doAsGroupId > 0)) {\r
+ scopeGroupId = doAsGroupId;\r
+ }\r
+\r
+ long parentGroupId = PortalUtil.getParentGroupId(scopeGroupId);\r
+\r
+ // Theme and color scheme\r
+\r
+ Theme theme = null;\r
+ ColorScheme colorScheme = null;\r
+\r
+ boolean wapTheme = BrowserSnifferUtil.isWap(request);\r
+\r
+ if ((layout != null) && group.isControlPanel()) {\r
+ String themeId = PrefsPropsUtil.getString(\r
+ companyId, PropsKeys.CONTROL_PANEL_LAYOUT_REGULAR_THEME_ID);\r
+ String colorSchemeId =\r
+ ColorSchemeImpl.getDefaultRegularColorSchemeId();\r
+\r
+ theme = ThemeLocalServiceUtil.getTheme(\r
+ companyId, themeId, wapTheme);\r
+ colorScheme = ThemeLocalServiceUtil.getColorScheme(\r
+ companyId, theme.getThemeId(), colorSchemeId, wapTheme);\r
+\r
+ if (!wapTheme && theme.isWapTheme()) {\r
+ theme = ThemeLocalServiceUtil.getTheme(\r
+ companyId,\r
+ PropsValues.CONTROL_PANEL_LAYOUT_REGULAR_THEME_ID, false);\r
+ colorScheme = ThemeLocalServiceUtil.getColorScheme(\r
+ companyId, theme.getThemeId(), colorSchemeId, false);\r
+ }\r
+\r
+ request.setAttribute(WebKeys.THEME, theme);\r
+ request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);\r
+ }\r
+\r
+ boolean themeCssFastLoad = SessionParamUtil.getBoolean(\r
+ request, "css_fast_load", PropsValues.THEME_CSS_FAST_LOAD);\r
+ boolean themeImagesFastLoad = SessionParamUtil.getBoolean(\r
+ request, "images_fast_load", PropsValues.THEME_IMAGES_FAST_LOAD);\r
+\r
+ boolean themeJsBarebone = PropsValues.JAVASCRIPT_BAREBONE_ENABLED;\r
+\r
+ if (themeJsBarebone) {\r
+ if (signedIn) {\r
+ themeJsBarebone = false;\r
+ }\r
+ }\r
+\r
+ boolean themeJsFastLoad = SessionParamUtil.getBoolean(\r
+ request, "js_fast_load", PropsValues.JAVASCRIPT_FAST_LOAD);\r
+\r
+ String lifecycle = ParamUtil.getString(request, "p_p_lifecycle", "0");\r
+\r
+ lifecycle = ParamUtil.getString(request, "p_t_lifecycle", lifecycle);\r
+\r
+ boolean isolated = ParamUtil.getBoolean(request, "p_p_isolated");\r
+\r
+ String facebookCanvasPageURL = (String)request.getAttribute(\r
+ WebKeys.FACEBOOK_CANVAS_PAGE_URL);\r
+\r
+ boolean widget = false;\r
+\r
+ Boolean widgetObj = (Boolean)request.getAttribute(WebKeys.WIDGET);\r
+\r
+ if (widgetObj != null) {\r
+ widget = widgetObj.booleanValue();\r
+ }\r
+\r
+ // Theme display\r
+\r
+ ThemeDisplay themeDisplay = ThemeDisplayFactory.create();\r
+\r
+ // Set the CDN host, portal URL, and Facebook application ID first\r
+ // because other methods (setLookAndFeel) depend on them being set\r
+\r
+ themeDisplay.setCDNHost(cdnHost);\r
+ themeDisplay.setCDNDynamicResourcesHost(dynamicResourcesCDNHost);\r
+ themeDisplay.setPortalURL(portalURL);\r
+ themeDisplay.setFacebookCanvasPageURL(facebookCanvasPageURL);\r
+ themeDisplay.setWidget(widget);\r
+\r
+ themeDisplay.setCompany(company);\r
+ themeDisplay.setCompanyLogo(companyLogo);\r
+ themeDisplay.setCompanyLogoHeight(companyLogoHeight);\r
+ themeDisplay.setCompanyLogoWidth(companyLogoWidth);\r
+ themeDisplay.setRealCompanyLogo(realCompanyLogo);\r
+ themeDisplay.setRealCompanyLogoHeight(realCompanyLogoHeight);\r
+ themeDisplay.setRealCompanyLogoWidth(realCompanyLogoWidth);\r
+ themeDisplay.setUser(user);\r
+ themeDisplay.setRealUser(realUser);\r
+ themeDisplay.setDoAsUserId(doAsUserId);\r
+ themeDisplay.setDoAsUserLanguageId(doAsUserLanguageId);\r
+ themeDisplay.setDoAsGroupId(doAsGroupId);\r
+ themeDisplay.setRefererPlid(refererPlid);\r
+ themeDisplay.setControlPanelCategory(controlPanelCategory);\r
+ themeDisplay.setLayoutSet(layoutSet);\r
+ themeDisplay.setLayoutSetLogo(layoutSetLogo);\r
+ themeDisplay.setLayout(layout);\r
+ themeDisplay.setLayouts(layouts);\r
+ themeDisplay.setUnfilteredLayouts(unfilteredLayouts);\r
+ themeDisplay.setPlid(plid);\r
+ themeDisplay.setLayoutTypePortlet(layoutTypePortlet);\r
+ themeDisplay.setScopeGroupId(scopeGroupId);\r
+ themeDisplay.setParentGroupId(parentGroupId);\r
+ themeDisplay.setSignedIn(signedIn);\r
+ themeDisplay.setPermissionChecker(permissionChecker);\r
+ themeDisplay.setLocale(locale);\r
+ themeDisplay.setLanguageId(LocaleUtil.toLanguageId(locale));\r
+ themeDisplay.setI18nLanguageId(i18nLanguageId);\r
+ themeDisplay.setI18nPath(i18nPath);\r
+ themeDisplay.setTimeZone(timeZone);\r
+ themeDisplay.setLookAndFeel(theme, colorScheme);\r
+ themeDisplay.setThemeCssFastLoad(themeCssFastLoad);\r
+ themeDisplay.setThemeImagesFastLoad(themeImagesFastLoad);\r
+ themeDisplay.setThemeJsBarebone(themeJsBarebone);\r
+ themeDisplay.setThemeJsFastLoad(themeJsFastLoad);\r
+ themeDisplay.setServerName(request.getServerName());\r
+ themeDisplay.setServerPort(request.getServerPort());\r
+ themeDisplay.setSecure(request.isSecure());\r
+ themeDisplay.setLifecycle(lifecycle);\r
+ themeDisplay.setLifecycleAction(lifecycle.equals("1"));\r
+ themeDisplay.setLifecycleRender(lifecycle.equals("0"));\r
+ themeDisplay.setLifecycleResource(lifecycle.equals("2"));\r
+ themeDisplay.setStateExclusive(LiferayWindowState.isExclusive(request));\r
+ themeDisplay.setStateMaximized(LiferayWindowState.isMaximized(request));\r
+ themeDisplay.setStatePopUp(LiferayWindowState.isPopUp(request));\r
+ themeDisplay.setIsolated(isolated);\r
+ themeDisplay.setPathApplet(contextPath.concat("/applets"));\r
+ themeDisplay.setPathCms(contextPath.concat("/cms"));\r
+ themeDisplay.setPathContext(contextPath);\r
+ themeDisplay.setPathFlash(contextPath.concat("/flash"));\r
+ themeDisplay.setPathFriendlyURLPrivateGroup(\r
+ friendlyURLPrivateGroupPath);\r
+ themeDisplay.setPathFriendlyURLPrivateUser(friendlyURLPrivateUserPath);\r
+ themeDisplay.setPathFriendlyURLPublic(friendlyURLPublicPath);\r
+ themeDisplay.setPathImage(imagePath);\r
+ themeDisplay.setPathJavaScript(contextPath.concat("/html/js"));\r
+ themeDisplay.setPathMain(mainPath);\r
+ themeDisplay.setPathSound(contextPath.concat("/html/sound"));\r
+\r
+ // Icons\r
+\r
+ themeDisplay.setShowAddContentIcon(false);\r
+ themeDisplay.setShowControlPanelIcon(signedIn);\r
+ themeDisplay.setShowHomeIcon(true);\r
+ themeDisplay.setShowMyAccountIcon(signedIn);\r
+ themeDisplay.setShowPageSettingsIcon(false);\r
+ themeDisplay.setShowPortalIcon(true);\r
+ themeDisplay.setShowSignInIcon(!signedIn);\r
+ themeDisplay.setShowSignOutIcon(signedIn);\r
+\r
+ boolean showSiteContentIcon = false;\r
+\r
+ long controlPanelPlid = 0;\r
+\r
+ if (signedIn) {\r
+ Group controlPanelGroup = GroupLocalServiceUtil.getGroup(\r
+ companyId, GroupConstants.CONTROL_PANEL);\r
+\r
+ controlPanelPlid = LayoutLocalServiceUtil.getDefaultPlid(\r
+ controlPanelGroup.getGroupId(), true);\r
+\r
+ List<Portlet> siteContentPortlets =\r
+ PortalUtil.getControlPanelPortlets(\r
+ PortletCategoryKeys.CONTENT, themeDisplay);\r
+\r
+ Portlet groupPagesPortlet = PortletLocalServiceUtil.getPortletById(\r
+ PortletKeys.GROUP_PAGES);\r
+\r
+ siteContentPortlets.remove(groupPagesPortlet);\r
+\r
+ Portlet siteMembershipsAdminPortlet =\r
+ PortletLocalServiceUtil.getPortletById(\r
+ PortletKeys.SITE_MEMBERSHIPS_ADMIN);\r
+\r
+ siteContentPortlets.remove(siteMembershipsAdminPortlet);\r
+\r
+ Portlet siteSettingsPortlet =\r
+ PortletLocalServiceUtil.getPortletById(\r
+ PortletKeys.SITE_SETTINGS);\r
+\r
+ siteContentPortlets.remove(siteSettingsPortlet);\r
+\r
+ showSiteContentIcon = PortletPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, controlPanelPlid,\r
+ siteContentPortlets, ActionKeys.VIEW);\r
+ }\r
+\r
+ themeDisplay.setShowSiteContentIcon(showSiteContentIcon);\r
+\r
+ themeDisplay.setShowStagingIcon(false);\r
+\r
+ // Session\r
+\r
+ if (PropsValues.SESSION_ENABLE_URL_WITH_SESSION_ID &&\r
+ !CookieKeys.hasSessionId(request)) {\r
+\r
+ themeDisplay.setAddSessionIdToURL(true);\r
+ themeDisplay.setSessionId(session.getId());\r
+ }\r
+\r
+ // URLs\r
+\r
+ String urlControlPanel = friendlyURLPrivateGroupPath.concat(\r
+ GroupConstants.CONTROL_PANEL_FRIENDLY_URL);\r
+\r
+ if (Validator.isNotNull(doAsUserId)) {\r
+ urlControlPanel = HttpUtil.addParameter(\r
+ urlControlPanel, "doAsUserId", doAsUserId);\r
+ }\r
+\r
+ if (scopeGroupId > 0) {\r
+ urlControlPanel = HttpUtil.addParameter(\r
+ urlControlPanel, "doAsGroupId", scopeGroupId);\r
+ }\r
+\r
+ if (refererPlid > 0) {\r
+ urlControlPanel = HttpUtil.addParameter(\r
+ urlControlPanel, "refererPlid", refererPlid);\r
+ }\r
+ else if (plid > 0) {\r
+ urlControlPanel = HttpUtil.addParameter(\r
+ urlControlPanel, "refererPlid", plid);\r
+ }\r
+\r
+ if (themeDisplay.isAddSessionIdToURL()) {\r
+ urlControlPanel = PortalUtil.getURLWithSessionId(\r
+ urlControlPanel, session.getId());\r
+ }\r
+\r
+ themeDisplay.setURLControlPanel(urlControlPanel);\r
+\r
+ String siteContentURL = urlControlPanel;\r
+\r
+ siteContentURL = HttpUtil.addParameter(\r
+ siteContentURL, "controlPanelCategory",\r
+ PortletCategoryKeys.CONTENT);\r
+\r
+ themeDisplay.setURLSiteContent(siteContentURL);\r
+\r
+ String currentURL = PortalUtil.getCurrentURL(request);\r
+\r
+ themeDisplay.setURLCurrent(currentURL);\r
+\r
+ String urlHome = PortalUtil.getHomeURL(request);\r
+\r
+ themeDisplay.setURLHome(urlHome);\r
+\r
+ if (layout != null) {\r
+ if (layout.isTypePortlet()) {\r
+ boolean freeformLayout =\r
+ layoutTypePortlet.getLayoutTemplateId().equals("freeform");\r
+\r
+ themeDisplay.setFreeformLayout(freeformLayout);\r
+\r
+ if (hasUpdateLayoutPermission) {\r
+ themeDisplay.setShowAddContentIconPermission(true);\r
+\r
+ if (!LiferayWindowState.isMaximized(request)) {\r
+ themeDisplay.setShowAddContentIcon(true);\r
+ }\r
+\r
+ themeDisplay.setShowLayoutTemplatesIcon(true);\r
+\r
+ if (!group.isUser()) {\r
+ themeDisplay.setShowPageCustomizationIcon(true);\r
+ }\r
+\r
+ themeDisplay.setURLAddContent(\r
+ "Liferay.LayoutConfiguration.toggle('".concat(\r
+ PortletKeys.LAYOUT_CONFIGURATION).concat("');"));\r
+\r
+ themeDisplay.setURLLayoutTemplates(\r
+ "Liferay.LayoutConfiguration.showTemplates();");\r
+ }\r
+\r
+ if (hasCustomizeLayoutPermission && customizedView) {\r
+ themeDisplay.setShowAddContentIconPermission(true);\r
+\r
+ if (!LiferayWindowState.isMaximized(request)) {\r
+ themeDisplay.setShowAddContentIcon(true);\r
+ }\r
+\r
+ themeDisplay.setURLAddContent(\r
+ "Liferay.LayoutConfiguration.toggle('".concat(\r
+ PortletKeys.LAYOUT_CONFIGURATION).concat("');"));\r
+ }\r
+ }\r
+\r
+ if (hasUpdateLayoutPermission) {\r
+ themeDisplay.setShowPageSettingsIcon(true);\r
+\r
+ LiferayPortletURL pageSettingsURL = new PortletURLImpl(\r
+ request, PortletKeys.LAYOUTS_ADMIN, controlPanelPlid,\r
+ PortletRequest.RENDER_PHASE);\r
+\r
+ pageSettingsURL.setControlPanelCategory(\r
+ _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +\r
+ PortletKeys.LAYOUTS_ADMIN);\r
+ pageSettingsURL.setDoAsGroupId(scopeGroupId);\r
+ pageSettingsURL.setParameter(\r
+ "struts_action", "/layouts_admin/edit_layouts");\r
+\r
+ if (layout.isPrivateLayout()) {\r
+ pageSettingsURL.setParameter("tabs1", "private-pages");\r
+ }\r
+ else {\r
+ pageSettingsURL.setParameter("tabs1", "public-pages");\r
+ }\r
+\r
+ pageSettingsURL.setParameter("closeRedirect", currentURL);\r
+ pageSettingsURL.setParameter(\r
+ "groupId", String.valueOf(scopeGroupId));\r
+ pageSettingsURL.setParameter("selPlid", String.valueOf(plid));\r
+ pageSettingsURL.setPortletMode(PortletMode.VIEW);\r
+ pageSettingsURL.setWindowState(LiferayWindowState.POP_UP);\r
+\r
+ themeDisplay.setURLPageSettings(pageSettingsURL);\r
+\r
+ boolean site = group.isSite();\r
+\r
+ if (!site && group.isStagingGroup()) {\r
+ Group liveGroup = group.getLiveGroup();\r
+\r
+ site = liveGroup.isSite();\r
+ }\r
+\r
+ if (site &&\r
+ GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId,\r
+ ActionKeys.ASSIGN_MEMBERS)) {\r
+\r
+ themeDisplay.setShowManageSiteMembershipsIcon(true);\r
+\r
+ LiferayPortletURL manageSiteMembershipsURL =\r
+ new PortletURLImpl(\r
+ request, PortletKeys.SITE_MEMBERSHIPS_ADMIN,\r
+ controlPanelPlid, PortletRequest.RENDER_PHASE);\r
+\r
+ manageSiteMembershipsURL.setControlPanelCategory(\r
+ _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +\r
+ PortletKeys.SITE_MEMBERSHIPS_ADMIN);\r
+ manageSiteMembershipsURL.setDoAsGroupId(scopeGroupId);\r
+ manageSiteMembershipsURL.setParameter(\r
+ "struts_action", "/sites_admin/edit_site_assignments");\r
+ manageSiteMembershipsURL.setParameter(\r
+ "groupId", String.valueOf(scopeGroupId));\r
+ manageSiteMembershipsURL.setParameter(\r
+ "selPlid", String.valueOf(plid));\r
+ manageSiteMembershipsURL.setPortletMode(PortletMode.VIEW);\r
+ manageSiteMembershipsURL.setWindowState(\r
+ LiferayWindowState.POP_UP);\r
+\r
+ themeDisplay.setURLManageSiteMemberships(\r
+ manageSiteMembershipsURL);\r
+ }\r
+ else {\r
+ themeDisplay.setShowManageSiteMembershipsIcon(false);\r
+ }\r
+ }\r
+\r
+ boolean hasAddLayoutGroupPermission = GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, ActionKeys.ADD_LAYOUT);\r
+ boolean hasAddLayoutLayoutPermission =\r
+ LayoutPermissionUtil.contains(\r
+ permissionChecker, layout, ActionKeys.ADD_LAYOUT);\r
+ boolean hasManageLayoutsGroupPermission =\r
+ GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, ActionKeys.MANAGE_LAYOUTS);\r
+ boolean hasManageStagingPermission = GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, ActionKeys.MANAGE_STAGING);\r
+ boolean hasPublishStagingPermission = GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, ActionKeys.PUBLISH_STAGING);\r
+ boolean hasUpdateGroupPermission = GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, ActionKeys.UPDATE);\r
+ boolean hasViewStagingPermission = GroupPermissionUtil.contains(\r
+ permissionChecker, scopeGroupId, ActionKeys.VIEW_STAGING);\r
+\r
+ if (!group.isControlPanel() && !group.isUser() &&\r
+ !group.isUserGroup() && hasUpdateGroupPermission) {\r
+\r
+ themeDisplay.setShowSiteSettingsIcon(true);\r
+\r
+ LiferayPortletURL siteSettingsURL = new PortletURLImpl(\r
+ request, PortletKeys.SITE_SETTINGS, controlPanelPlid,\r
+ PortletRequest.RENDER_PHASE);\r
+\r
+ siteSettingsURL.setControlPanelCategory(\r
+ _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +\r
+ PortletKeys.SITE_SETTINGS);\r
+ siteSettingsURL.setDoAsGroupId(scopeGroupId);\r
+ siteSettingsURL.setParameter(\r
+ "struts_action", "/sites_admin/edit_site");\r
+ siteSettingsURL.setParameter("closeRedirect", currentURL);\r
+ siteSettingsURL.setParameter(\r
+ "groupId", String.valueOf(scopeGroupId));\r
+ siteSettingsURL.setPortletMode(PortletMode.VIEW);\r
+ siteSettingsURL.setWindowState(LiferayWindowState.POP_UP);\r
+\r
+ themeDisplay.setURLSiteSettings(siteSettingsURL);\r
+ }\r
+\r
+ if (!group.isLayoutPrototype() &&\r
+ (hasAddLayoutGroupPermission || hasAddLayoutLayoutPermission ||\r
+ hasManageLayoutsGroupPermission || hasUpdateGroupPermission)) {\r
+\r
+ themeDisplay.setShowSiteMapSettingsIcon(true);\r
+\r
+ LiferayPortletURL siteMapSettingsURL = new PortletURLImpl(\r
+ request, PortletKeys.LAYOUTS_ADMIN, controlPanelPlid,\r
+ PortletRequest.RENDER_PHASE);\r
+\r
+ siteMapSettingsURL.setControlPanelCategory(\r
+ _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +\r
+ PortletKeys.LAYOUTS_ADMIN);\r
+ siteMapSettingsURL.setDoAsGroupId(scopeGroupId);\r
+ siteMapSettingsURL.setParameter(\r
+ "struts_action", "/layouts_admin/edit_layouts");\r
+\r
+ if (layout.isPrivateLayout()) {\r
+ siteMapSettingsURL.setParameter("tabs1", "private-pages");\r
+ }\r
+ else {\r
+ siteMapSettingsURL.setParameter("tabs1", "public-pages");\r
+ }\r
+\r
+ siteMapSettingsURL.setParameter("closeRedirect", currentURL);\r
+ siteMapSettingsURL.setParameter(\r
+ "groupId", String.valueOf(scopeGroupId));\r
+ siteMapSettingsURL.setPortletMode(PortletMode.VIEW);\r
+ siteMapSettingsURL.setWindowState(LiferayWindowState.POP_UP);\r
+\r
+ themeDisplay.setURLSiteMapSettings(siteMapSettingsURL);\r
+ }\r
+\r
+ if (group.hasStagingGroup() && !group.isStagingGroup()) {\r
+ themeDisplay.setShowAddContentIcon(false);\r
+ themeDisplay.setShowLayoutTemplatesIcon(false);\r
+ themeDisplay.setShowPageSettingsIcon(false);\r
+ themeDisplay.setURLPublishToLive(null);\r
+ }\r
+\r
+ if (group.isControlPanel()) {\r
+ themeDisplay.setShowPageSettingsIcon(false);\r
+ themeDisplay.setURLPublishToLive(null);\r
+ }\r
+\r
+ // LEP-4987\r
+\r
+ if (group.isStaged() || group.isStagingGroup()) {\r
+ if (hasManageStagingPermission || hasPublishStagingPermission ||\r
+ hasUpdateLayoutPermission || hasViewStagingPermission) {\r
+\r
+ themeDisplay.setShowStagingIcon(true);\r
+ }\r
+\r
+ if (hasPublishStagingPermission) {\r
+ PortletURL publishToLiveURL = new PortletURLImpl(\r
+ request, PortletKeys.LAYOUTS_ADMIN, plid,\r
+ PortletRequest.RENDER_PHASE);\r
+\r
+ publishToLiveURL.setParameter(\r
+ "struts_action", "/layouts_admin/publish_layouts");\r
+\r
+ if (layout.isPrivateLayout()) {\r
+ publishToLiveURL.setParameter("tabs1", "private-pages");\r
+ }\r
+ else {\r
+ publishToLiveURL.setParameter("tabs1", "public-pages");\r
+ }\r
+\r
+ publishToLiveURL.setParameter("pagesRedirect", currentURL);\r
+ publishToLiveURL.setParameter(\r
+ "groupId", String.valueOf(scopeGroupId));\r
+ publishToLiveURL.setParameter(\r
+ "selPlid", String.valueOf(plid));\r
+ publishToLiveURL.setPortletMode(PortletMode.VIEW);\r
+ publishToLiveURL.setWindowState(\r
+ LiferayWindowState.EXCLUSIVE);\r
+\r
+ themeDisplay.setURLPublishToLive(publishToLiveURL);\r
+ }\r
+ }\r
+\r
+ PortletURLImpl myAccountURL = new PortletURLImpl(\r
+ request, PortletKeys.MY_ACCOUNT, controlPanelPlid,\r
+ PortletRequest.RENDER_PHASE);\r
+\r
+ if (scopeGroupId > 0) {\r
+ myAccountURL.setDoAsGroupId(scopeGroupId);\r
+ }\r
+\r
+ myAccountURL.setParameter("struts_action", "/my_account/edit_user");\r
+ myAccountURL.setPortletMode(PortletMode.VIEW);\r
+\r
+ if (refererPlid > 0) {\r
+ myAccountURL.setRefererPlid(refererPlid);\r
+ }\r
+ else {\r
+ myAccountURL.setRefererPlid(plid);\r
+ }\r
+\r
+ myAccountURL.setWindowState(WindowState.MAXIMIZED);\r
+\r
+ themeDisplay.setURLMyAccount(myAccountURL);\r
+ }\r
+\r
+ if (!user.isActive() ||\r
+ (PrefsPropsUtil.getBoolean(\r
+ companyId, PropsKeys.TERMS_OF_USE_REQUIRED) &&\r
+ !user.isAgreedToTermsOfUse())) {\r
+\r
+ themeDisplay.setShowAddContentIcon(false);\r
+ themeDisplay.setShowMyAccountIcon(false);\r
+ themeDisplay.setShowPageSettingsIcon(false);\r
+ }\r
+\r
+ if (layout.isLayoutPrototypeLinkActive()) {\r
+ themeDisplay.setShowPageCustomizationIcon(false);\r
+ }\r
+\r
+ if (group.isLayoutPrototype()) {\r
+ themeDisplay.setShowControlPanelIcon(false);\r
+ themeDisplay.setShowHomeIcon(false);\r
+ themeDisplay.setShowManageSiteMembershipsIcon(false);\r
+ themeDisplay.setShowMyAccountIcon(false);\r
+ themeDisplay.setShowPageCustomizationIcon(false);\r
+ themeDisplay.setShowPageSettingsIcon(true);\r
+ themeDisplay.setShowPortalIcon(false);\r
+ themeDisplay.setShowSignInIcon(false);\r
+ themeDisplay.setShowSignOutIcon(false);\r
+ themeDisplay.setShowSiteContentIcon(false);\r
+ themeDisplay.setShowSiteSettingsIcon(false);\r
+ themeDisplay.setShowStagingIcon(false);\r
+ }\r
+\r
+ if (group.isLayoutSetPrototype()) {\r
+ themeDisplay.setShowPageCustomizationIcon(false);\r
+ themeDisplay.setShowSiteSettingsIcon(false);\r
+ }\r
+\r
+ if (group.hasStagingGroup() && !group.isStagingGroup()) {\r
+ themeDisplay.setShowLayoutTemplatesIcon(false);\r
+ themeDisplay.setShowPageCustomizationIcon(false);\r
+ themeDisplay.setShowPageSettingsIcon(false);\r
+ themeDisplay.setShowSiteContentIcon(false);\r
+ themeDisplay.setShowSiteMapSettingsIcon(false);\r
+ themeDisplay.setShowSiteSettingsIcon(false);\r
+ }\r
+\r
+ themeDisplay.setURLPortal(portalURL.concat(contextPath));\r
+\r
+ String urlSignIn = mainPath.concat("/portal/login");\r
+\r
+ if (layout != null) {\r
+ urlSignIn = HttpUtil.addParameter(\r
+ urlSignIn, "p_l_id", layout.getPlid());\r
+ }\r
+\r
+ themeDisplay.setURLSignIn(urlSignIn);\r
+\r
+ themeDisplay.setURLSignOut(mainPath.concat("/portal/logout"));\r
+\r
+ PortletURL updateManagerURL = new PortletURLImpl(\r
+ request, PortletKeys.UPDATE_MANAGER, plid,\r
+ PortletRequest.RENDER_PHASE);\r
+\r
+ updateManagerURL.setParameter("struts_action", "/update_manager/view");\r
+ updateManagerURL.setPortletMode(PortletMode.VIEW);\r
+ updateManagerURL.setWindowState(WindowState.MAXIMIZED);\r
+\r
+ themeDisplay.setURLUpdateManager(updateManagerURL);\r
+\r
+ return themeDisplay;\r
+ }\r
+\r
+ @Override\r
+ public void run(HttpServletRequest request, HttpServletResponse response)\r
+ throws ActionException {\r
+\r
+ StopWatch stopWatch = null;\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ stopWatch = new StopWatch();\r
+\r
+ stopWatch.start();\r
+ }\r
+\r
+ try {\r
+ servicePre(request, response);\r
+ }\r
+ catch (Exception e) {\r
+ throw new ActionException(e);\r
+ }\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Running takes " + stopWatch.getTime() + " ms");\r
+ }\r
+ }\r
+\r
+ protected void addDefaultLayoutsByLAR(\r
+ long userId, long groupId, boolean privateLayout, File larFile)\r
+ throws PortalException, SystemException {\r
+\r
+ Map<String, String[]> parameterMap = new HashMap<String, String[]>();\r
+\r
+ parameterMap.put(\r
+ PortletDataHandlerKeys.PERMISSIONS,\r
+ new String[] {Boolean.TRUE.toString()});\r
+ parameterMap.put(\r
+ PortletDataHandlerKeys.PORTLET_DATA,\r
+ new String[] {Boolean.TRUE.toString()});\r
+ parameterMap.put(\r
+ PortletDataHandlerKeys.PORTLET_DATA_CONTROL_DEFAULT,\r
+ new String[] {Boolean.TRUE.toString()});\r
+ parameterMap.put(\r
+ PortletDataHandlerKeys.PORTLET_SETUP,\r
+ new String[] {Boolean.TRUE.toString()});\r
+ parameterMap.put(\r
+ PortletDataHandlerKeys.USER_PERMISSIONS,\r
+ new String[] {Boolean.FALSE.toString()});\r
+\r
+ LayoutLocalServiceUtil.importLayouts(\r
+ userId, groupId, privateLayout, parameterMap, larFile);\r
+ }\r
+\r
+ protected void addDefaultUserPrivateLayoutByProperties(\r
+ long userId, long groupId)\r
+ throws PortalException, SystemException {\r
+\r
+ String friendlyURL = getFriendlyURL(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_FRIENDLY_URL);\r
+\r
+ ServiceContext serviceContext = new ServiceContext();\r
+\r
+ Layout layout = LayoutLocalServiceUtil.addLayout(\r
+ userId, groupId, true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_NAME, StringPool.BLANK,\r
+ StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL,\r
+ serviceContext);\r
+\r
+ LayoutTypePortlet layoutTypePortlet =\r
+ (LayoutTypePortlet)layout.getLayoutType();\r
+\r
+ layoutTypePortlet.setLayoutTemplateId(\r
+ 0, PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_TEMPLATE_ID, false);\r
+\r
+ for (int i = 0; i < 10; i++) {\r
+ String columnId = "column-" + i;\r
+ String portletIds = PropsUtil.get(\r
+ PropsKeys.DEFAULT_USER_PRIVATE_LAYOUT_COLUMN + i);\r
+\r
+ String[] portletIdsArray = StringUtil.split(portletIds);\r
+\r
+ layoutTypePortlet.addPortletIds(\r
+ 0, portletIdsArray, columnId, false);\r
+ }\r
+\r
+ LayoutLocalServiceUtil.updateLayout(\r
+ layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),\r
+ layout.getTypeSettings());\r
+\r
+ boolean updateLayoutSet = false;\r
+\r
+ LayoutSet layoutSet = layout.getLayoutSet();\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID)) {\r
+\r
+ layoutSet.setThemeId(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.\r
+ DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {\r
+\r
+ layoutSet.setColorSchemeId(\r
+ PropsValues.\r
+ DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID)) {\r
+\r
+ layoutSet.setWapThemeId(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID)) {\r
+\r
+ layoutSet.setWapColorSchemeId(\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (updateLayoutSet) {\r
+ LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);\r
+ }\r
+ }\r
+\r
+ protected void addDefaultUserPrivateLayouts(User user)\r
+ throws PortalException, SystemException {\r
+\r
+ Group userGroup = user.getGroup();\r
+\r
+ if (privateLARFile != null) {\r
+ addDefaultLayoutsByLAR(\r
+ user.getUserId(), userGroup.getGroupId(), true, privateLARFile);\r
+ }\r
+ else {\r
+ addDefaultUserPrivateLayoutByProperties(\r
+ user.getUserId(), userGroup.getGroupId());\r
+ }\r
+ }\r
+\r
+ protected void addDefaultUserPublicLayoutByProperties(\r
+ long userId, long groupId)\r
+ throws PortalException, SystemException {\r
+\r
+ String friendlyURL = getFriendlyURL(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_FRIENDLY_URL);\r
+\r
+ ServiceContext serviceContext = new ServiceContext();\r
+\r
+ Layout layout = LayoutLocalServiceUtil.addLayout(\r
+ userId, groupId, false, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_NAME, StringPool.BLANK,\r
+ StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL,\r
+ serviceContext);\r
+\r
+ LayoutTypePortlet layoutTypePortlet =\r
+ (LayoutTypePortlet)layout.getLayoutType();\r
+\r
+ layoutTypePortlet.setLayoutTemplateId(\r
+ 0, PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_TEMPLATE_ID, false);\r
+\r
+ for (int i = 0; i < 10; i++) {\r
+ String columnId = "column-" + i;\r
+ String portletIds = PropsUtil.get(\r
+ PropsKeys.DEFAULT_USER_PUBLIC_LAYOUT_COLUMN + i);\r
+\r
+ String[] portletIdsArray = StringUtil.split(portletIds);\r
+\r
+ layoutTypePortlet.addPortletIds(\r
+ 0, portletIdsArray, columnId, false);\r
+ }\r
+\r
+ LayoutLocalServiceUtil.updateLayout(\r
+ layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),\r
+ layout.getTypeSettings());\r
+\r
+ boolean updateLayoutSet = false;\r
+\r
+ LayoutSet layoutSet = layout.getLayoutSet();\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID)) {\r
+\r
+ layoutSet.setThemeId(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.\r
+ DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {\r
+\r
+ layoutSet.setColorSchemeId(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID)) {\r
+\r
+ layoutSet.setWapThemeId(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (Validator.isNotNull(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID)) {\r
+\r
+ layoutSet.setWapColorSchemeId(\r
+ PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID);\r
+\r
+ updateLayoutSet = true;\r
+ }\r
+\r
+ if (updateLayoutSet) {\r
+ LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);\r
+ }\r
+ }\r
+\r
+ protected void addDefaultUserPublicLayouts(User user)\r
+ throws PortalException, SystemException {\r
+\r
+ Group userGroup = user.getGroup();\r
+\r
+ if (publicLARFile != null) {\r
+ addDefaultLayoutsByLAR(\r
+ user.getUserId(), userGroup.getGroupId(), false, publicLARFile);\r
+ }\r
+ else {\r
+ addDefaultUserPublicLayoutByProperties(\r
+ user.getUserId(), userGroup.getGroupId());\r
+ }\r
+ }\r
+\r
+ protected void deleteDefaultUserPrivateLayouts(User user)\r
+ throws PortalException, SystemException {\r
+\r
+ Group userGroup = user.getGroup();\r
+\r
+ ServiceContext serviceContext = new ServiceContext();\r
+\r
+ LayoutLocalServiceUtil.deleteLayouts(\r
+ userGroup.getGroupId(), true, serviceContext);\r
+ }\r
+\r
+ protected void deleteDefaultUserPublicLayouts(User user)\r
+ throws PortalException, SystemException {\r
+\r
+ Group userGroup = user.getGroup();\r
+\r
+ ServiceContext serviceContext = new ServiceContext();\r
+\r
+ LayoutLocalServiceUtil.deleteLayouts(\r
+ userGroup.getGroupId(), false, serviceContext);\r
+ }\r
+\r
+ protected Object[] getDefaultLayout(\r
+ HttpServletRequest request, User user, boolean signedIn)\r
+ throws PortalException, SystemException {\r
+\r
+ // Check the virtual host\r
+\r
+ LayoutSet layoutSet = (LayoutSet)request.getAttribute(\r
+ WebKeys.VIRTUAL_HOST_LAYOUT_SET);\r
+\r
+ if (layoutSet != null) {\r
+ List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(\r
+ layoutSet.getGroupId(), layoutSet.isPrivateLayout(),\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ if (layouts.size() > 0) {\r
+ Layout layout = layouts.get(0);\r
+\r
+ return new Object[] {layout, layouts};\r
+ }\r
+ }\r
+\r
+ Layout layout = null;\r
+ List<Layout> layouts = null;\r
+\r
+ if (signedIn) {\r
+\r
+ // Check the user's personal layouts\r
+\r
+ Group userGroup = user.getGroup();\r
+\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ userGroup.getGroupId(), true,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ if (layouts.size() == 0) {\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ userGroup.getGroupId(), false,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+ }\r
+\r
+ if (layouts.size() > 0) {\r
+ layout = layouts.get(0);\r
+ }\r
+\r
+ // Check the user's sites\r
+\r
+ if (layout == null) {\r
+ LinkedHashMap<String, Object> groupParams =\r
+ new LinkedHashMap<String, Object>();\r
+\r
+ groupParams.put("usersGroups", new Long(user.getUserId()));\r
+\r
+ List<Group> groups = GroupLocalServiceUtil.search(\r
+ user.getCompanyId(), null, null, groupParams,\r
+ QueryUtil.ALL_POS, QueryUtil.ALL_POS);\r
+\r
+ for (Group group : groups) {\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ group.getGroupId(), true,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ if (layouts.size() == 0) {\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ group.getGroupId(), false,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+ }\r
+\r
+ if (layouts.size() > 0) {\r
+ layout = layouts.get(0);\r
+\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (layout == null) {\r
+\r
+ // Check the Guest site\r
+\r
+ Group guestGroup = GroupLocalServiceUtil.getGroup(\r
+ user.getCompanyId(), GroupConstants.GUEST);\r
+\r
+ layouts = LayoutLocalServiceUtil.getLayouts(\r
+ guestGroup.getGroupId(), false,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ if (layouts.size() > 0) {\r
+ layout = layouts.get(0);\r
+ }\r
+ }\r
+\r
+ return new Object[] {layout, layouts};\r
+ }\r
+\r
+ protected String getFriendlyURL(String friendlyURL) {\r
+ friendlyURL = GetterUtil.getString(friendlyURL);\r
+\r
+ return FriendlyURLNormalizerUtil.normalize(friendlyURL);\r
+ }\r
+\r
+ protected Object[] getViewableLayouts(\r
+ HttpServletRequest request, User user,\r
+ PermissionChecker permissionChecker, Layout layout,\r
+ List<Layout> layouts)\r
+ throws PortalException, SystemException {\r
+\r
+ if ((layouts == null) || layouts.isEmpty()) {\r
+ return new Object[] {layout, layouts};\r
+ }\r
+\r
+ Group group = layout.getGroup();\r
+\r
+ boolean hasViewLayoutPermission = false;\r
+ boolean hasViewStagingPermission =\r
+ (group.isStagingGroup() || group.isStagedRemotely()) &&\r
+ GroupPermissionUtil.contains(\r
+ permissionChecker, group.getGroupId(),\r
+ ActionKeys.VIEW_STAGING);\r
+\r
+ try {\r
+ if (LayoutPermissionUtil.contains(\r
+ permissionChecker, layout, false, ActionKeys.VIEW) ||\r
+ hasViewStagingPermission) {\r
+ \r
+ hasViewLayoutPermission = true;\r
+ }\r
+ } catch (Exception e){\r
+ System.out.println("Error com.liferay.portal.events.ServicePreAction --> l.1674");\r
+ }\r
+\r
+ List<Layout> accessibleLayouts = new ArrayList<Layout>();\r
+\r
+ for (int i = 0; i < layouts.size(); i++) {\r
+ Layout curLayout = layouts.get(i);\r
+\r
+ if (!curLayout.isHidden() &&\r
+ (LayoutPermissionUtil.contains(\r
+ permissionChecker, curLayout, false, ActionKeys.VIEW) ||\r
+ hasViewStagingPermission)) {\r
+\r
+ if (accessibleLayouts.isEmpty() && !hasViewLayoutPermission) {\r
+ layout = curLayout;\r
+ }\r
+\r
+ accessibleLayouts.add(curLayout);\r
+ }\r
+ }\r
+\r
+ if (accessibleLayouts.isEmpty()) {\r
+ layouts = null;\r
+\r
+ if (!hasViewLayoutPermission) {\r
+ SessionErrors.add(\r
+ request, LayoutPermissionException.class.getName());\r
+ }\r
+ }\r
+ else {\r
+ layouts = accessibleLayouts;\r
+ }\r
+\r
+ return new Object[] {layout, layouts};\r
+ }\r
+\r
+ protected Boolean hasPowerUserRole(User user) throws Exception {\r
+ return RoleLocalServiceUtil.hasUserRole(\r
+ user.getUserId(), user.getCompanyId(), RoleConstants.POWER_USER,\r
+ true);\r
+ }\r
+\r
+ protected void initImportLARFiles() {\r
+ String privateLARFileName =\r
+ PropsValues.DEFAULT_USER_PRIVATE_LAYOUTS_LAR;\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Reading private LAR file " + privateLARFileName);\r
+ }\r
+\r
+ if (Validator.isNotNull(privateLARFileName)) {\r
+ privateLARFile = new File(privateLARFileName);\r
+\r
+ if (!privateLARFile.exists()) {\r
+ _log.error(\r
+ "Private LAR file " + privateLARFile + " does not exist");\r
+\r
+ privateLARFile = null;\r
+ }\r
+ else {\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Using private LAR file " + privateLARFileName);\r
+ }\r
+ }\r
+ }\r
+\r
+ String publicLARFileName = PropsValues.DEFAULT_USER_PUBLIC_LAYOUTS_LAR;\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Reading public LAR file " + publicLARFileName);\r
+ }\r
+\r
+ if (Validator.isNotNull(publicLARFileName)) {\r
+ publicLARFile = new File(publicLARFileName);\r
+\r
+ if (!publicLARFile.exists()) {\r
+ _log.error(\r
+ "Public LAR file " + publicLARFile + " does not exist");\r
+\r
+ publicLARFile = null;\r
+ }\r
+ else {\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Using public LAR file " + publicLARFileName);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ protected boolean isLoginRequest(HttpServletRequest request) {\r
+ String requestURI = request.getRequestURI();\r
+\r
+ String mainPath = PortalUtil.getPathMain();\r
+\r
+ if (requestURI.startsWith(mainPath.concat("/portal/login"))) {\r
+ return true;\r
+ }\r
+ else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @deprecated\r
+ */\r
+ protected boolean isViewableCommunity(\r
+ User user, long groupId, boolean privateLayout,\r
+ PermissionChecker permissionChecker)\r
+ throws PortalException, SystemException {\r
+\r
+ return LayoutPermissionUtil.contains(\r
+ permissionChecker, groupId, privateLayout, 0, ActionKeys.VIEW);\r
+ }\r
+\r
+ /**\r
+ * @deprecated\r
+ */\r
+ protected boolean isViewableGroup(\r
+ User user, long groupId, boolean privateLayout, long layoutId,\r
+ String controlPanelCategory, PermissionChecker permissionChecker)\r
+ throws PortalException, SystemException {\r
+\r
+ /**************************\r
+ * MIGRATION MODIFICATION *\r
+ **************************/\r
+ Group group = GroupLocalServiceUtil.getGroup(groupId);\r
+ if (group.isRegularSite()) {\r
+ // HACK pour permettre de voir la communaute/site\r
+ CommunityInfos ci = CommunityInfosLocalServiceUtil.getCommunityInfosByGroupId(groupId);\r
+ if (ci.getPolitic()==2) {\r
+ // communaut� ouverte a l intranet\r
+ return true;\r
+ }\r
+ }\r
+\r
+ return LayoutPermissionUtil.contains(\r
+ permissionChecker, groupId, privateLayout, layoutId,\r
+ controlPanelCategory, ActionKeys.VIEW);\r
+ }\r
+\r
+ protected List<Layout> mergeAdditionalLayouts(\r
+ HttpServletRequest request, User user,\r
+ PermissionChecker permissionChecker, Layout layout,\r
+ List<Layout> layouts)\r
+ throws PortalException, SystemException {\r
+\r
+ if ((layout == null) || layout.isPrivateLayout()) {\r
+ return layouts;\r
+ }\r
+\r
+ long layoutGroupId = layout.getGroupId();\r
+\r
+ Group guestGroup = GroupLocalServiceUtil.getGroup(\r
+ user.getCompanyId(), GroupConstants.GUEST);\r
+\r
+ if (layoutGroupId != guestGroup.getGroupId()) {\r
+ Group layoutGroup = GroupLocalServiceUtil.getGroup(layoutGroupId);\r
+\r
+ UnicodeProperties typeSettingsProperties =\r
+ layoutGroup.getTypeSettingsProperties();\r
+\r
+ boolean mergeGuestPublicPages = GetterUtil.getBoolean(\r
+ typeSettingsProperties.getProperty("mergeGuestPublicPages"));\r
+\r
+ if (!mergeGuestPublicPages) {\r
+ return layouts;\r
+ }\r
+\r
+ List<Layout> guestLayouts = LayoutLocalServiceUtil.getLayouts(\r
+ guestGroup.getGroupId(), false,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ Object[] viewableLayouts = getViewableLayouts(\r
+ request, user, permissionChecker, layout, guestLayouts);\r
+\r
+ guestLayouts = (List<Layout>)viewableLayouts[1];\r
+\r
+ if (layouts == null) {\r
+ return guestLayouts;\r
+ }\r
+\r
+ layouts.addAll(0, guestLayouts);\r
+ }\r
+ else {\r
+ HttpSession session = request.getSession();\r
+\r
+ Long previousGroupId = (Long)session.getAttribute(\r
+ WebKeys.VISITED_GROUP_ID_PREVIOUS);\r
+\r
+ if ((previousGroupId != null) &&\r
+ (previousGroupId.longValue() != layoutGroupId)) {\r
+\r
+ Group previousGroup = null;\r
+\r
+ try {\r
+ previousGroup = GroupLocalServiceUtil.getGroup(\r
+ previousGroupId.longValue());\r
+ }\r
+ catch (NoSuchGroupException nsge) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(nsge);\r
+ }\r
+\r
+ return layouts;\r
+ }\r
+\r
+ UnicodeProperties typeSettingsProperties =\r
+ previousGroup.getTypeSettingsProperties();\r
+\r
+ boolean mergeGuestPublicPages = GetterUtil.getBoolean(\r
+ typeSettingsProperties.getProperty(\r
+ "mergeGuestPublicPages"));\r
+\r
+ if (!mergeGuestPublicPages) {\r
+ return layouts;\r
+ }\r
+\r
+ List<Layout> previousLayouts =\r
+ LayoutLocalServiceUtil.getLayouts(\r
+ previousGroupId.longValue(), false,\r
+ LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);\r
+\r
+ Object[] viewableLayouts = getViewableLayouts(\r
+ request, user, permissionChecker, layout, previousLayouts);\r
+\r
+ previousLayouts = (List<Layout>)viewableLayouts[1];\r
+\r
+ if (previousLayouts != null) {\r
+ layouts.addAll(previousLayouts);\r
+ }\r
+ }\r
+ }\r
+\r
+ return layouts;\r
+ }\r
+\r
+ protected void rememberVisitedGroupIds(\r
+ HttpServletRequest request, long currentGroupId) {\r
+\r
+ String requestURI = GetterUtil.getString(request.getRequestURI());\r
+\r
+ if (!requestURI.endsWith(_PATH_PORTAL_LAYOUT)) {\r
+ return;\r
+ }\r
+\r
+ HttpSession session = request.getSession();\r
+\r
+ Long recentGroupId = (Long)session.getAttribute(\r
+ WebKeys.VISITED_GROUP_ID_RECENT);\r
+\r
+ Long previousGroupId = (Long)session.getAttribute(\r
+ WebKeys.VISITED_GROUP_ID_PREVIOUS);\r
+\r
+ if (recentGroupId == null) {\r
+ recentGroupId = new Long(currentGroupId);\r
+\r
+ session.setAttribute(\r
+ WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);\r
+ }\r
+ else if (recentGroupId.longValue() != currentGroupId) {\r
+ previousGroupId = new Long(recentGroupId.longValue());\r
+\r
+ recentGroupId = new Long(currentGroupId);\r
+\r
+ session.setAttribute(\r
+ WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);\r
+\r
+ session.setAttribute(\r
+ WebKeys.VISITED_GROUP_ID_PREVIOUS, previousGroupId);\r
+ }\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Current group id " + currentGroupId);\r
+ _log.debug("Recent group id " + recentGroupId);\r
+ _log.debug("Previous group id " + previousGroupId);\r
+ }\r
+ }\r
+\r
+ protected void servicePre(\r
+ HttpServletRequest request, HttpServletResponse response)\r
+ throws Exception {\r
+\r
+ ThemeDisplay themeDisplay = initThemeDisplay(request, response);\r
+\r
+ if (themeDisplay == null) {\r
+ return;\r
+ }\r
+\r
+ request.setAttribute(WebKeys.THEME_DISPLAY, themeDisplay);\r
+\r
+ // Service context\r
+\r
+ ServiceContext serviceContext = ServiceContextFactory.getInstance(\r
+ request);\r
+\r
+ ServiceContextThreadLocal.pushServiceContext(serviceContext);\r
+\r
+ // Parallel render\r
+\r
+ boolean parallelRenderEnable = true;\r
+\r
+ Layout layout = themeDisplay.getLayout();\r
+\r
+ if (layout != null) {\r
+ LayoutTypePortlet layoutTypePortlet =\r
+ themeDisplay.getLayoutTypePortlet();\r
+\r
+ List<String> portletIds = layoutTypePortlet.getPortletIds();\r
+\r
+ if (portletIds.size() == 1) {\r
+ String portletId = portletIds.get(0);\r
+\r
+ Portlet portlet = PortletLocalServiceUtil.getPortletById(\r
+ portletId);\r
+\r
+ if ((portlet != null) && !portlet.isAjaxable()) {\r
+ parallelRenderEnable = false;\r
+ }\r
+ }\r
+ }\r
+\r
+ Boolean parallelRenderEnableObj = Boolean.valueOf(ParamUtil.getBoolean(\r
+ request, "p_p_parallel", parallelRenderEnable));\r
+\r
+ request.setAttribute(\r
+ WebKeys.PORTLET_PARALLEL_RENDER, parallelRenderEnableObj);\r
+\r
+ // Main Journal article\r
+\r
+ long mainJournalArticleId = ParamUtil.getLong(request, "p_j_a_id");\r
+\r
+ if (mainJournalArticleId > 0) {\r
+ try {\r
+ JournalArticle mainJournalArticle =\r
+ JournalArticleServiceUtil.getArticle(mainJournalArticleId);\r
+\r
+ AssetEntry layoutAssetEntry =\r
+ AssetEntryLocalServiceUtil.getEntry(\r
+ JournalArticle.class.getName(),\r
+ mainJournalArticle.getResourcePrimKey());\r
+\r
+ request.setAttribute(\r
+ WebKeys.LAYOUT_ASSET_ENTRY, layoutAssetEntry);\r
+ }\r
+ catch (NoSuchArticleException nsae) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(nsae.getMessage());\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ protected void updateUserLayouts(User user) throws Exception {\r
+ Boolean hasPowerUserRole = null;\r
+\r
+ // Private layouts\r
+\r
+ boolean addDefaultUserPrivateLayouts = false;\r
+\r
+ if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED &&\r
+ PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_AUTO_CREATE) {\r
+\r
+ addDefaultUserPrivateLayouts = true;\r
+\r
+ if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {\r
+ if (hasPowerUserRole == null) {\r
+ hasPowerUserRole = hasPowerUserRole(user);\r
+ }\r
+\r
+ if (!hasPowerUserRole.booleanValue()) {\r
+ addDefaultUserPrivateLayouts = false;\r
+ }\r
+ }\r
+ }\r
+\r
+ Boolean hasPrivateLayouts = null;\r
+\r
+ if (addDefaultUserPrivateLayouts) {\r
+ hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(user, true);\r
+\r
+ if (!hasPrivateLayouts) {\r
+ addDefaultUserPrivateLayouts(user);\r
+ }\r
+ }\r
+\r
+ boolean deleteDefaultUserPrivateLayouts = false;\r
+\r
+ if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED) {\r
+ deleteDefaultUserPrivateLayouts = true;\r
+ }\r
+ else if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {\r
+ if (hasPowerUserRole == null) {\r
+ hasPowerUserRole = hasPowerUserRole(user);\r
+ }\r
+\r
+ if (!hasPowerUserRole.booleanValue()) {\r
+ deleteDefaultUserPrivateLayouts = true;\r
+ }\r
+ }\r
+\r
+ if (deleteDefaultUserPrivateLayouts) {\r
+ if (hasPrivateLayouts == null) {\r
+ hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(\r
+ user, true);\r
+ }\r
+\r
+ if (hasPrivateLayouts) {\r
+ deleteDefaultUserPrivateLayouts(user);\r
+ }\r
+ }\r
+\r
+ // Public pages\r
+\r
+ boolean addDefaultUserPublicLayouts = false;\r
+\r
+ if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED &&\r
+ PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_AUTO_CREATE) {\r
+\r
+ addDefaultUserPublicLayouts = true;\r
+\r
+ if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {\r
+ if (hasPowerUserRole == null) {\r
+ hasPowerUserRole = hasPowerUserRole(user);\r
+ }\r
+\r
+ if (!hasPowerUserRole.booleanValue()) {\r
+ addDefaultUserPublicLayouts = false;\r
+ }\r
+ }\r
+ }\r
+\r
+ Boolean hasPublicLayouts = null;\r
+\r
+ if (addDefaultUserPublicLayouts) {\r
+ hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(user, false);\r
+\r
+ if (!hasPublicLayouts) {\r
+ addDefaultUserPublicLayouts(user);\r
+ }\r
+ }\r
+\r
+ boolean deleteDefaultUserPublicLayouts = false;\r
+\r
+ if (!PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED) {\r
+ deleteDefaultUserPublicLayouts = true;\r
+ }\r
+ else if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {\r
+ if (hasPowerUserRole == null) {\r
+ hasPowerUserRole = hasPowerUserRole(user);\r
+ }\r
+\r
+ if (!hasPowerUserRole.booleanValue()) {\r
+ deleteDefaultUserPublicLayouts = true;\r
+ }\r
+ }\r
+\r
+ if (deleteDefaultUserPublicLayouts) {\r
+ if (hasPublicLayouts == null) {\r
+ hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(\r
+ user, false);\r
+ }\r
+\r
+ if (hasPublicLayouts) {\r
+ deleteDefaultUserPublicLayouts(user);\r
+ }\r
+ }\r
+ }\r
+\r
+ protected File privateLARFile;\r
+ protected File publicLARFile;\r
+\r
+ private static final String _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX =\r
+ "portlet_";\r
+\r
+ private static final String _PATH_PORTAL_LAYOUT = "/portal/layout";\r
+\r
+ private static Log _log = LogFactoryUtil.getLog(ServicePreAction.class);\r
+\r
+}
\ No newline at end of file