2 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
\r
4 * This library is free software; you can redistribute it and/or modify it under
\r
5 * the terms of the GNU Lesser General Public License as published by the Free
\r
6 * Software Foundation; either version 2.1 of the License, or (at your option)
\r
9 * This library is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
\r
15 package com.liferay.portal.events;
\r
17 import com.liferay.portal.LayoutPermissionException;
\r
18 import com.liferay.portal.NoSuchGroupException;
\r
19 import com.liferay.portal.NoSuchLayoutException;
\r
20 import com.liferay.portal.NoSuchUserException;
\r
21 import com.liferay.portal.kernel.dao.orm.QueryUtil;
\r
22 import com.liferay.portal.kernel.events.Action;
\r
23 import com.liferay.portal.kernel.events.ActionException;
\r
24 import com.liferay.portal.kernel.exception.PortalException;
\r
25 import com.liferay.portal.kernel.exception.SystemException;
\r
26 import com.liferay.portal.kernel.language.LanguageUtil;
\r
27 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
\r
28 import com.liferay.portal.kernel.log.Log;
\r
29 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
30 import com.liferay.portal.kernel.portlet.LiferayPortletURL;
\r
31 import com.liferay.portal.kernel.portlet.LiferayWindowState;
\r
32 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
\r
33 import com.liferay.portal.kernel.servlet.HttpHeaders;
\r
34 import com.liferay.portal.kernel.servlet.SessionErrors;
\r
35 import com.liferay.portal.kernel.util.FriendlyURLNormalizerUtil;
\r
36 import com.liferay.portal.kernel.util.GetterUtil;
\r
37 import com.liferay.portal.kernel.util.HttpUtil;
\r
38 import com.liferay.portal.kernel.util.LocaleUtil;
\r
39 import com.liferay.portal.kernel.util.ParamUtil;
\r
40 import com.liferay.portal.kernel.util.PropsKeys;
\r
41 import com.liferay.portal.kernel.util.SessionParamUtil;
\r
42 import com.liferay.portal.kernel.util.StringBundler;
\r
43 import com.liferay.portal.kernel.util.StringPool;
\r
44 import com.liferay.portal.kernel.util.StringUtil;
\r
45 import com.liferay.portal.kernel.util.UnicodeProperties;
\r
46 import com.liferay.portal.kernel.util.Validator;
\r
47 import com.liferay.portal.model.ColorScheme;
\r
48 import com.liferay.portal.model.Company;
\r
49 import com.liferay.portal.model.Group;
\r
50 import com.liferay.portal.model.GroupConstants;
\r
51 import com.liferay.portal.model.Image;
\r
52 import com.liferay.portal.model.Layout;
\r
53 import com.liferay.portal.model.LayoutConstants;
\r
54 import com.liferay.portal.model.LayoutSet;
\r
55 import com.liferay.portal.model.LayoutTypePortlet;
\r
56 import com.liferay.portal.model.LayoutTypePortletConstants;
\r
57 import com.liferay.portal.model.Portlet;
\r
58 import com.liferay.portal.model.RoleConstants;
\r
59 import com.liferay.portal.model.Theme;
\r
60 import com.liferay.portal.model.User;
\r
61 import com.liferay.portal.model.impl.ColorSchemeImpl;
\r
62 import com.liferay.portal.model.impl.VirtualLayout;
\r
63 import com.liferay.portal.security.auth.PrincipalException;
\r
64 import com.liferay.portal.security.permission.ActionKeys;
\r
65 import com.liferay.portal.security.permission.PermissionChecker;
\r
66 import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
\r
67 import com.liferay.portal.security.permission.PermissionThreadLocal;
\r
68 import com.liferay.portal.service.GroupLocalServiceUtil;
\r
69 import com.liferay.portal.service.ImageLocalServiceUtil;
\r
70 import com.liferay.portal.service.LayoutLocalServiceUtil;
\r
71 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
\r
72 import com.liferay.portal.service.PortletLocalServiceUtil;
\r
73 import com.liferay.portal.service.RoleLocalServiceUtil;
\r
74 import com.liferay.portal.service.ServiceContext;
\r
75 import com.liferay.portal.service.ServiceContextFactory;
\r
76 import com.liferay.portal.service.ServiceContextThreadLocal;
\r
77 import com.liferay.portal.service.ThemeLocalServiceUtil;
\r
78 import com.liferay.portal.service.UserLocalServiceUtil;
\r
79 import com.liferay.portal.service.permission.GroupPermissionUtil;
\r
80 import com.liferay.portal.service.permission.LayoutPermissionUtil;
\r
81 import com.liferay.portal.service.permission.PortletPermissionUtil;
\r
82 import com.liferay.portal.theme.ThemeDisplay;
\r
83 import com.liferay.portal.theme.ThemeDisplayFactory;
\r
84 import com.liferay.portal.util.CookieKeys;
\r
85 import com.liferay.portal.util.LayoutClone;
\r
86 import com.liferay.portal.util.LayoutCloneFactory;
\r
87 import com.liferay.portal.util.PortalUtil;
\r
88 import com.liferay.portal.util.PortletCategoryKeys;
\r
89 import com.liferay.portal.util.PortletKeys;
\r
90 import com.liferay.portal.util.PrefsPropsUtil;
\r
91 import com.liferay.portal.util.PropsUtil;
\r
92 import com.liferay.portal.util.PropsValues;
\r
93 import com.liferay.portal.util.WebKeys;
\r
94 import com.liferay.portal.webserver.WebServerServletTokenUtil;
\r
95 import com.liferay.portlet.PortalPreferences;
\r
96 import com.liferay.portlet.PortletPreferencesFactoryUtil;
\r
97 import com.liferay.portlet.PortletURLImpl;
\r
98 import com.liferay.portlet.asset.model.AssetEntry;
\r
99 import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
\r
100 import com.liferay.portlet.journal.NoSuchArticleException;
\r
101 import com.liferay.portlet.journal.model.JournalArticle;
\r
102 import com.liferay.portlet.journal.service.JournalArticleServiceUtil;
\r
103 import com.liferay.portlet.sites.util.SitesUtil;
\r
104 import com.pentila.entSavoie.communityInfos.model.CommunityInfos;
\r
105 import com.pentila.entSavoie.communityInfos.service.CommunityInfosLocalServiceUtil;
\r
107 import java.io.File;
\r
109 import java.util.ArrayList;
\r
110 import java.util.Enumeration;
\r
111 import java.util.HashMap;
\r
112 import java.util.LinkedHashMap;
\r
113 import java.util.List;
\r
114 import java.util.Locale;
\r
115 import java.util.Map;
\r
116 import java.util.TimeZone;
\r
118 import javax.portlet.PortletMode;
\r
119 import javax.portlet.PortletRequest;
\r
120 import javax.portlet.PortletURL;
\r
121 import javax.portlet.WindowState;
\r
123 import javax.servlet.http.HttpServletRequest;
\r
124 import javax.servlet.http.HttpServletResponse;
\r
125 import javax.servlet.http.HttpSession;
\r
127 import org.apache.commons.lang.time.StopWatch;
\r
128 import org.apache.struts.Globals;
\r
131 * @author Brian Wing Shun Chan
\r
132 * @author Felix Ventero
\r
133 * @author Jorge Ferrer
\r
135 public class ServicePreAction extends Action {
\r
137 public ServicePreAction() {
\r
138 initImportLARFiles();
\r
141 public ThemeDisplay initThemeDisplay(
\r
142 HttpServletRequest request, HttpServletResponse response)
\r
145 HttpSession session = request.getSession();
\r
149 Company company = PortalUtil.getCompany(request);
\r
151 long companyId = company.getCompanyId();
\r
155 String cdnHost = PortalUtil.getCDNHost(request);
\r
157 String dynamicResourcesCDNHost = StringPool.BLANK;
\r
159 boolean cdnDynamicResourceEnabled =
\r
160 PortalUtil.isCDNDynamicResourcesEnabled(request);
\r
162 if (cdnDynamicResourceEnabled) {
\r
163 dynamicResourcesCDNHost = cdnHost;
\r
168 String portalURL = PortalUtil.getPortalURL(request);
\r
172 String contextPath = PortalUtil.getPathContext();
\r
173 String friendlyURLPrivateGroupPath =
\r
174 PortalUtil.getPathFriendlyURLPrivateGroup();
\r
175 String friendlyURLPrivateUserPath =
\r
176 PortalUtil.getPathFriendlyURLPrivateUser();
\r
177 String friendlyURLPublicPath = PortalUtil.getPathFriendlyURLPublic();
\r
178 String imagePath = dynamicResourcesCDNHost.concat(
\r
179 PortalUtil.getPathImage());
\r
180 String mainPath = PortalUtil.getPathMain();
\r
182 String i18nPath = (String)request.getAttribute(WebKeys.I18N_PATH);
\r
184 if (Validator.isNotNull(i18nPath)) {
\r
185 if (Validator.isNotNull(contextPath)) {
\r
186 String i18nContextPath = contextPath.concat(i18nPath);
\r
188 friendlyURLPrivateGroupPath = StringUtil.replaceFirst(
\r
189 friendlyURLPrivateGroupPath, contextPath, i18nContextPath);
\r
190 friendlyURLPrivateUserPath = StringUtil.replaceFirst(
\r
191 friendlyURLPrivateUserPath, contextPath, i18nContextPath);
\r
192 friendlyURLPublicPath = StringUtil.replaceFirst(
\r
193 friendlyURLPublicPath, contextPath, i18nContextPath);
\r
194 mainPath = StringUtil.replaceFirst(
\r
195 mainPath, contextPath, i18nContextPath);
\r
198 friendlyURLPrivateGroupPath = i18nPath.concat(
\r
199 friendlyURLPrivateGroupPath);
\r
200 friendlyURLPrivateUserPath = i18nPath.concat(
\r
201 friendlyURLPrivateUserPath);
\r
202 friendlyURLPublicPath = i18nPath.concat(friendlyURLPublicPath);
\r
203 mainPath = i18nPath.concat(mainPath);
\r
209 StringBundler sb = new StringBundler(5);
\r
211 sb.append(imagePath);
\r
212 sb.append("/company_logo?img_id=");
\r
213 sb.append(company.getLogoId());
\r
215 sb.append(WebServerServletTokenUtil.getToken(company.getLogoId()));
\r
217 String companyLogo = sb.toString();
\r
219 int companyLogoHeight = 0;
\r
220 int companyLogoWidth = 0;
\r
222 Image companyLogoImage = ImageLocalServiceUtil.getCompanyLogo(
\r
223 company.getLogoId());
\r
225 if (companyLogoImage != null) {
\r
226 companyLogoHeight = companyLogoImage.getHeight();
\r
227 companyLogoWidth = companyLogoImage.getWidth();
\r
230 String realCompanyLogo = companyLogo;
\r
231 int realCompanyLogoHeight = companyLogoHeight;
\r
232 int realCompanyLogoWidth = companyLogoWidth;
\r
239 user = PortalUtil.getUser(request);
\r
241 catch (NoSuchUserException nsue) {
\r
242 if (_log.isWarnEnabled()) {
\r
243 _log.warn(nsue.getMessage());
\r
246 long userId = PortalUtil.getUserId(request);
\r
249 session.invalidate();
\r
255 boolean signedIn = false;
\r
257 if (user == null) {
\r
258 user = company.getDefaultUser();
\r
260 else if (!user.isDefaultUser()) {
\r
264 if (PropsValues.BROWSER_CACHE_DISABLED ||
\r
265 (PropsValues.BROWSER_CACHE_SIGNED_IN_DISABLED && signedIn)) {
\r
267 response.setDateHeader(HttpHeaders.EXPIRES, 0);
\r
268 response.setHeader(
\r
269 HttpHeaders.CACHE_CONTROL,
\r
270 HttpHeaders.CACHE_CONTROL_NO_CACHE_VALUE);
\r
271 response.setHeader(
\r
272 HttpHeaders.PRAGMA, HttpHeaders.PRAGMA_NO_CACHE_VALUE);
\r
275 User realUser = user;
\r
277 Long realUserId = (Long)session.getAttribute(WebKeys.USER_ID);
\r
279 if (realUserId != null) {
\r
280 if (user.getUserId() != realUserId.longValue()) {
\r
281 realUser = UserLocalServiceUtil.getUserById(
\r
282 realUserId.longValue());
\r
286 String doAsUserId = ParamUtil.getString(request, "doAsUserId");
\r
287 String doAsUserLanguageId = ParamUtil.getString(
\r
288 request, "doAsUserLanguageId");
\r
289 long doAsGroupId = ParamUtil.getLong(request, "doAsGroupId");
\r
291 long refererPlid = ParamUtil.getLong(request, "refererPlid");
\r
293 if (LayoutLocalServiceUtil.fetchLayout(refererPlid) == null) {
\r
297 String controlPanelCategory = ParamUtil.getString(
\r
298 request, "controlPanelCategory");
\r
300 // Permission checker
\r
302 PermissionChecker permissionChecker =
\r
303 PermissionCheckerFactoryUtil.create(user);
\r
305 PermissionThreadLocal.setPermissionChecker(permissionChecker);
\r
309 Locale locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);
\r
311 if (Validator.isNotNull(doAsUserLanguageId)) {
\r
312 locale = LocaleUtil.fromLanguageId(doAsUserLanguageId);
\r
315 String i18nLanguageId = (String)request.getAttribute(
\r
316 WebKeys.I18N_LANGUAGE_ID);
\r
318 if (Validator.isNotNull(i18nLanguageId)) {
\r
319 locale = LocaleUtil.fromLanguageId(i18nLanguageId);
\r
321 else if (locale == null) {
\r
323 locale = user.getLocale();
\r
327 // User previously set their preferred language
\r
329 String languageId = CookieKeys.getCookie(
\r
330 request, CookieKeys.GUEST_LANGUAGE_ID, false);
\r
332 if (Validator.isNotNull(languageId)) {
\r
333 locale = LocaleUtil.fromLanguageId(languageId);
\r
336 // Get locale from the request
\r
338 if ((locale == null) && PropsValues.LOCALE_DEFAULT_REQUEST) {
\r
339 Enumeration<Locale> locales = request.getLocales();
\r
341 while (locales.hasMoreElements()) {
\r
342 Locale requestLocale = locales.nextElement();
\r
344 if (Validator.isNull(requestLocale.getCountry())) {
\r
346 // Locales must contain a country code
\r
348 requestLocale = LanguageUtil.getLocale(
\r
349 requestLocale.getLanguage());
\r
352 if (LanguageUtil.isAvailableLocale(requestLocale)) {
\r
353 locale = requestLocale;
\r
360 // Get locale from the default user
\r
362 if (locale == null) {
\r
363 locale = user.getLocale();
\r
366 if (Validator.isNull(locale.getCountry())) {
\r
368 // Locales must contain a country code
\r
370 locale = LanguageUtil.getLocale(locale.getLanguage());
\r
373 if (!LanguageUtil.isAvailableLocale(locale)) {
\r
374 locale = user.getLocale();
\r
378 session.setAttribute(Globals.LOCALE_KEY, locale);
\r
380 LanguageUtil.updateCookie(request, response, locale);
\r
389 CookieKeys.validateSupportCookie(request);
\r
391 catch (Exception e) {
\r
392 CookieKeys.addSupportCookie(request, response);
\r
397 TimeZone timeZone = user.getTimeZone();
\r
399 if (timeZone == null) {
\r
400 timeZone = company.getTimeZone();
\r
406 updateUserLayouts(user);
\r
409 Layout layout = null;
\r
410 List<Layout> layouts = null;
\r
412 long plid = ParamUtil.getLong(request, "p_l_id");
\r
415 layout = LayoutLocalServiceUtil.getLayout(plid);
\r
417 long sourceGroupId = ParamUtil.getLong(request, "p_v_l_s_g_id");
\r
419 if ((sourceGroupId > 0) && (sourceGroupId != layout.getGroupId())) {
\r
420 Group sourceGroup = GroupLocalServiceUtil.getGroup(
\r
423 if (layout.isPublicLayout() ||
\r
424 SitesUtil.isUserGroupLayoutSetViewable(
\r
425 permissionChecker, layout.getGroup())) {
\r
427 layout = new VirtualLayout(layout, sourceGroup);
\r
435 long groupId = ParamUtil.getLong(request, "groupId");
\r
436 boolean privateLayout = ParamUtil.getBoolean(
\r
437 request, "privateLayout");
\r
438 long layoutId = ParamUtil.getLong(request, "layoutId");
\r
440 if ((groupId > 0) && (layoutId > 0)) {
\r
441 layout = LayoutLocalServiceUtil.getLayout(
\r
442 groupId, privateLayout, layoutId);
\r
446 Boolean redirectToDefaultLayout = (Boolean)request.getAttribute(
\r
447 WebKeys.REDIRECT_TO_DEFAULT_LAYOUT);
\r
449 if (redirectToDefaultLayout == null) {
\r
450 redirectToDefaultLayout = Boolean.FALSE;
\r
453 if (layout != null) {
\r
454 Group group = layout.getGroup();
\r
456 if (!signedIn && PropsValues.AUTH_FORWARD_BY_REDIRECT) {
\r
457 request.setAttribute(WebKeys.REQUESTED_LAYOUT, layout);
\r
460 String ppid = ParamUtil.getString(request, "p_p_id");
\r
462 if (Validator.isNull(controlPanelCategory) &&
\r
463 Validator.isNotNull(ppid) &&
\r
464 (LiferayWindowState.isPopUp(request) ||
\r
465 LiferayWindowState.isExclusive(request))) {
\r
467 controlPanelCategory =
\r
468 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX + ppid;
\r
471 boolean viewableGroup = LayoutPermissionUtil.contains(
\r
472 permissionChecker, layout, controlPanelCategory, true,
\r
474 boolean viewableStaging = GroupPermissionUtil.contains(
\r
475 permissionChecker, group.getGroupId(), ActionKeys.VIEW_STAGING);
\r
477 if (viewableStaging) {
\r
478 layouts = LayoutLocalServiceUtil.getLayouts(
\r
479 layout.getGroupId(), layout.isPrivateLayout(),
\r
480 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
482 else if (!viewableGroup && group.isStagingGroup()) {
\r
485 else if (!isLoginRequest(request) &&
\r
487 (!redirectToDefaultLayout &&
\r
488 !LayoutPermissionUtil.contains(
\r
489 permissionChecker, layout, false,
\r
490 ActionKeys.VIEW)))) {
\r
492 if (user.isDefaultUser() &&
\r
493 PropsValues.AUTH_LOGIN_PROMPT_ENABLED) {
\r
495 throw new PrincipalException("User is not authenticated");
\r
498 sb = new StringBundler(6);
\r
500 sb.append("User ");
\r
501 sb.append(user.getUserId());
\r
502 sb.append(" is not allowed to access the ");
\r
503 sb.append(layout.isPrivateLayout() ? "private": "public");
\r
504 sb.append(" pages of group ");
\r
505 sb.append(layout.getGroupId());
\r
507 if (_log.isWarnEnabled()) {
\r
508 _log.warn(sb.toString());
\r
511 throw new NoSuchLayoutException(sb.toString());
\r
513 else if (isLoginRequest(request) && !viewableGroup) {
\r
516 else if (group.isLayoutPrototype()) {
\r
517 layouts = new ArrayList<Layout>();
\r
520 layouts = LayoutLocalServiceUtil.getLayouts(
\r
521 layout.getGroupId(), layout.isPrivateLayout(),
\r
522 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
524 if (!group.isControlPanel()) {
\r
530 List<Layout> unfilteredLayouts = layouts;
\r
532 if (layout == null) {
\r
533 Object[] defaultLayout = getDefaultLayout(request, user, signedIn);
\r
535 layout = (Layout)defaultLayout[0];
\r
536 layouts = (List<Layout>)defaultLayout[1];
\r
538 request.setAttribute(WebKeys.LAYOUT_DEFAULT, Boolean.TRUE);
\r
541 Object[] viewableLayouts = getViewableLayouts(
\r
542 request, user, permissionChecker, layout, layouts);
\r
544 String layoutSetLogo = null;
\r
546 layout = (Layout)viewableLayouts[0];
\r
547 layouts = (List<Layout>)viewableLayouts[1];
\r
549 Group group = null;
\r
551 if (layout != null) {
\r
552 group = layout.getGroup();
\r
554 if (!group.isControlPanel()) {
\r
555 rememberVisitedGroupIds(request, group.getGroupId());
\r
559 LayoutTypePortlet layoutTypePortlet = null;
\r
561 layouts = mergeAdditionalLayouts(
\r
562 request, user, permissionChecker, layout, layouts);
\r
564 LayoutSet layoutSet = null;
\r
566 boolean hasCustomizeLayoutPermission = false;
\r
567 boolean hasUpdateLayoutPermission = false;
\r
569 boolean customizedView = SessionParamUtil.getBoolean(
\r
570 request, "customized_view", true);
\r
572 if (layout != null) {
\r
573 hasCustomizeLayoutPermission = LayoutPermissionUtil.contains(
\r
574 permissionChecker, layout, ActionKeys.CUSTOMIZE);
\r
575 hasUpdateLayoutPermission = LayoutPermissionUtil.contains(
\r
576 permissionChecker, layout, ActionKeys.UPDATE);
\r
578 layoutSet = layout.getLayoutSet();
\r
580 if (company.isSiteLogo()) {
\r
583 if (layoutSet.isLogo()) {
\r
584 logoId = layoutSet.getLogoId();
\r
587 logoId = layoutSet.getLiveLogoId();
\r
591 LayoutSet siblingLayoutSet =
\r
592 LayoutSetLocalServiceUtil.getLayoutSet(
\r
593 layout.getGroupId(), !layout.isPrivateLayout());
\r
595 if (siblingLayoutSet.isLogo()) {
\r
596 logoId = siblingLayoutSet.getLogoId();
\r
601 sb = new StringBundler(5);
\r
603 sb.append(imagePath);
\r
604 sb.append("/layout_set_logo?img_id=");
\r
607 sb.append(WebServerServletTokenUtil.getToken(logoId));
\r
609 layoutSetLogo = sb.toString();
\r
611 Image layoutSetLogoImage =
\r
612 ImageLocalServiceUtil.getCompanyLogo(logoId);
\r
614 companyLogo = layoutSetLogo;
\r
615 companyLogoHeight = layoutSetLogoImage.getHeight();
\r
616 companyLogoWidth = layoutSetLogoImage.getWidth();
\r
620 plid = layout.getPlid();
\r
622 // Updates to shared layouts are not reflected until the next time
\r
623 // the user logs in because group layouts are cached in the session
\r
625 layout = (Layout)layout.clone();
\r
627 layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType();
\r
629 boolean customizable = layoutTypePortlet.isCustomizable();
\r
631 if (!customizable ||
\r
632 (group.isLayoutPrototype() || group.isLayoutSetPrototype())) {
\r
634 customizedView = false;
\r
637 layoutTypePortlet.setCustomizedView(customizedView);
\r
638 layoutTypePortlet.setUpdatePermission(hasUpdateLayoutPermission);
\r
640 if (signedIn && customizable && customizedView &&
\r
641 hasCustomizeLayoutPermission) {
\r
643 PortalPreferences portalPreferences =
\r
644 PortletPreferencesFactoryUtil.getPortalPreferences(
\r
645 companyId, user.getUserId(), true);
\r
647 layoutTypePortlet.setPortalPreferences(portalPreferences);
\r
650 LayoutClone layoutClone = LayoutCloneFactory.getInstance();
\r
652 if (layoutClone != null) {
\r
653 String typeSettings = layoutClone.get(request, plid);
\r
655 if (typeSettings != null) {
\r
656 UnicodeProperties typeSettingsProperties =
\r
657 new UnicodeProperties(true);
\r
659 typeSettingsProperties.load(typeSettings);
\r
661 String stateMax = typeSettingsProperties.getProperty(
\r
662 LayoutTypePortletConstants.STATE_MAX);
\r
663 String stateMin = typeSettingsProperties.getProperty(
\r
664 LayoutTypePortletConstants.STATE_MIN);
\r
665 String modeAbout = typeSettingsProperties.getProperty(
\r
666 LayoutTypePortletConstants.MODE_ABOUT);
\r
667 String modeConfig = typeSettingsProperties.getProperty(
\r
668 LayoutTypePortletConstants.MODE_CONFIG);
\r
669 String modeEdit = typeSettingsProperties.getProperty(
\r
670 LayoutTypePortletConstants.MODE_EDIT);
\r
671 String modeEditDefaults =
\r
672 typeSettingsProperties.getProperty(
\r
673 LayoutTypePortletConstants.MODE_EDIT_DEFAULTS);
\r
674 String modeEditGuest = typeSettingsProperties.getProperty(
\r
675 LayoutTypePortletConstants.MODE_EDIT_GUEST);
\r
676 String modeHelp = typeSettingsProperties.getProperty(
\r
677 LayoutTypePortletConstants.MODE_HELP);
\r
678 String modePreview = typeSettingsProperties.getProperty(
\r
679 LayoutTypePortletConstants.MODE_PREVIEW);
\r
680 String modePrint = typeSettingsProperties.getProperty(
\r
681 LayoutTypePortletConstants.MODE_PRINT);
\r
683 layoutTypePortlet.setStateMax(stateMax);
\r
684 layoutTypePortlet.setStateMin(stateMin);
\r
685 layoutTypePortlet.setModeAbout(modeAbout);
\r
686 layoutTypePortlet.setModeConfig(modeConfig);
\r
687 layoutTypePortlet.setModeEdit(modeEdit);
\r
688 layoutTypePortlet.setModeEditDefaults(modeEditDefaults);
\r
689 layoutTypePortlet.setModeEditGuest(modeEditGuest);
\r
690 layoutTypePortlet.setModeHelp(modeHelp);
\r
691 layoutTypePortlet.setModePreview(modePreview);
\r
692 layoutTypePortlet.setModePrint(modePrint);
\r
696 request.setAttribute(WebKeys.LAYOUT, layout);
\r
697 request.setAttribute(WebKeys.LAYOUTS, layouts);
\r
702 long scopeGroupId = PortalUtil.getScopeGroupId(request);
\r
704 if ((scopeGroupId <= 0) && (doAsGroupId > 0)) {
\r
705 scopeGroupId = doAsGroupId;
\r
708 long parentGroupId = PortalUtil.getParentGroupId(scopeGroupId);
\r
710 // Theme and color scheme
\r
712 Theme theme = null;
\r
713 ColorScheme colorScheme = null;
\r
715 boolean wapTheme = BrowserSnifferUtil.isWap(request);
\r
717 if ((layout != null) && group.isControlPanel()) {
\r
718 String themeId = PrefsPropsUtil.getString(
\r
719 companyId, PropsKeys.CONTROL_PANEL_LAYOUT_REGULAR_THEME_ID);
\r
720 String colorSchemeId =
\r
721 ColorSchemeImpl.getDefaultRegularColorSchemeId();
\r
723 theme = ThemeLocalServiceUtil.getTheme(
\r
724 companyId, themeId, wapTheme);
\r
725 colorScheme = ThemeLocalServiceUtil.getColorScheme(
\r
726 companyId, theme.getThemeId(), colorSchemeId, wapTheme);
\r
728 if (!wapTheme && theme.isWapTheme()) {
\r
729 theme = ThemeLocalServiceUtil.getTheme(
\r
731 PropsValues.CONTROL_PANEL_LAYOUT_REGULAR_THEME_ID, false);
\r
732 colorScheme = ThemeLocalServiceUtil.getColorScheme(
\r
733 companyId, theme.getThemeId(), colorSchemeId, false);
\r
736 request.setAttribute(WebKeys.THEME, theme);
\r
737 request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);
\r
740 boolean themeCssFastLoad = SessionParamUtil.getBoolean(
\r
741 request, "css_fast_load", PropsValues.THEME_CSS_FAST_LOAD);
\r
742 boolean themeImagesFastLoad = SessionParamUtil.getBoolean(
\r
743 request, "images_fast_load", PropsValues.THEME_IMAGES_FAST_LOAD);
\r
745 boolean themeJsBarebone = PropsValues.JAVASCRIPT_BAREBONE_ENABLED;
\r
747 if (themeJsBarebone) {
\r
749 themeJsBarebone = false;
\r
753 boolean themeJsFastLoad = SessionParamUtil.getBoolean(
\r
754 request, "js_fast_load", PropsValues.JAVASCRIPT_FAST_LOAD);
\r
756 String lifecycle = ParamUtil.getString(request, "p_p_lifecycle", "0");
\r
758 lifecycle = ParamUtil.getString(request, "p_t_lifecycle", lifecycle);
\r
760 boolean isolated = ParamUtil.getBoolean(request, "p_p_isolated");
\r
762 String facebookCanvasPageURL = (String)request.getAttribute(
\r
763 WebKeys.FACEBOOK_CANVAS_PAGE_URL);
\r
765 boolean widget = false;
\r
767 Boolean widgetObj = (Boolean)request.getAttribute(WebKeys.WIDGET);
\r
769 if (widgetObj != null) {
\r
770 widget = widgetObj.booleanValue();
\r
775 ThemeDisplay themeDisplay = ThemeDisplayFactory.create();
\r
777 // Set the CDN host, portal URL, and Facebook application ID first
\r
778 // because other methods (setLookAndFeel) depend on them being set
\r
780 themeDisplay.setCDNHost(cdnHost);
\r
781 themeDisplay.setCDNDynamicResourcesHost(dynamicResourcesCDNHost);
\r
782 themeDisplay.setPortalURL(portalURL);
\r
783 themeDisplay.setFacebookCanvasPageURL(facebookCanvasPageURL);
\r
784 themeDisplay.setWidget(widget);
\r
786 themeDisplay.setCompany(company);
\r
787 themeDisplay.setCompanyLogo(companyLogo);
\r
788 themeDisplay.setCompanyLogoHeight(companyLogoHeight);
\r
789 themeDisplay.setCompanyLogoWidth(companyLogoWidth);
\r
790 themeDisplay.setRealCompanyLogo(realCompanyLogo);
\r
791 themeDisplay.setRealCompanyLogoHeight(realCompanyLogoHeight);
\r
792 themeDisplay.setRealCompanyLogoWidth(realCompanyLogoWidth);
\r
793 themeDisplay.setUser(user);
\r
794 themeDisplay.setRealUser(realUser);
\r
795 themeDisplay.setDoAsUserId(doAsUserId);
\r
796 themeDisplay.setDoAsUserLanguageId(doAsUserLanguageId);
\r
797 themeDisplay.setDoAsGroupId(doAsGroupId);
\r
798 themeDisplay.setRefererPlid(refererPlid);
\r
799 themeDisplay.setControlPanelCategory(controlPanelCategory);
\r
800 themeDisplay.setLayoutSet(layoutSet);
\r
801 themeDisplay.setLayoutSetLogo(layoutSetLogo);
\r
802 themeDisplay.setLayout(layout);
\r
803 themeDisplay.setLayouts(layouts);
\r
804 themeDisplay.setUnfilteredLayouts(unfilteredLayouts);
\r
805 themeDisplay.setPlid(plid);
\r
806 themeDisplay.setLayoutTypePortlet(layoutTypePortlet);
\r
807 themeDisplay.setScopeGroupId(scopeGroupId);
\r
808 themeDisplay.setParentGroupId(parentGroupId);
\r
809 themeDisplay.setSignedIn(signedIn);
\r
810 themeDisplay.setPermissionChecker(permissionChecker);
\r
811 themeDisplay.setLocale(locale);
\r
812 themeDisplay.setLanguageId(LocaleUtil.toLanguageId(locale));
\r
813 themeDisplay.setI18nLanguageId(i18nLanguageId);
\r
814 themeDisplay.setI18nPath(i18nPath);
\r
815 themeDisplay.setTimeZone(timeZone);
\r
816 themeDisplay.setLookAndFeel(theme, colorScheme);
\r
817 themeDisplay.setThemeCssFastLoad(themeCssFastLoad);
\r
818 themeDisplay.setThemeImagesFastLoad(themeImagesFastLoad);
\r
819 themeDisplay.setThemeJsBarebone(themeJsBarebone);
\r
820 themeDisplay.setThemeJsFastLoad(themeJsFastLoad);
\r
821 themeDisplay.setServerName(request.getServerName());
\r
822 themeDisplay.setServerPort(request.getServerPort());
\r
823 themeDisplay.setSecure(request.isSecure());
\r
824 themeDisplay.setLifecycle(lifecycle);
\r
825 themeDisplay.setLifecycleAction(lifecycle.equals("1"));
\r
826 themeDisplay.setLifecycleRender(lifecycle.equals("0"));
\r
827 themeDisplay.setLifecycleResource(lifecycle.equals("2"));
\r
828 themeDisplay.setStateExclusive(LiferayWindowState.isExclusive(request));
\r
829 themeDisplay.setStateMaximized(LiferayWindowState.isMaximized(request));
\r
830 themeDisplay.setStatePopUp(LiferayWindowState.isPopUp(request));
\r
831 themeDisplay.setIsolated(isolated);
\r
832 themeDisplay.setPathApplet(contextPath.concat("/applets"));
\r
833 themeDisplay.setPathCms(contextPath.concat("/cms"));
\r
834 themeDisplay.setPathContext(contextPath);
\r
835 themeDisplay.setPathFlash(contextPath.concat("/flash"));
\r
836 themeDisplay.setPathFriendlyURLPrivateGroup(
\r
837 friendlyURLPrivateGroupPath);
\r
838 themeDisplay.setPathFriendlyURLPrivateUser(friendlyURLPrivateUserPath);
\r
839 themeDisplay.setPathFriendlyURLPublic(friendlyURLPublicPath);
\r
840 themeDisplay.setPathImage(imagePath);
\r
841 themeDisplay.setPathJavaScript(contextPath.concat("/html/js"));
\r
842 themeDisplay.setPathMain(mainPath);
\r
843 themeDisplay.setPathSound(contextPath.concat("/html/sound"));
\r
847 themeDisplay.setShowAddContentIcon(false);
\r
848 themeDisplay.setShowControlPanelIcon(signedIn);
\r
849 themeDisplay.setShowHomeIcon(true);
\r
850 themeDisplay.setShowMyAccountIcon(signedIn);
\r
851 themeDisplay.setShowPageSettingsIcon(false);
\r
852 themeDisplay.setShowPortalIcon(true);
\r
853 themeDisplay.setShowSignInIcon(!signedIn);
\r
854 themeDisplay.setShowSignOutIcon(signedIn);
\r
856 boolean showSiteContentIcon = false;
\r
858 long controlPanelPlid = 0;
\r
861 Group controlPanelGroup = GroupLocalServiceUtil.getGroup(
\r
862 companyId, GroupConstants.CONTROL_PANEL);
\r
864 controlPanelPlid = LayoutLocalServiceUtil.getDefaultPlid(
\r
865 controlPanelGroup.getGroupId(), true);
\r
867 List<Portlet> siteContentPortlets =
\r
868 PortalUtil.getControlPanelPortlets(
\r
869 PortletCategoryKeys.CONTENT, themeDisplay);
\r
871 Portlet groupPagesPortlet = PortletLocalServiceUtil.getPortletById(
\r
872 PortletKeys.GROUP_PAGES);
\r
874 siteContentPortlets.remove(groupPagesPortlet);
\r
876 Portlet siteMembershipsAdminPortlet =
\r
877 PortletLocalServiceUtil.getPortletById(
\r
878 PortletKeys.SITE_MEMBERSHIPS_ADMIN);
\r
880 siteContentPortlets.remove(siteMembershipsAdminPortlet);
\r
882 Portlet siteSettingsPortlet =
\r
883 PortletLocalServiceUtil.getPortletById(
\r
884 PortletKeys.SITE_SETTINGS);
\r
886 siteContentPortlets.remove(siteSettingsPortlet);
\r
888 showSiteContentIcon = PortletPermissionUtil.contains(
\r
889 permissionChecker, scopeGroupId, controlPanelPlid,
\r
890 siteContentPortlets, ActionKeys.VIEW);
\r
893 themeDisplay.setShowSiteContentIcon(showSiteContentIcon);
\r
895 themeDisplay.setShowStagingIcon(false);
\r
899 if (PropsValues.SESSION_ENABLE_URL_WITH_SESSION_ID &&
\r
900 !CookieKeys.hasSessionId(request)) {
\r
902 themeDisplay.setAddSessionIdToURL(true);
\r
903 themeDisplay.setSessionId(session.getId());
\r
908 String urlControlPanel = friendlyURLPrivateGroupPath.concat(
\r
909 GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
\r
911 if (Validator.isNotNull(doAsUserId)) {
\r
912 urlControlPanel = HttpUtil.addParameter(
\r
913 urlControlPanel, "doAsUserId", doAsUserId);
\r
916 if (scopeGroupId > 0) {
\r
917 urlControlPanel = HttpUtil.addParameter(
\r
918 urlControlPanel, "doAsGroupId", scopeGroupId);
\r
921 if (refererPlid > 0) {
\r
922 urlControlPanel = HttpUtil.addParameter(
\r
923 urlControlPanel, "refererPlid", refererPlid);
\r
925 else if (plid > 0) {
\r
926 urlControlPanel = HttpUtil.addParameter(
\r
927 urlControlPanel, "refererPlid", plid);
\r
930 if (themeDisplay.isAddSessionIdToURL()) {
\r
931 urlControlPanel = PortalUtil.getURLWithSessionId(
\r
932 urlControlPanel, session.getId());
\r
935 themeDisplay.setURLControlPanel(urlControlPanel);
\r
937 String siteContentURL = urlControlPanel;
\r
939 siteContentURL = HttpUtil.addParameter(
\r
940 siteContentURL, "controlPanelCategory",
\r
941 PortletCategoryKeys.CONTENT);
\r
943 themeDisplay.setURLSiteContent(siteContentURL);
\r
945 String currentURL = PortalUtil.getCurrentURL(request);
\r
947 themeDisplay.setURLCurrent(currentURL);
\r
949 String urlHome = PortalUtil.getHomeURL(request);
\r
951 themeDisplay.setURLHome(urlHome);
\r
953 if (layout != null) {
\r
954 if (layout.isTypePortlet()) {
\r
955 boolean freeformLayout =
\r
956 layoutTypePortlet.getLayoutTemplateId().equals("freeform");
\r
958 themeDisplay.setFreeformLayout(freeformLayout);
\r
960 if (hasUpdateLayoutPermission) {
\r
961 themeDisplay.setShowAddContentIconPermission(true);
\r
963 if (!LiferayWindowState.isMaximized(request)) {
\r
964 themeDisplay.setShowAddContentIcon(true);
\r
967 themeDisplay.setShowLayoutTemplatesIcon(true);
\r
969 if (!group.isUser()) {
\r
970 themeDisplay.setShowPageCustomizationIcon(true);
\r
973 themeDisplay.setURLAddContent(
\r
974 "Liferay.LayoutConfiguration.toggle('".concat(
\r
975 PortletKeys.LAYOUT_CONFIGURATION).concat("');"));
\r
977 themeDisplay.setURLLayoutTemplates(
\r
978 "Liferay.LayoutConfiguration.showTemplates();");
\r
981 if (hasCustomizeLayoutPermission && customizedView) {
\r
982 themeDisplay.setShowAddContentIconPermission(true);
\r
984 if (!LiferayWindowState.isMaximized(request)) {
\r
985 themeDisplay.setShowAddContentIcon(true);
\r
988 themeDisplay.setURLAddContent(
\r
989 "Liferay.LayoutConfiguration.toggle('".concat(
\r
990 PortletKeys.LAYOUT_CONFIGURATION).concat("');"));
\r
994 if (hasUpdateLayoutPermission) {
\r
995 themeDisplay.setShowPageSettingsIcon(true);
\r
997 LiferayPortletURL pageSettingsURL = new PortletURLImpl(
\r
998 request, PortletKeys.LAYOUTS_ADMIN, controlPanelPlid,
\r
999 PortletRequest.RENDER_PHASE);
\r
1001 pageSettingsURL.setControlPanelCategory(
\r
1002 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
\r
1003 PortletKeys.LAYOUTS_ADMIN);
\r
1004 pageSettingsURL.setDoAsGroupId(scopeGroupId);
\r
1005 pageSettingsURL.setParameter(
\r
1006 "struts_action", "/layouts_admin/edit_layouts");
\r
1008 if (layout.isPrivateLayout()) {
\r
1009 pageSettingsURL.setParameter("tabs1", "private-pages");
\r
1012 pageSettingsURL.setParameter("tabs1", "public-pages");
\r
1015 pageSettingsURL.setParameter("closeRedirect", currentURL);
\r
1016 pageSettingsURL.setParameter(
\r
1017 "groupId", String.valueOf(scopeGroupId));
\r
1018 pageSettingsURL.setParameter("selPlid", String.valueOf(plid));
\r
1019 pageSettingsURL.setPortletMode(PortletMode.VIEW);
\r
1020 pageSettingsURL.setWindowState(LiferayWindowState.POP_UP);
\r
1022 themeDisplay.setURLPageSettings(pageSettingsURL);
\r
1024 boolean site = group.isSite();
\r
1026 if (!site && group.isStagingGroup()) {
\r
1027 Group liveGroup = group.getLiveGroup();
\r
1029 site = liveGroup.isSite();
\r
1033 GroupPermissionUtil.contains(
\r
1034 permissionChecker, scopeGroupId,
\r
1035 ActionKeys.ASSIGN_MEMBERS)) {
\r
1037 themeDisplay.setShowManageSiteMembershipsIcon(true);
\r
1039 LiferayPortletURL manageSiteMembershipsURL =
\r
1040 new PortletURLImpl(
\r
1041 request, PortletKeys.SITE_MEMBERSHIPS_ADMIN,
\r
1042 controlPanelPlid, PortletRequest.RENDER_PHASE);
\r
1044 manageSiteMembershipsURL.setControlPanelCategory(
\r
1045 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
\r
1046 PortletKeys.SITE_MEMBERSHIPS_ADMIN);
\r
1047 manageSiteMembershipsURL.setDoAsGroupId(scopeGroupId);
\r
1048 manageSiteMembershipsURL.setParameter(
\r
1049 "struts_action", "/sites_admin/edit_site_assignments");
\r
1050 manageSiteMembershipsURL.setParameter(
\r
1051 "groupId", String.valueOf(scopeGroupId));
\r
1052 manageSiteMembershipsURL.setParameter(
\r
1053 "selPlid", String.valueOf(plid));
\r
1054 manageSiteMembershipsURL.setPortletMode(PortletMode.VIEW);
\r
1055 manageSiteMembershipsURL.setWindowState(
\r
1056 LiferayWindowState.POP_UP);
\r
1058 themeDisplay.setURLManageSiteMemberships(
\r
1059 manageSiteMembershipsURL);
\r
1062 themeDisplay.setShowManageSiteMembershipsIcon(false);
\r
1066 boolean hasAddLayoutGroupPermission = GroupPermissionUtil.contains(
\r
1067 permissionChecker, scopeGroupId, ActionKeys.ADD_LAYOUT);
\r
1068 boolean hasAddLayoutLayoutPermission =
\r
1069 LayoutPermissionUtil.contains(
\r
1070 permissionChecker, layout, ActionKeys.ADD_LAYOUT);
\r
1071 boolean hasManageLayoutsGroupPermission =
\r
1072 GroupPermissionUtil.contains(
\r
1073 permissionChecker, scopeGroupId, ActionKeys.MANAGE_LAYOUTS);
\r
1074 boolean hasManageStagingPermission = GroupPermissionUtil.contains(
\r
1075 permissionChecker, scopeGroupId, ActionKeys.MANAGE_STAGING);
\r
1076 boolean hasPublishStagingPermission = GroupPermissionUtil.contains(
\r
1077 permissionChecker, scopeGroupId, ActionKeys.PUBLISH_STAGING);
\r
1078 boolean hasUpdateGroupPermission = GroupPermissionUtil.contains(
\r
1079 permissionChecker, scopeGroupId, ActionKeys.UPDATE);
\r
1080 boolean hasViewStagingPermission = GroupPermissionUtil.contains(
\r
1081 permissionChecker, scopeGroupId, ActionKeys.VIEW_STAGING);
\r
1083 if (!group.isControlPanel() && !group.isUser() &&
\r
1084 !group.isUserGroup() && hasUpdateGroupPermission) {
\r
1086 themeDisplay.setShowSiteSettingsIcon(true);
\r
1088 LiferayPortletURL siteSettingsURL = new PortletURLImpl(
\r
1089 request, PortletKeys.SITE_SETTINGS, controlPanelPlid,
\r
1090 PortletRequest.RENDER_PHASE);
\r
1092 siteSettingsURL.setControlPanelCategory(
\r
1093 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
\r
1094 PortletKeys.SITE_SETTINGS);
\r
1095 siteSettingsURL.setDoAsGroupId(scopeGroupId);
\r
1096 siteSettingsURL.setParameter(
\r
1097 "struts_action", "/sites_admin/edit_site");
\r
1098 siteSettingsURL.setParameter("closeRedirect", currentURL);
\r
1099 siteSettingsURL.setParameter(
\r
1100 "groupId", String.valueOf(scopeGroupId));
\r
1101 siteSettingsURL.setPortletMode(PortletMode.VIEW);
\r
1102 siteSettingsURL.setWindowState(LiferayWindowState.POP_UP);
\r
1104 themeDisplay.setURLSiteSettings(siteSettingsURL);
\r
1107 if (!group.isLayoutPrototype() &&
\r
1108 (hasAddLayoutGroupPermission || hasAddLayoutLayoutPermission ||
\r
1109 hasManageLayoutsGroupPermission || hasUpdateGroupPermission)) {
\r
1111 themeDisplay.setShowSiteMapSettingsIcon(true);
\r
1113 LiferayPortletURL siteMapSettingsURL = new PortletURLImpl(
\r
1114 request, PortletKeys.LAYOUTS_ADMIN, controlPanelPlid,
\r
1115 PortletRequest.RENDER_PHASE);
\r
1117 siteMapSettingsURL.setControlPanelCategory(
\r
1118 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
\r
1119 PortletKeys.LAYOUTS_ADMIN);
\r
1120 siteMapSettingsURL.setDoAsGroupId(scopeGroupId);
\r
1121 siteMapSettingsURL.setParameter(
\r
1122 "struts_action", "/layouts_admin/edit_layouts");
\r
1124 if (layout.isPrivateLayout()) {
\r
1125 siteMapSettingsURL.setParameter("tabs1", "private-pages");
\r
1128 siteMapSettingsURL.setParameter("tabs1", "public-pages");
\r
1131 siteMapSettingsURL.setParameter("closeRedirect", currentURL);
\r
1132 siteMapSettingsURL.setParameter(
\r
1133 "groupId", String.valueOf(scopeGroupId));
\r
1134 siteMapSettingsURL.setPortletMode(PortletMode.VIEW);
\r
1135 siteMapSettingsURL.setWindowState(LiferayWindowState.POP_UP);
\r
1137 themeDisplay.setURLSiteMapSettings(siteMapSettingsURL);
\r
1140 if (group.hasStagingGroup() && !group.isStagingGroup()) {
\r
1141 themeDisplay.setShowAddContentIcon(false);
\r
1142 themeDisplay.setShowLayoutTemplatesIcon(false);
\r
1143 themeDisplay.setShowPageSettingsIcon(false);
\r
1144 themeDisplay.setURLPublishToLive(null);
\r
1147 if (group.isControlPanel()) {
\r
1148 themeDisplay.setShowPageSettingsIcon(false);
\r
1149 themeDisplay.setURLPublishToLive(null);
\r
1154 if (group.isStaged() || group.isStagingGroup()) {
\r
1155 if (hasManageStagingPermission || hasPublishStagingPermission ||
\r
1156 hasUpdateLayoutPermission || hasViewStagingPermission) {
\r
1158 themeDisplay.setShowStagingIcon(true);
\r
1161 if (hasPublishStagingPermission) {
\r
1162 PortletURL publishToLiveURL = new PortletURLImpl(
\r
1163 request, PortletKeys.LAYOUTS_ADMIN, plid,
\r
1164 PortletRequest.RENDER_PHASE);
\r
1166 publishToLiveURL.setParameter(
\r
1167 "struts_action", "/layouts_admin/publish_layouts");
\r
1169 if (layout.isPrivateLayout()) {
\r
1170 publishToLiveURL.setParameter("tabs1", "private-pages");
\r
1173 publishToLiveURL.setParameter("tabs1", "public-pages");
\r
1176 publishToLiveURL.setParameter("pagesRedirect", currentURL);
\r
1177 publishToLiveURL.setParameter(
\r
1178 "groupId", String.valueOf(scopeGroupId));
\r
1179 publishToLiveURL.setParameter(
\r
1180 "selPlid", String.valueOf(plid));
\r
1181 publishToLiveURL.setPortletMode(PortletMode.VIEW);
\r
1182 publishToLiveURL.setWindowState(
\r
1183 LiferayWindowState.EXCLUSIVE);
\r
1185 themeDisplay.setURLPublishToLive(publishToLiveURL);
\r
1189 PortletURLImpl myAccountURL = new PortletURLImpl(
\r
1190 request, PortletKeys.MY_ACCOUNT, controlPanelPlid,
\r
1191 PortletRequest.RENDER_PHASE);
\r
1193 if (scopeGroupId > 0) {
\r
1194 myAccountURL.setDoAsGroupId(scopeGroupId);
\r
1197 myAccountURL.setParameter("struts_action", "/my_account/edit_user");
\r
1198 myAccountURL.setPortletMode(PortletMode.VIEW);
\r
1200 if (refererPlid > 0) {
\r
1201 myAccountURL.setRefererPlid(refererPlid);
\r
1204 myAccountURL.setRefererPlid(plid);
\r
1207 myAccountURL.setWindowState(WindowState.MAXIMIZED);
\r
1209 themeDisplay.setURLMyAccount(myAccountURL);
\r
1212 if (!user.isActive() ||
\r
1213 (PrefsPropsUtil.getBoolean(
\r
1214 companyId, PropsKeys.TERMS_OF_USE_REQUIRED) &&
\r
1215 !user.isAgreedToTermsOfUse())) {
\r
1217 themeDisplay.setShowAddContentIcon(false);
\r
1218 themeDisplay.setShowMyAccountIcon(false);
\r
1219 themeDisplay.setShowPageSettingsIcon(false);
\r
1222 if (layout.isLayoutPrototypeLinkActive()) {
\r
1223 themeDisplay.setShowPageCustomizationIcon(false);
\r
1226 if (group.isLayoutPrototype()) {
\r
1227 themeDisplay.setShowControlPanelIcon(false);
\r
1228 themeDisplay.setShowHomeIcon(false);
\r
1229 themeDisplay.setShowManageSiteMembershipsIcon(false);
\r
1230 themeDisplay.setShowMyAccountIcon(false);
\r
1231 themeDisplay.setShowPageCustomizationIcon(false);
\r
1232 themeDisplay.setShowPageSettingsIcon(true);
\r
1233 themeDisplay.setShowPortalIcon(false);
\r
1234 themeDisplay.setShowSignInIcon(false);
\r
1235 themeDisplay.setShowSignOutIcon(false);
\r
1236 themeDisplay.setShowSiteContentIcon(false);
\r
1237 themeDisplay.setShowSiteSettingsIcon(false);
\r
1238 themeDisplay.setShowStagingIcon(false);
\r
1241 if (group.isLayoutSetPrototype()) {
\r
1242 themeDisplay.setShowPageCustomizationIcon(false);
\r
1243 themeDisplay.setShowSiteSettingsIcon(false);
\r
1246 if (group.hasStagingGroup() && !group.isStagingGroup()) {
\r
1247 themeDisplay.setShowLayoutTemplatesIcon(false);
\r
1248 themeDisplay.setShowPageCustomizationIcon(false);
\r
1249 themeDisplay.setShowPageSettingsIcon(false);
\r
1250 themeDisplay.setShowSiteContentIcon(false);
\r
1251 themeDisplay.setShowSiteMapSettingsIcon(false);
\r
1252 themeDisplay.setShowSiteSettingsIcon(false);
\r
1255 themeDisplay.setURLPortal(portalURL.concat(contextPath));
\r
1257 String urlSignIn = mainPath.concat("/portal/login");
\r
1259 if (layout != null) {
\r
1260 urlSignIn = HttpUtil.addParameter(
\r
1261 urlSignIn, "p_l_id", layout.getPlid());
\r
1264 themeDisplay.setURLSignIn(urlSignIn);
\r
1266 themeDisplay.setURLSignOut(mainPath.concat("/portal/logout"));
\r
1268 PortletURL updateManagerURL = new PortletURLImpl(
\r
1269 request, PortletKeys.UPDATE_MANAGER, plid,
\r
1270 PortletRequest.RENDER_PHASE);
\r
1272 updateManagerURL.setParameter("struts_action", "/update_manager/view");
\r
1273 updateManagerURL.setPortletMode(PortletMode.VIEW);
\r
1274 updateManagerURL.setWindowState(WindowState.MAXIMIZED);
\r
1276 themeDisplay.setURLUpdateManager(updateManagerURL);
\r
1278 return themeDisplay;
\r
1282 public void run(HttpServletRequest request, HttpServletResponse response)
\r
1283 throws ActionException {
\r
1285 StopWatch stopWatch = null;
\r
1287 if (_log.isDebugEnabled()) {
\r
1288 stopWatch = new StopWatch();
\r
1290 stopWatch.start();
\r
1294 servicePre(request, response);
\r
1296 catch (Exception e) {
\r
1297 throw new ActionException(e);
\r
1300 if (_log.isDebugEnabled()) {
\r
1301 _log.debug("Running takes " + stopWatch.getTime() + " ms");
\r
1305 protected void addDefaultLayoutsByLAR(
\r
1306 long userId, long groupId, boolean privateLayout, File larFile)
\r
1307 throws PortalException, SystemException {
\r
1309 Map<String, String[]> parameterMap = new HashMap<String, String[]>();
\r
1312 PortletDataHandlerKeys.PERMISSIONS,
\r
1313 new String[] {Boolean.TRUE.toString()});
\r
1315 PortletDataHandlerKeys.PORTLET_DATA,
\r
1316 new String[] {Boolean.TRUE.toString()});
\r
1318 PortletDataHandlerKeys.PORTLET_DATA_CONTROL_DEFAULT,
\r
1319 new String[] {Boolean.TRUE.toString()});
\r
1321 PortletDataHandlerKeys.PORTLET_SETUP,
\r
1322 new String[] {Boolean.TRUE.toString()});
\r
1324 PortletDataHandlerKeys.USER_PERMISSIONS,
\r
1325 new String[] {Boolean.FALSE.toString()});
\r
1327 LayoutLocalServiceUtil.importLayouts(
\r
1328 userId, groupId, privateLayout, parameterMap, larFile);
\r
1331 protected void addDefaultUserPrivateLayoutByProperties(
\r
1332 long userId, long groupId)
\r
1333 throws PortalException, SystemException {
\r
1335 String friendlyURL = getFriendlyURL(
\r
1336 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_FRIENDLY_URL);
\r
1338 ServiceContext serviceContext = new ServiceContext();
\r
1340 Layout layout = LayoutLocalServiceUtil.addLayout(
\r
1341 userId, groupId, true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
\r
1342 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_NAME, StringPool.BLANK,
\r
1343 StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL,
\r
1346 LayoutTypePortlet layoutTypePortlet =
\r
1347 (LayoutTypePortlet)layout.getLayoutType();
\r
1349 layoutTypePortlet.setLayoutTemplateId(
\r
1350 0, PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_TEMPLATE_ID, false);
\r
1352 for (int i = 0; i < 10; i++) {
\r
1353 String columnId = "column-" + i;
\r
1354 String portletIds = PropsUtil.get(
\r
1355 PropsKeys.DEFAULT_USER_PRIVATE_LAYOUT_COLUMN + i);
\r
1357 String[] portletIdsArray = StringUtil.split(portletIds);
\r
1359 layoutTypePortlet.addPortletIds(
\r
1360 0, portletIdsArray, columnId, false);
\r
1363 LayoutLocalServiceUtil.updateLayout(
\r
1364 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
\r
1365 layout.getTypeSettings());
\r
1367 boolean updateLayoutSet = false;
\r
1369 LayoutSet layoutSet = layout.getLayoutSet();
\r
1371 if (Validator.isNotNull(
\r
1372 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID)) {
\r
1374 layoutSet.setThemeId(
\r
1375 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID);
\r
1377 updateLayoutSet = true;
\r
1380 if (Validator.isNotNull(
\r
1382 DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {
\r
1384 layoutSet.setColorSchemeId(
\r
1386 DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID);
\r
1388 updateLayoutSet = true;
\r
1391 if (Validator.isNotNull(
\r
1392 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID)) {
\r
1394 layoutSet.setWapThemeId(
\r
1395 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID);
\r
1397 updateLayoutSet = true;
\r
1400 if (Validator.isNotNull(
\r
1401 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID)) {
\r
1403 layoutSet.setWapColorSchemeId(
\r
1404 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID);
\r
1406 updateLayoutSet = true;
\r
1409 if (updateLayoutSet) {
\r
1410 LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
\r
1414 protected void addDefaultUserPrivateLayouts(User user)
\r
1415 throws PortalException, SystemException {
\r
1417 Group userGroup = user.getGroup();
\r
1419 if (privateLARFile != null) {
\r
1420 addDefaultLayoutsByLAR(
\r
1421 user.getUserId(), userGroup.getGroupId(), true, privateLARFile);
\r
1424 addDefaultUserPrivateLayoutByProperties(
\r
1425 user.getUserId(), userGroup.getGroupId());
\r
1429 protected void addDefaultUserPublicLayoutByProperties(
\r
1430 long userId, long groupId)
\r
1431 throws PortalException, SystemException {
\r
1433 String friendlyURL = getFriendlyURL(
\r
1434 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_FRIENDLY_URL);
\r
1436 ServiceContext serviceContext = new ServiceContext();
\r
1438 Layout layout = LayoutLocalServiceUtil.addLayout(
\r
1439 userId, groupId, false, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
\r
1440 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_NAME, StringPool.BLANK,
\r
1441 StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL,
\r
1444 LayoutTypePortlet layoutTypePortlet =
\r
1445 (LayoutTypePortlet)layout.getLayoutType();
\r
1447 layoutTypePortlet.setLayoutTemplateId(
\r
1448 0, PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_TEMPLATE_ID, false);
\r
1450 for (int i = 0; i < 10; i++) {
\r
1451 String columnId = "column-" + i;
\r
1452 String portletIds = PropsUtil.get(
\r
1453 PropsKeys.DEFAULT_USER_PUBLIC_LAYOUT_COLUMN + i);
\r
1455 String[] portletIdsArray = StringUtil.split(portletIds);
\r
1457 layoutTypePortlet.addPortletIds(
\r
1458 0, portletIdsArray, columnId, false);
\r
1461 LayoutLocalServiceUtil.updateLayout(
\r
1462 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
\r
1463 layout.getTypeSettings());
\r
1465 boolean updateLayoutSet = false;
\r
1467 LayoutSet layoutSet = layout.getLayoutSet();
\r
1469 if (Validator.isNotNull(
\r
1470 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID)) {
\r
1472 layoutSet.setThemeId(
\r
1473 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID);
\r
1475 updateLayoutSet = true;
\r
1478 if (Validator.isNotNull(
\r
1480 DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {
\r
1482 layoutSet.setColorSchemeId(
\r
1483 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID);
\r
1485 updateLayoutSet = true;
\r
1488 if (Validator.isNotNull(
\r
1489 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID)) {
\r
1491 layoutSet.setWapThemeId(
\r
1492 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID);
\r
1494 updateLayoutSet = true;
\r
1497 if (Validator.isNotNull(
\r
1498 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID)) {
\r
1500 layoutSet.setWapColorSchemeId(
\r
1501 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID);
\r
1503 updateLayoutSet = true;
\r
1506 if (updateLayoutSet) {
\r
1507 LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
\r
1511 protected void addDefaultUserPublicLayouts(User user)
\r
1512 throws PortalException, SystemException {
\r
1514 Group userGroup = user.getGroup();
\r
1516 if (publicLARFile != null) {
\r
1517 addDefaultLayoutsByLAR(
\r
1518 user.getUserId(), userGroup.getGroupId(), false, publicLARFile);
\r
1521 addDefaultUserPublicLayoutByProperties(
\r
1522 user.getUserId(), userGroup.getGroupId());
\r
1526 protected void deleteDefaultUserPrivateLayouts(User user)
\r
1527 throws PortalException, SystemException {
\r
1529 Group userGroup = user.getGroup();
\r
1531 ServiceContext serviceContext = new ServiceContext();
\r
1533 LayoutLocalServiceUtil.deleteLayouts(
\r
1534 userGroup.getGroupId(), true, serviceContext);
\r
1537 protected void deleteDefaultUserPublicLayouts(User user)
\r
1538 throws PortalException, SystemException {
\r
1540 Group userGroup = user.getGroup();
\r
1542 ServiceContext serviceContext = new ServiceContext();
\r
1544 LayoutLocalServiceUtil.deleteLayouts(
\r
1545 userGroup.getGroupId(), false, serviceContext);
\r
1548 protected Object[] getDefaultLayout(
\r
1549 HttpServletRequest request, User user, boolean signedIn)
\r
1550 throws PortalException, SystemException {
\r
1552 // Check the virtual host
\r
1554 LayoutSet layoutSet = (LayoutSet)request.getAttribute(
\r
1555 WebKeys.VIRTUAL_HOST_LAYOUT_SET);
\r
1557 if (layoutSet != null) {
\r
1558 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
\r
1559 layoutSet.getGroupId(), layoutSet.isPrivateLayout(),
\r
1560 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1562 if (layouts.size() > 0) {
\r
1563 Layout layout = layouts.get(0);
\r
1565 return new Object[] {layout, layouts};
\r
1569 Layout layout = null;
\r
1570 List<Layout> layouts = null;
\r
1574 // Check the user's personal layouts
\r
1576 Group userGroup = user.getGroup();
\r
1578 layouts = LayoutLocalServiceUtil.getLayouts(
\r
1579 userGroup.getGroupId(), true,
\r
1580 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1582 if (layouts.size() == 0) {
\r
1583 layouts = LayoutLocalServiceUtil.getLayouts(
\r
1584 userGroup.getGroupId(), false,
\r
1585 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1588 if (layouts.size() > 0) {
\r
1589 layout = layouts.get(0);
\r
1592 // Check the user's sites
\r
1594 if (layout == null) {
\r
1595 LinkedHashMap<String, Object> groupParams =
\r
1596 new LinkedHashMap<String, Object>();
\r
1598 groupParams.put("usersGroups", new Long(user.getUserId()));
\r
1600 List<Group> groups = GroupLocalServiceUtil.search(
\r
1601 user.getCompanyId(), null, null, groupParams,
\r
1602 QueryUtil.ALL_POS, QueryUtil.ALL_POS);
\r
1604 for (Group group : groups) {
\r
1605 layouts = LayoutLocalServiceUtil.getLayouts(
\r
1606 group.getGroupId(), true,
\r
1607 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1609 if (layouts.size() == 0) {
\r
1610 layouts = LayoutLocalServiceUtil.getLayouts(
\r
1611 group.getGroupId(), false,
\r
1612 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1615 if (layouts.size() > 0) {
\r
1616 layout = layouts.get(0);
\r
1624 if (layout == null) {
\r
1626 // Check the Guest site
\r
1628 Group guestGroup = GroupLocalServiceUtil.getGroup(
\r
1629 user.getCompanyId(), GroupConstants.GUEST);
\r
1631 layouts = LayoutLocalServiceUtil.getLayouts(
\r
1632 guestGroup.getGroupId(), false,
\r
1633 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1635 if (layouts.size() > 0) {
\r
1636 layout = layouts.get(0);
\r
1640 return new Object[] {layout, layouts};
\r
1643 protected String getFriendlyURL(String friendlyURL) {
\r
1644 friendlyURL = GetterUtil.getString(friendlyURL);
\r
1646 return FriendlyURLNormalizerUtil.normalize(friendlyURL);
\r
1649 protected Object[] getViewableLayouts(
\r
1650 HttpServletRequest request, User user,
\r
1651 PermissionChecker permissionChecker, Layout layout,
\r
1652 List<Layout> layouts)
\r
1653 throws PortalException, SystemException {
\r
1655 if ((layouts == null) || layouts.isEmpty()) {
\r
1656 return new Object[] {layout, layouts};
\r
1659 Group group = layout.getGroup();
\r
1661 boolean hasViewLayoutPermission = false;
\r
1662 boolean hasViewStagingPermission =
\r
1663 (group.isStagingGroup() || group.isStagedRemotely()) &&
\r
1664 GroupPermissionUtil.contains(
\r
1665 permissionChecker, group.getGroupId(),
\r
1666 ActionKeys.VIEW_STAGING);
\r
1669 if (LayoutPermissionUtil.contains(
\r
1670 permissionChecker, layout, false, ActionKeys.VIEW) ||
\r
1671 hasViewStagingPermission) {
\r
1673 hasViewLayoutPermission = true;
\r
1675 } catch (Exception e){
\r
1676 System.out.println("Error com.liferay.portal.events.ServicePreAction --> l.1674");
\r
1679 List<Layout> accessibleLayouts = new ArrayList<Layout>();
\r
1681 for (int i = 0; i < layouts.size(); i++) {
\r
1682 Layout curLayout = layouts.get(i);
\r
1684 if (!curLayout.isHidden() &&
\r
1685 (LayoutPermissionUtil.contains(
\r
1686 permissionChecker, curLayout, false, ActionKeys.VIEW) ||
\r
1687 hasViewStagingPermission)) {
\r
1689 if (accessibleLayouts.isEmpty() && !hasViewLayoutPermission) {
\r
1690 layout = curLayout;
\r
1693 accessibleLayouts.add(curLayout);
\r
1697 if (accessibleLayouts.isEmpty()) {
\r
1700 if (!hasViewLayoutPermission) {
\r
1701 SessionErrors.add(
\r
1702 request, LayoutPermissionException.class.getName());
\r
1706 layouts = accessibleLayouts;
\r
1709 return new Object[] {layout, layouts};
\r
1712 protected Boolean hasPowerUserRole(User user) throws Exception {
\r
1713 return RoleLocalServiceUtil.hasUserRole(
\r
1714 user.getUserId(), user.getCompanyId(), RoleConstants.POWER_USER,
\r
1718 protected void initImportLARFiles() {
\r
1719 String privateLARFileName =
\r
1720 PropsValues.DEFAULT_USER_PRIVATE_LAYOUTS_LAR;
\r
1722 if (_log.isDebugEnabled()) {
\r
1723 _log.debug("Reading private LAR file " + privateLARFileName);
\r
1726 if (Validator.isNotNull(privateLARFileName)) {
\r
1727 privateLARFile = new File(privateLARFileName);
\r
1729 if (!privateLARFile.exists()) {
\r
1731 "Private LAR file " + privateLARFile + " does not exist");
\r
1733 privateLARFile = null;
\r
1736 if (_log.isDebugEnabled()) {
\r
1737 _log.debug("Using private LAR file " + privateLARFileName);
\r
1742 String publicLARFileName = PropsValues.DEFAULT_USER_PUBLIC_LAYOUTS_LAR;
\r
1744 if (_log.isDebugEnabled()) {
\r
1745 _log.debug("Reading public LAR file " + publicLARFileName);
\r
1748 if (Validator.isNotNull(publicLARFileName)) {
\r
1749 publicLARFile = new File(publicLARFileName);
\r
1751 if (!publicLARFile.exists()) {
\r
1753 "Public LAR file " + publicLARFile + " does not exist");
\r
1755 publicLARFile = null;
\r
1758 if (_log.isDebugEnabled()) {
\r
1759 _log.debug("Using public LAR file " + publicLARFileName);
\r
1765 protected boolean isLoginRequest(HttpServletRequest request) {
\r
1766 String requestURI = request.getRequestURI();
\r
1768 String mainPath = PortalUtil.getPathMain();
\r
1770 if (requestURI.startsWith(mainPath.concat("/portal/login"))) {
\r
1781 protected boolean isViewableCommunity(
\r
1782 User user, long groupId, boolean privateLayout,
\r
1783 PermissionChecker permissionChecker)
\r
1784 throws PortalException, SystemException {
\r
1786 return LayoutPermissionUtil.contains(
\r
1787 permissionChecker, groupId, privateLayout, 0, ActionKeys.VIEW);
\r
1793 protected boolean isViewableGroup(
\r
1794 User user, long groupId, boolean privateLayout, long layoutId,
\r
1795 String controlPanelCategory, PermissionChecker permissionChecker)
\r
1796 throws PortalException, SystemException {
\r
1798 /**************************
\r
1799 * MIGRATION MODIFICATION *
\r
1800 **************************/
\r
1801 Group group = GroupLocalServiceUtil.getGroup(groupId);
\r
1802 if (group.isRegularSite()) {
\r
1803 // HACK pour permettre de voir la communaute/site
\r
1804 CommunityInfos ci = CommunityInfosLocalServiceUtil.getCommunityInfosByGroupId(groupId);
\r
1805 if (ci.getPolitic()==2) {
\r
1806 // communaut� ouverte a l intranet
\r
1811 return LayoutPermissionUtil.contains(
\r
1812 permissionChecker, groupId, privateLayout, layoutId,
\r
1813 controlPanelCategory, ActionKeys.VIEW);
\r
1816 protected List<Layout> mergeAdditionalLayouts(
\r
1817 HttpServletRequest request, User user,
\r
1818 PermissionChecker permissionChecker, Layout layout,
\r
1819 List<Layout> layouts)
\r
1820 throws PortalException, SystemException {
\r
1822 if ((layout == null) || layout.isPrivateLayout()) {
\r
1826 long layoutGroupId = layout.getGroupId();
\r
1828 Group guestGroup = GroupLocalServiceUtil.getGroup(
\r
1829 user.getCompanyId(), GroupConstants.GUEST);
\r
1831 if (layoutGroupId != guestGroup.getGroupId()) {
\r
1832 Group layoutGroup = GroupLocalServiceUtil.getGroup(layoutGroupId);
\r
1834 UnicodeProperties typeSettingsProperties =
\r
1835 layoutGroup.getTypeSettingsProperties();
\r
1837 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
\r
1838 typeSettingsProperties.getProperty("mergeGuestPublicPages"));
\r
1840 if (!mergeGuestPublicPages) {
\r
1844 List<Layout> guestLayouts = LayoutLocalServiceUtil.getLayouts(
\r
1845 guestGroup.getGroupId(), false,
\r
1846 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1848 Object[] viewableLayouts = getViewableLayouts(
\r
1849 request, user, permissionChecker, layout, guestLayouts);
\r
1851 guestLayouts = (List<Layout>)viewableLayouts[1];
\r
1853 if (layouts == null) {
\r
1854 return guestLayouts;
\r
1857 layouts.addAll(0, guestLayouts);
\r
1860 HttpSession session = request.getSession();
\r
1862 Long previousGroupId = (Long)session.getAttribute(
\r
1863 WebKeys.VISITED_GROUP_ID_PREVIOUS);
\r
1865 if ((previousGroupId != null) &&
\r
1866 (previousGroupId.longValue() != layoutGroupId)) {
\r
1868 Group previousGroup = null;
\r
1871 previousGroup = GroupLocalServiceUtil.getGroup(
\r
1872 previousGroupId.longValue());
\r
1874 catch (NoSuchGroupException nsge) {
\r
1875 if (_log.isWarnEnabled()) {
\r
1882 UnicodeProperties typeSettingsProperties =
\r
1883 previousGroup.getTypeSettingsProperties();
\r
1885 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
\r
1886 typeSettingsProperties.getProperty(
\r
1887 "mergeGuestPublicPages"));
\r
1889 if (!mergeGuestPublicPages) {
\r
1893 List<Layout> previousLayouts =
\r
1894 LayoutLocalServiceUtil.getLayouts(
\r
1895 previousGroupId.longValue(), false,
\r
1896 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
1898 Object[] viewableLayouts = getViewableLayouts(
\r
1899 request, user, permissionChecker, layout, previousLayouts);
\r
1901 previousLayouts = (List<Layout>)viewableLayouts[1];
\r
1903 if (previousLayouts != null) {
\r
1904 layouts.addAll(previousLayouts);
\r
1912 protected void rememberVisitedGroupIds(
\r
1913 HttpServletRequest request, long currentGroupId) {
\r
1915 String requestURI = GetterUtil.getString(request.getRequestURI());
\r
1917 if (!requestURI.endsWith(_PATH_PORTAL_LAYOUT)) {
\r
1921 HttpSession session = request.getSession();
\r
1923 Long recentGroupId = (Long)session.getAttribute(
\r
1924 WebKeys.VISITED_GROUP_ID_RECENT);
\r
1926 Long previousGroupId = (Long)session.getAttribute(
\r
1927 WebKeys.VISITED_GROUP_ID_PREVIOUS);
\r
1929 if (recentGroupId == null) {
\r
1930 recentGroupId = new Long(currentGroupId);
\r
1932 session.setAttribute(
\r
1933 WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);
\r
1935 else if (recentGroupId.longValue() != currentGroupId) {
\r
1936 previousGroupId = new Long(recentGroupId.longValue());
\r
1938 recentGroupId = new Long(currentGroupId);
\r
1940 session.setAttribute(
\r
1941 WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);
\r
1943 session.setAttribute(
\r
1944 WebKeys.VISITED_GROUP_ID_PREVIOUS, previousGroupId);
\r
1947 if (_log.isDebugEnabled()) {
\r
1948 _log.debug("Current group id " + currentGroupId);
\r
1949 _log.debug("Recent group id " + recentGroupId);
\r
1950 _log.debug("Previous group id " + previousGroupId);
\r
1954 protected void servicePre(
\r
1955 HttpServletRequest request, HttpServletResponse response)
\r
1956 throws Exception {
\r
1958 ThemeDisplay themeDisplay = initThemeDisplay(request, response);
\r
1960 if (themeDisplay == null) {
\r
1964 request.setAttribute(WebKeys.THEME_DISPLAY, themeDisplay);
\r
1966 // Service context
\r
1968 ServiceContext serviceContext = ServiceContextFactory.getInstance(
\r
1971 ServiceContextThreadLocal.pushServiceContext(serviceContext);
\r
1973 // Parallel render
\r
1975 boolean parallelRenderEnable = true;
\r
1977 Layout layout = themeDisplay.getLayout();
\r
1979 if (layout != null) {
\r
1980 LayoutTypePortlet layoutTypePortlet =
\r
1981 themeDisplay.getLayoutTypePortlet();
\r
1983 List<String> portletIds = layoutTypePortlet.getPortletIds();
\r
1985 if (portletIds.size() == 1) {
\r
1986 String portletId = portletIds.get(0);
\r
1988 Portlet portlet = PortletLocalServiceUtil.getPortletById(
\r
1991 if ((portlet != null) && !portlet.isAjaxable()) {
\r
1992 parallelRenderEnable = false;
\r
1997 Boolean parallelRenderEnableObj = Boolean.valueOf(ParamUtil.getBoolean(
\r
1998 request, "p_p_parallel", parallelRenderEnable));
\r
2000 request.setAttribute(
\r
2001 WebKeys.PORTLET_PARALLEL_RENDER, parallelRenderEnableObj);
\r
2003 // Main Journal article
\r
2005 long mainJournalArticleId = ParamUtil.getLong(request, "p_j_a_id");
\r
2007 if (mainJournalArticleId > 0) {
\r
2009 JournalArticle mainJournalArticle =
\r
2010 JournalArticleServiceUtil.getArticle(mainJournalArticleId);
\r
2012 AssetEntry layoutAssetEntry =
\r
2013 AssetEntryLocalServiceUtil.getEntry(
\r
2014 JournalArticle.class.getName(),
\r
2015 mainJournalArticle.getResourcePrimKey());
\r
2017 request.setAttribute(
\r
2018 WebKeys.LAYOUT_ASSET_ENTRY, layoutAssetEntry);
\r
2020 catch (NoSuchArticleException nsae) {
\r
2021 if (_log.isWarnEnabled()) {
\r
2022 _log.warn(nsae.getMessage());
\r
2028 protected void updateUserLayouts(User user) throws Exception {
\r
2029 Boolean hasPowerUserRole = null;
\r
2031 // Private layouts
\r
2033 boolean addDefaultUserPrivateLayouts = false;
\r
2035 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED &&
\r
2036 PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_AUTO_CREATE) {
\r
2038 addDefaultUserPrivateLayouts = true;
\r
2040 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
\r
2041 if (hasPowerUserRole == null) {
\r
2042 hasPowerUserRole = hasPowerUserRole(user);
\r
2045 if (!hasPowerUserRole.booleanValue()) {
\r
2046 addDefaultUserPrivateLayouts = false;
\r
2051 Boolean hasPrivateLayouts = null;
\r
2053 if (addDefaultUserPrivateLayouts) {
\r
2054 hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(user, true);
\r
2056 if (!hasPrivateLayouts) {
\r
2057 addDefaultUserPrivateLayouts(user);
\r
2061 boolean deleteDefaultUserPrivateLayouts = false;
\r
2063 if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED) {
\r
2064 deleteDefaultUserPrivateLayouts = true;
\r
2066 else if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
\r
2067 if (hasPowerUserRole == null) {
\r
2068 hasPowerUserRole = hasPowerUserRole(user);
\r
2071 if (!hasPowerUserRole.booleanValue()) {
\r
2072 deleteDefaultUserPrivateLayouts = true;
\r
2076 if (deleteDefaultUserPrivateLayouts) {
\r
2077 if (hasPrivateLayouts == null) {
\r
2078 hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(
\r
2082 if (hasPrivateLayouts) {
\r
2083 deleteDefaultUserPrivateLayouts(user);
\r
2089 boolean addDefaultUserPublicLayouts = false;
\r
2091 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED &&
\r
2092 PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_AUTO_CREATE) {
\r
2094 addDefaultUserPublicLayouts = true;
\r
2096 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
\r
2097 if (hasPowerUserRole == null) {
\r
2098 hasPowerUserRole = hasPowerUserRole(user);
\r
2101 if (!hasPowerUserRole.booleanValue()) {
\r
2102 addDefaultUserPublicLayouts = false;
\r
2107 Boolean hasPublicLayouts = null;
\r
2109 if (addDefaultUserPublicLayouts) {
\r
2110 hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(user, false);
\r
2112 if (!hasPublicLayouts) {
\r
2113 addDefaultUserPublicLayouts(user);
\r
2117 boolean deleteDefaultUserPublicLayouts = false;
\r
2119 if (!PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED) {
\r
2120 deleteDefaultUserPublicLayouts = true;
\r
2122 else if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
\r
2123 if (hasPowerUserRole == null) {
\r
2124 hasPowerUserRole = hasPowerUserRole(user);
\r
2127 if (!hasPowerUserRole.booleanValue()) {
\r
2128 deleteDefaultUserPublicLayouts = true;
\r
2132 if (deleteDefaultUserPublicLayouts) {
\r
2133 if (hasPublicLayouts == null) {
\r
2134 hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(
\r
2138 if (hasPublicLayouts) {
\r
2139 deleteDefaultUserPublicLayouts(user);
\r
2144 protected File privateLARFile;
\r
2145 protected File publicLARFile;
\r
2147 private static final String _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX =
\r
2150 private static final String _PATH_PORTAL_LAYOUT = "/portal/layout";
\r
2152 private static Log _log = LogFactoryUtil.getLog(ServicePreAction.class);
\r