001
014
015 package com.liferay.portal.events;
016
017 import com.liferay.portal.LayoutPermissionException;
018 import com.liferay.portal.NoSuchGroupException;
019 import com.liferay.portal.NoSuchLayoutException;
020 import com.liferay.portal.NoSuchUserException;
021 import com.liferay.portal.kernel.dao.orm.QueryUtil;
022 import com.liferay.portal.kernel.events.Action;
023 import com.liferay.portal.kernel.events.ActionException;
024 import com.liferay.portal.kernel.exception.PortalException;
025 import com.liferay.portal.kernel.exception.SystemException;
026 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
027 import com.liferay.portal.kernel.log.Log;
028 import com.liferay.portal.kernel.log.LogFactoryUtil;
029 import com.liferay.portal.kernel.portlet.LiferayPortletURL;
030 import com.liferay.portal.kernel.portlet.LiferayWindowState;
031 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
032 import com.liferay.portal.kernel.servlet.HttpHeaders;
033 import com.liferay.portal.kernel.servlet.SessionErrors;
034 import com.liferay.portal.kernel.util.FriendlyURLNormalizerUtil;
035 import com.liferay.portal.kernel.util.GetterUtil;
036 import com.liferay.portal.kernel.util.HttpUtil;
037 import com.liferay.portal.kernel.util.LocaleUtil;
038 import com.liferay.portal.kernel.util.ParamUtil;
039 import com.liferay.portal.kernel.util.PropsKeys;
040 import com.liferay.portal.kernel.util.SessionParamUtil;
041 import com.liferay.portal.kernel.util.StringBundler;
042 import com.liferay.portal.kernel.util.StringPool;
043 import com.liferay.portal.kernel.util.StringUtil;
044 import com.liferay.portal.kernel.util.UnicodeProperties;
045 import com.liferay.portal.kernel.util.Validator;
046 import com.liferay.portal.model.ColorScheme;
047 import com.liferay.portal.model.Company;
048 import com.liferay.portal.model.Group;
049 import com.liferay.portal.model.GroupConstants;
050 import com.liferay.portal.model.Image;
051 import com.liferay.portal.model.Layout;
052 import com.liferay.portal.model.LayoutConstants;
053 import com.liferay.portal.model.LayoutSet;
054 import com.liferay.portal.model.LayoutTypePortlet;
055 import com.liferay.portal.model.LayoutTypePortletConstants;
056 import com.liferay.portal.model.Portlet;
057 import com.liferay.portal.model.RoleConstants;
058 import com.liferay.portal.model.Theme;
059 import com.liferay.portal.model.User;
060 import com.liferay.portal.model.impl.ColorSchemeImpl;
061 import com.liferay.portal.model.impl.VirtualLayout;
062 import com.liferay.portal.security.auth.PrincipalException;
063 import com.liferay.portal.security.permission.ActionKeys;
064 import com.liferay.portal.security.permission.PermissionChecker;
065 import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
066 import com.liferay.portal.security.permission.PermissionThreadLocal;
067 import com.liferay.portal.service.GroupLocalServiceUtil;
068 import com.liferay.portal.service.ImageLocalServiceUtil;
069 import com.liferay.portal.service.LayoutLocalServiceUtil;
070 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
071 import com.liferay.portal.service.PortletLocalServiceUtil;
072 import com.liferay.portal.service.RoleLocalServiceUtil;
073 import com.liferay.portal.service.ServiceContext;
074 import com.liferay.portal.service.ServiceContextFactory;
075 import com.liferay.portal.service.ServiceContextThreadLocal;
076 import com.liferay.portal.service.ThemeLocalServiceUtil;
077 import com.liferay.portal.service.UserLocalServiceUtil;
078 import com.liferay.portal.service.permission.GroupPermissionUtil;
079 import com.liferay.portal.service.permission.LayoutPermissionUtil;
080 import com.liferay.portal.service.permission.PortletPermissionUtil;
081 import com.liferay.portal.theme.ThemeDisplay;
082 import com.liferay.portal.theme.ThemeDisplayFactory;
083 import com.liferay.portal.util.CookieKeys;
084 import com.liferay.portal.util.LayoutClone;
085 import com.liferay.portal.util.LayoutCloneFactory;
086 import com.liferay.portal.util.PortalUtil;
087 import com.liferay.portal.util.PortletCategoryKeys;
088 import com.liferay.portal.util.PortletKeys;
089 import com.liferay.portal.util.PrefsPropsUtil;
090 import com.liferay.portal.util.PropsUtil;
091 import com.liferay.portal.util.PropsValues;
092 import com.liferay.portal.util.WebKeys;
093 import com.liferay.portal.webserver.WebServerServletTokenUtil;
094 import com.liferay.portlet.PortalPreferences;
095 import com.liferay.portlet.PortletPreferencesFactoryUtil;
096 import com.liferay.portlet.PortletURLImpl;
097 import com.liferay.portlet.asset.model.AssetEntry;
098 import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
099 import com.liferay.portlet.journal.NoSuchArticleException;
100 import com.liferay.portlet.journal.model.JournalArticle;
101 import com.liferay.portlet.journal.service.JournalArticleServiceUtil;
102 import com.liferay.portlet.sites.util.SitesUtil;
103
104 import java.io.File;
105
106 import java.util.ArrayList;
107 import java.util.HashMap;
108 import java.util.LinkedHashMap;
109 import java.util.List;
110 import java.util.Locale;
111 import java.util.Map;
112 import java.util.TimeZone;
113
114 import javax.portlet.PortletMode;
115 import javax.portlet.PortletRequest;
116 import javax.portlet.PortletURL;
117 import javax.portlet.WindowState;
118
119 import javax.servlet.http.HttpServletRequest;
120 import javax.servlet.http.HttpServletResponse;
121 import javax.servlet.http.HttpSession;
122
123 import org.apache.commons.lang.time.StopWatch;
124
125
130 public class ServicePreAction extends Action {
131
132 public ServicePreAction() {
133 initImportLARFiles();
134 }
135
136 public ThemeDisplay initThemeDisplay(
137 HttpServletRequest request, HttpServletResponse response)
138 throws Exception {
139
140 HttpSession session = request.getSession();
141
142
143
144 Company company = PortalUtil.getCompany(request);
145
146 long companyId = company.getCompanyId();
147
148
149
150 String cdnHost = PortalUtil.getCDNHost(request);
151
152 String dynamicResourcesCDNHost = StringPool.BLANK;
153
154 boolean cdnDynamicResourceEnabled =
155 PortalUtil.isCDNDynamicResourcesEnabled(request);
156
157 if (cdnDynamicResourceEnabled) {
158 dynamicResourcesCDNHost = cdnHost;
159 }
160
161
162
163 String portalURL = PortalUtil.getPortalURL(request);
164
165
166
167 String contextPath = PortalUtil.getPathContext();
168 String friendlyURLPrivateGroupPath =
169 PortalUtil.getPathFriendlyURLPrivateGroup();
170 String friendlyURLPrivateUserPath =
171 PortalUtil.getPathFriendlyURLPrivateUser();
172 String friendlyURLPublicPath = PortalUtil.getPathFriendlyURLPublic();
173 String imagePath = dynamicResourcesCDNHost.concat(
174 PortalUtil.getPathImage());
175 String mainPath = PortalUtil.getPathMain();
176
177 String i18nPath = (String)request.getAttribute(WebKeys.I18N_PATH);
178
179 if (Validator.isNotNull(i18nPath)) {
180 if (Validator.isNotNull(contextPath)) {
181 String i18nContextPath = contextPath.concat(i18nPath);
182
183 friendlyURLPrivateGroupPath = StringUtil.replaceFirst(
184 friendlyURLPrivateGroupPath, contextPath, i18nContextPath);
185 friendlyURLPrivateUserPath = StringUtil.replaceFirst(
186 friendlyURLPrivateUserPath, contextPath, i18nContextPath);
187 friendlyURLPublicPath = StringUtil.replaceFirst(
188 friendlyURLPublicPath, contextPath, i18nContextPath);
189 mainPath = StringUtil.replaceFirst(
190 mainPath, contextPath, i18nContextPath);
191 }
192 else {
193 friendlyURLPrivateGroupPath = i18nPath.concat(
194 friendlyURLPrivateGroupPath);
195 friendlyURLPrivateUserPath = i18nPath.concat(
196 friendlyURLPrivateUserPath);
197 friendlyURLPublicPath = i18nPath.concat(friendlyURLPublicPath);
198 mainPath = i18nPath.concat(mainPath);
199 }
200 }
201
202
203
204 StringBundler sb = new StringBundler(5);
205
206 sb.append(imagePath);
207 sb.append("/company_logo?img_id=");
208 sb.append(company.getLogoId());
209 sb.append("&t=");
210 sb.append(WebServerServletTokenUtil.getToken(company.getLogoId()));
211
212 String companyLogo = sb.toString();
213
214 int companyLogoHeight = 0;
215 int companyLogoWidth = 0;
216
217 Image companyLogoImage = ImageLocalServiceUtil.getCompanyLogo(
218 company.getLogoId());
219
220 if (companyLogoImage != null) {
221 companyLogoHeight = companyLogoImage.getHeight();
222 companyLogoWidth = companyLogoImage.getWidth();
223 }
224
225 String realCompanyLogo = companyLogo;
226 int realCompanyLogoHeight = companyLogoHeight;
227 int realCompanyLogoWidth = companyLogoWidth;
228
229
230
231 User user = null;
232
233 try {
234 user = PortalUtil.initUser(request);
235 }
236 catch (NoSuchUserException nsue) {
237 return null;
238 }
239
240 boolean signedIn = !user.isDefaultUser();
241
242 if (PropsValues.BROWSER_CACHE_DISABLED ||
243 (PropsValues.BROWSER_CACHE_SIGNED_IN_DISABLED && signedIn)) {
244
245 response.setDateHeader(HttpHeaders.EXPIRES, 0);
246 response.setHeader(
247 HttpHeaders.CACHE_CONTROL,
248 HttpHeaders.CACHE_CONTROL_NO_CACHE_VALUE);
249 response.setHeader(
250 HttpHeaders.PRAGMA, HttpHeaders.PRAGMA_NO_CACHE_VALUE);
251 }
252
253 User realUser = user;
254
255 Long realUserId = (Long)session.getAttribute(WebKeys.USER_ID);
256
257 if (realUserId != null) {
258 if (user.getUserId() != realUserId.longValue()) {
259 realUser = UserLocalServiceUtil.getUserById(
260 realUserId.longValue());
261 }
262 }
263
264 String doAsUserId = ParamUtil.getString(request, "doAsUserId");
265 String doAsUserLanguageId = ParamUtil.getString(
266 request, "doAsUserLanguageId");
267 long doAsGroupId = ParamUtil.getLong(request, "doAsGroupId");
268
269 long refererGroupId = ParamUtil.getLong(request, "refererGroupId");
270
271 long refererPlid = ParamUtil.getLong(request, "refererPlid");
272
273 if (LayoutLocalServiceUtil.fetchLayout(refererPlid) == null) {
274 refererPlid = 0;
275 }
276
277 String controlPanelCategory = ParamUtil.getString(
278 request, "controlPanelCategory");
279
280
281
282 PermissionChecker permissionChecker =
283 PermissionCheckerFactoryUtil.create(user);
284
285 PermissionThreadLocal.setPermissionChecker(permissionChecker);
286
287
288
289 String i18nLanguageId = (String)request.getAttribute(
290 WebKeys.I18N_LANGUAGE_ID);
291
292 Locale locale = PortalUtil.getLocale(request, response, true);
293
294
295
296 try {
297
298
299
300 CookieKeys.validateSupportCookie(request);
301 }
302 catch (Exception e) {
303 CookieKeys.addSupportCookie(request, response);
304 }
305
306
307
308 TimeZone timeZone = user.getTimeZone();
309
310 if (timeZone == null) {
311 timeZone = company.getTimeZone();
312 }
313
314
315
316 if (signedIn) {
317 updateUserLayouts(user);
318 }
319
320 Layout layout = null;
321 List<Layout> layouts = null;
322
323 long plid = ParamUtil.getLong(request, "p_l_id");
324
325 if (plid > 0) {
326 layout = LayoutLocalServiceUtil.getLayout(plid);
327
328 long sourceGroupId = ParamUtil.getLong(request, "p_v_l_s_g_id");
329
330 if ((sourceGroupId > 0) && (sourceGroupId != layout.getGroupId())) {
331 Group sourceGroup = GroupLocalServiceUtil.getGroup(
332 sourceGroupId);
333
334 if (layout.isPublicLayout() ||
335 SitesUtil.isUserGroupLayoutSetViewable(
336 permissionChecker, layout.getGroup())) {
337
338 layout = new VirtualLayout(layout, sourceGroup);
339 }
340 else {
341 layout = null;
342 }
343 }
344 }
345 else {
346 long groupId = ParamUtil.getLong(request, "groupId");
347 boolean privateLayout = ParamUtil.getBoolean(
348 request, "privateLayout");
349 long layoutId = ParamUtil.getLong(request, "layoutId");
350
351 if ((groupId > 0) && (layoutId > 0)) {
352 layout = LayoutLocalServiceUtil.getLayout(
353 groupId, privateLayout, layoutId);
354 }
355 }
356
357 String ppid = ParamUtil.getString(request, "p_p_id");
358
359 Boolean redirectToDefaultLayout = (Boolean)request.getAttribute(
360 WebKeys.REDIRECT_TO_DEFAULT_LAYOUT);
361
362 if (redirectToDefaultLayout == null) {
363 redirectToDefaultLayout = Boolean.FALSE;
364 }
365
366 if (layout != null) {
367 Group group = layout.getGroup();
368
369 if (!signedIn && PropsValues.AUTH_FORWARD_BY_REDIRECT) {
370 request.setAttribute(WebKeys.REQUESTED_LAYOUT, layout);
371 }
372
373 if (Validator.isNull(controlPanelCategory) &&
374 Validator.isNotNull(ppid) &&
375 (LiferayWindowState.isPopUp(request) ||
376 LiferayWindowState.isExclusive(request))) {
377
378 controlPanelCategory =
379 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX + ppid;
380 }
381
382 boolean viewableGroup = LayoutPermissionUtil.contains(
383 permissionChecker, layout, controlPanelCategory, true,
384 ActionKeys.VIEW);
385 boolean viewableStaging = GroupPermissionUtil.contains(
386 permissionChecker, group.getGroupId(), ActionKeys.VIEW_STAGING);
387
388 if (viewableStaging) {
389 layouts = LayoutLocalServiceUtil.getLayouts(
390 layout.getGroupId(), layout.isPrivateLayout(),
391 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
392 }
393 else if (!viewableGroup && group.isStagingGroup()) {
394 layout = null;
395 }
396 else if (!isLoginRequest(request) &&
397 (!viewableGroup ||
398 (!redirectToDefaultLayout &&
399 !LayoutPermissionUtil.contains(
400 permissionChecker, layout, false,
401 ActionKeys.VIEW)))) {
402
403 if (user.isDefaultUser() &&
404 PropsValues.AUTH_LOGIN_PROMPT_ENABLED) {
405
406 throw new PrincipalException("User is not authenticated");
407 }
408
409 sb = new StringBundler(6);
410
411 sb.append("User ");
412 sb.append(user.getUserId());
413 sb.append(" is not allowed to access the ");
414 sb.append(layout.isPrivateLayout() ? "private": "public");
415 sb.append(" pages of group ");
416 sb.append(layout.getGroupId());
417
418 if (_log.isWarnEnabled()) {
419 _log.warn(sb.toString());
420 }
421
422 throw new NoSuchLayoutException(sb.toString());
423 }
424 else if (isLoginRequest(request) && !viewableGroup) {
425 layout = null;
426 }
427 else if (group.isLayoutPrototype()) {
428 layouts = new ArrayList<Layout>();
429 }
430 else {
431 layouts = LayoutLocalServiceUtil.getLayouts(
432 layout.getGroupId(), layout.isPrivateLayout(),
433 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
434
435 if (!group.isControlPanel()) {
436 doAsGroupId = 0;
437 }
438 }
439 }
440
441 List<Layout> unfilteredLayouts = layouts;
442
443 if (layout == null) {
444 Object[] defaultLayout = getDefaultLayout(request, user, signedIn);
445
446 layout = (Layout)defaultLayout[0];
447 layouts = (List<Layout>)defaultLayout[1];
448
449 request.setAttribute(WebKeys.LAYOUT_DEFAULT, Boolean.TRUE);
450 }
451
452 Object[] viewableLayouts = getViewableLayouts(
453 request, user, permissionChecker, layout, layouts);
454
455 String layoutSetLogo = null;
456
457 layout = (Layout)viewableLayouts[0];
458 layouts = (List<Layout>)viewableLayouts[1];
459
460 Group group = null;
461
462 if (layout != null) {
463 group = layout.getGroup();
464
465 if (!group.isControlPanel()) {
466 rememberVisitedGroupIds(request, group.getGroupId());
467 }
468 }
469
470 LayoutTypePortlet layoutTypePortlet = null;
471
472 layouts = mergeAdditionalLayouts(
473 request, user, permissionChecker, layout, layouts);
474
475 LayoutSet layoutSet = null;
476
477 boolean hasCustomizeLayoutPermission = false;
478 boolean hasUpdateLayoutPermission = false;
479
480 boolean customizedView = SessionParamUtil.getBoolean(
481 request, "customized_view", true);
482
483 if (layout != null) {
484 hasCustomizeLayoutPermission = LayoutPermissionUtil.contains(
485 permissionChecker, layout, ActionKeys.CUSTOMIZE);
486 hasUpdateLayoutPermission = LayoutPermissionUtil.contains(
487 permissionChecker, layout, ActionKeys.UPDATE);
488
489 layoutSet = layout.getLayoutSet();
490
491 if (company.isSiteLogo()) {
492 long logoId = 0;
493
494 if (layoutSet.isLogo()) {
495 logoId = layoutSet.getLogoId();
496
497 if (logoId == 0) {
498 logoId = layoutSet.getLiveLogoId();
499 }
500 }
501 else {
502 LayoutSet siblingLayoutSet =
503 LayoutSetLocalServiceUtil.getLayoutSet(
504 layout.getGroupId(), !layout.isPrivateLayout());
505
506 if (siblingLayoutSet.isLogo()) {
507 logoId = siblingLayoutSet.getLogoId();
508 }
509 }
510
511 if (logoId > 0) {
512 sb = new StringBundler(5);
513
514 sb.append(imagePath);
515 sb.append("/layout_set_logo?img_id=");
516 sb.append(logoId);
517 sb.append("&t=");
518 sb.append(WebServerServletTokenUtil.getToken(logoId));
519
520 layoutSetLogo = sb.toString();
521
522 Image layoutSetLogoImage =
523 ImageLocalServiceUtil.getCompanyLogo(logoId);
524
525 companyLogo = layoutSetLogo;
526 companyLogoHeight = layoutSetLogoImage.getHeight();
527 companyLogoWidth = layoutSetLogoImage.getWidth();
528 }
529 }
530
531 plid = layout.getPlid();
532
533
534
535
536 layout = (Layout)layout.clone();
537
538 layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType();
539
540 boolean customizable = layoutTypePortlet.isCustomizable();
541
542 if (!customizable ||
543 (group.isLayoutPrototype() || group.isLayoutSetPrototype())) {
544
545 customizedView = false;
546 }
547
548 layoutTypePortlet.setCustomizedView(customizedView);
549 layoutTypePortlet.setUpdatePermission(hasUpdateLayoutPermission);
550
551 if (signedIn && customizable && customizedView &&
552 hasCustomizeLayoutPermission) {
553
554 PortalPreferences portalPreferences =
555 PortletPreferencesFactoryUtil.getPortalPreferences(
556 companyId, user.getUserId(), true);
557
558 layoutTypePortlet.setPortalPreferences(portalPreferences);
559 }
560
561 LayoutClone layoutClone = LayoutCloneFactory.getInstance();
562
563 if (layoutClone != null) {
564 String typeSettings = layoutClone.get(request, plid);
565
566 if (typeSettings != null) {
567 UnicodeProperties typeSettingsProperties =
568 new UnicodeProperties(true);
569
570 typeSettingsProperties.load(typeSettings);
571
572 String stateMax = typeSettingsProperties.getProperty(
573 LayoutTypePortletConstants.STATE_MAX);
574 String stateMin = typeSettingsProperties.getProperty(
575 LayoutTypePortletConstants.STATE_MIN);
576 String modeAbout = typeSettingsProperties.getProperty(
577 LayoutTypePortletConstants.MODE_ABOUT);
578 String modeConfig = typeSettingsProperties.getProperty(
579 LayoutTypePortletConstants.MODE_CONFIG);
580 String modeEdit = typeSettingsProperties.getProperty(
581 LayoutTypePortletConstants.MODE_EDIT);
582 String modeEditDefaults =
583 typeSettingsProperties.getProperty(
584 LayoutTypePortletConstants.MODE_EDIT_DEFAULTS);
585 String modeEditGuest = typeSettingsProperties.getProperty(
586 LayoutTypePortletConstants.MODE_EDIT_GUEST);
587 String modeHelp = typeSettingsProperties.getProperty(
588 LayoutTypePortletConstants.MODE_HELP);
589 String modePreview = typeSettingsProperties.getProperty(
590 LayoutTypePortletConstants.MODE_PREVIEW);
591 String modePrint = typeSettingsProperties.getProperty(
592 LayoutTypePortletConstants.MODE_PRINT);
593
594 layoutTypePortlet.setStateMax(stateMax);
595 layoutTypePortlet.setStateMin(stateMin);
596 layoutTypePortlet.setModeAbout(modeAbout);
597 layoutTypePortlet.setModeConfig(modeConfig);
598 layoutTypePortlet.setModeEdit(modeEdit);
599 layoutTypePortlet.setModeEditDefaults(modeEditDefaults);
600 layoutTypePortlet.setModeEditGuest(modeEditGuest);
601 layoutTypePortlet.setModeHelp(modeHelp);
602 layoutTypePortlet.setModePreview(modePreview);
603 layoutTypePortlet.setModePrint(modePrint);
604 }
605 }
606
607 request.setAttribute(WebKeys.LAYOUT, layout);
608 request.setAttribute(WebKeys.LAYOUTS, layouts);
609 }
610
611
612
613 long scopeGroupId = PortalUtil.getScopeGroupId(request);
614
615 if ((scopeGroupId <= 0) && (doAsGroupId > 0)) {
616 scopeGroupId = doAsGroupId;
617 }
618
619 long parentGroupId = PortalUtil.getParentGroupId(scopeGroupId);
620
621
622
623 Theme theme = null;
624 ColorScheme colorScheme = null;
625
626 boolean wapTheme = BrowserSnifferUtil.isWap(request);
627
628 if ((layout != null) && group.isControlPanel()) {
629 String themeId = PrefsPropsUtil.getString(
630 companyId, PropsKeys.CONTROL_PANEL_LAYOUT_REGULAR_THEME_ID);
631 String colorSchemeId =
632 ColorSchemeImpl.getDefaultRegularColorSchemeId();
633
634 theme = ThemeLocalServiceUtil.getTheme(
635 companyId, themeId, wapTheme);
636 colorScheme = ThemeLocalServiceUtil.getColorScheme(
637 companyId, theme.getThemeId(), colorSchemeId, wapTheme);
638
639 if (!wapTheme && theme.isWapTheme()) {
640 theme = ThemeLocalServiceUtil.getTheme(
641 companyId,
642 PropsValues.CONTROL_PANEL_LAYOUT_REGULAR_THEME_ID, false);
643 colorScheme = ThemeLocalServiceUtil.getColorScheme(
644 companyId, theme.getThemeId(), colorSchemeId, false);
645 }
646
647 request.setAttribute(WebKeys.THEME, theme);
648 request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);
649 }
650
651 boolean themeCssFastLoad = SessionParamUtil.getBoolean(
652 request, "css_fast_load", PropsValues.THEME_CSS_FAST_LOAD);
653 boolean themeImagesFastLoad = SessionParamUtil.getBoolean(
654 request, "images_fast_load", PropsValues.THEME_IMAGES_FAST_LOAD);
655
656 boolean themeJsBarebone = PropsValues.JAVASCRIPT_BAREBONE_ENABLED;
657
658 if (themeJsBarebone) {
659 if (signedIn) {
660 themeJsBarebone = false;
661 }
662 }
663
664 boolean themeJsFastLoad = SessionParamUtil.getBoolean(
665 request, "js_fast_load", PropsValues.JAVASCRIPT_FAST_LOAD);
666
667 String lifecycle = ParamUtil.getString(request, "p_p_lifecycle", "0");
668
669 lifecycle = ParamUtil.getString(request, "p_t_lifecycle", lifecycle);
670
671 boolean isolated = ParamUtil.getBoolean(request, "p_p_isolated");
672
673 String facebookCanvasPageURL = (String)request.getAttribute(
674 WebKeys.FACEBOOK_CANVAS_PAGE_URL);
675
676 boolean widget = false;
677
678 Boolean widgetObj = (Boolean)request.getAttribute(WebKeys.WIDGET);
679
680 if (widgetObj != null) {
681 widget = widgetObj.booleanValue();
682 }
683
684
685
686 ThemeDisplay themeDisplay = ThemeDisplayFactory.create();
687
688
689
690
691 themeDisplay.setCDNHost(cdnHost);
692 themeDisplay.setCDNDynamicResourcesHost(dynamicResourcesCDNHost);
693 themeDisplay.setPortalURL(portalURL);
694 themeDisplay.setFacebookCanvasPageURL(facebookCanvasPageURL);
695 themeDisplay.setWidget(widget);
696
697 themeDisplay.setCompany(company);
698 themeDisplay.setCompanyLogo(companyLogo);
699 themeDisplay.setCompanyLogoHeight(companyLogoHeight);
700 themeDisplay.setCompanyLogoWidth(companyLogoWidth);
701 themeDisplay.setRealCompanyLogo(realCompanyLogo);
702 themeDisplay.setRealCompanyLogoHeight(realCompanyLogoHeight);
703 themeDisplay.setRealCompanyLogoWidth(realCompanyLogoWidth);
704 themeDisplay.setUser(user);
705 themeDisplay.setRealUser(realUser);
706 themeDisplay.setDoAsUserId(doAsUserId);
707 themeDisplay.setDoAsUserLanguageId(doAsUserLanguageId);
708 themeDisplay.setDoAsGroupId(doAsGroupId);
709 themeDisplay.setRefererGroupId(refererGroupId);
710 themeDisplay.setRefererPlid(refererPlid);
711 themeDisplay.setControlPanelCategory(controlPanelCategory);
712 themeDisplay.setLayoutSet(layoutSet);
713 themeDisplay.setLayoutSetLogo(layoutSetLogo);
714 themeDisplay.setLayout(layout);
715 themeDisplay.setLayouts(layouts);
716 themeDisplay.setUnfilteredLayouts(unfilteredLayouts);
717 themeDisplay.setPlid(plid);
718 themeDisplay.setPpid(ppid);
719 themeDisplay.setLayoutTypePortlet(layoutTypePortlet);
720 themeDisplay.setScopeGroupId(scopeGroupId);
721 themeDisplay.setParentGroupId(parentGroupId);
722 themeDisplay.setSignedIn(signedIn);
723 themeDisplay.setPermissionChecker(permissionChecker);
724 themeDisplay.setLocale(locale);
725 themeDisplay.setLanguageId(LocaleUtil.toLanguageId(locale));
726 themeDisplay.setI18nLanguageId(i18nLanguageId);
727 themeDisplay.setI18nPath(i18nPath);
728 themeDisplay.setTimeZone(timeZone);
729 themeDisplay.setLookAndFeel(theme, colorScheme);
730 themeDisplay.setThemeCssFastLoad(themeCssFastLoad);
731 themeDisplay.setThemeImagesFastLoad(themeImagesFastLoad);
732 themeDisplay.setThemeJsBarebone(themeJsBarebone);
733 themeDisplay.setThemeJsFastLoad(themeJsFastLoad);
734 themeDisplay.setServerName(request.getServerName());
735 themeDisplay.setServerPort(request.getServerPort());
736 themeDisplay.setSecure(request.isSecure());
737 themeDisplay.setLifecycle(lifecycle);
738 themeDisplay.setLifecycleAction(lifecycle.equals("1"));
739 themeDisplay.setLifecycleEvent(lifecycle.equals("3"));
740 themeDisplay.setLifecycleRender(lifecycle.equals("0"));
741 themeDisplay.setLifecycleResource(lifecycle.equals("2"));
742 themeDisplay.setStateExclusive(LiferayWindowState.isExclusive(request));
743 themeDisplay.setStateMaximized(LiferayWindowState.isMaximized(request));
744 themeDisplay.setStatePopUp(LiferayWindowState.isPopUp(request));
745 themeDisplay.setIsolated(isolated);
746 themeDisplay.setPathApplet(contextPath.concat("/applets"));
747 themeDisplay.setPathCms(contextPath.concat("/cms"));
748 themeDisplay.setPathContext(contextPath);
749 themeDisplay.setPathFlash(contextPath.concat("/flash"));
750 themeDisplay.setPathFriendlyURLPrivateGroup(
751 friendlyURLPrivateGroupPath);
752 themeDisplay.setPathFriendlyURLPrivateUser(friendlyURLPrivateUserPath);
753 themeDisplay.setPathFriendlyURLPublic(friendlyURLPublicPath);
754 themeDisplay.setPathImage(imagePath);
755 themeDisplay.setPathJavaScript(contextPath.concat("/html/js"));
756 themeDisplay.setPathMain(mainPath);
757 themeDisplay.setPathSound(contextPath.concat("/html/sound"));
758
759
760
761 themeDisplay.setShowAddContentIcon(false);
762 themeDisplay.setShowControlPanelIcon(signedIn);
763 themeDisplay.setShowHomeIcon(true);
764 themeDisplay.setShowMyAccountIcon(signedIn);
765 themeDisplay.setShowPageSettingsIcon(false);
766 themeDisplay.setShowPortalIcon(true);
767 themeDisplay.setShowSignInIcon(!signedIn);
768 themeDisplay.setShowSignOutIcon(signedIn);
769
770 boolean showSiteContentIcon = false;
771
772 long controlPanelPlid = 0;
773
774 if (signedIn && PropsValues.DOCKBAR_SHOW_SITE_CONTENT_ICON) {
775 Group controlPanelGroup = GroupLocalServiceUtil.getGroup(
776 companyId, GroupConstants.CONTROL_PANEL);
777
778 controlPanelPlid = LayoutLocalServiceUtil.getDefaultPlid(
779 controlPanelGroup.getGroupId(), true);
780
781 List<Portlet> siteContentPortlets =
782 PortalUtil.getControlPanelPortlets(
783 PortletCategoryKeys.CONTENT, themeDisplay);
784
785 Portlet groupPagesPortlet = PortletLocalServiceUtil.getPortletById(
786 PortletKeys.GROUP_PAGES);
787
788 siteContentPortlets.remove(groupPagesPortlet);
789
790 Portlet siteMembershipsAdminPortlet =
791 PortletLocalServiceUtil.getPortletById(
792 PortletKeys.SITE_MEMBERSHIPS_ADMIN);
793
794 siteContentPortlets.remove(siteMembershipsAdminPortlet);
795
796 Portlet siteSettingsPortlet =
797 PortletLocalServiceUtil.getPortletById(
798 PortletKeys.SITE_SETTINGS);
799
800 siteContentPortlets.remove(siteSettingsPortlet);
801
802 showSiteContentIcon = PortletPermissionUtil.contains(
803 permissionChecker, scopeGroupId, controlPanelPlid,
804 siteContentPortlets, ActionKeys.VIEW);
805 }
806
807 themeDisplay.setShowSiteContentIcon(showSiteContentIcon);
808
809 themeDisplay.setShowStagingIcon(false);
810
811
812
813 if (PropsValues.SESSION_ENABLE_URL_WITH_SESSION_ID &&
814 !CookieKeys.hasSessionId(request)) {
815
816 themeDisplay.setAddSessionIdToURL(true);
817 themeDisplay.setSessionId(session.getId());
818 }
819
820
821
822 String urlControlPanel = friendlyURLPrivateGroupPath.concat(
823 GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
824
825 if (Validator.isNotNull(doAsUserId)) {
826 urlControlPanel = HttpUtil.addParameter(
827 urlControlPanel, "doAsUserId", doAsUserId);
828 }
829
830 if (scopeGroupId > 0) {
831 urlControlPanel = HttpUtil.addParameter(
832 urlControlPanel, "doAsGroupId", scopeGroupId);
833 }
834
835 if (refererGroupId > 0) {
836 urlControlPanel = HttpUtil.addParameter(
837 urlControlPanel, "refererGroupId", refererGroupId);
838 }
839 else if (scopeGroupId > 0) {
840 Layout refererLayout = LayoutLocalServiceUtil.fetchLayout(plid);
841
842 if (refererLayout != null) {
843 Group refererLayoutGroup = refererLayout.getGroup();
844
845 if (refererLayoutGroup.isUserGroup()) {
846 urlControlPanel = HttpUtil.addParameter(
847 urlControlPanel, "refererGroupId", scopeGroupId);
848 }
849 }
850 }
851
852 if (refererPlid > 0) {
853 urlControlPanel = HttpUtil.addParameter(
854 urlControlPanel, "refererPlid", refererPlid);
855 }
856 else if (plid > 0) {
857 urlControlPanel = HttpUtil.addParameter(
858 urlControlPanel, "refererPlid", plid);
859 }
860
861 if (themeDisplay.isAddSessionIdToURL()) {
862 urlControlPanel = PortalUtil.getURLWithSessionId(
863 urlControlPanel, session.getId());
864 }
865
866 themeDisplay.setURLControlPanel(urlControlPanel);
867
868 String siteContentURL = urlControlPanel;
869
870 siteContentURL = HttpUtil.addParameter(
871 siteContentURL, "controlPanelCategory",
872 PortletCategoryKeys.CONTENT);
873
874 themeDisplay.setURLSiteContent(siteContentURL);
875
876 String currentURL = PortalUtil.getCurrentURL(request);
877
878 themeDisplay.setURLCurrent(currentURL);
879
880 String urlHome = PortalUtil.getHomeURL(request);
881
882 themeDisplay.setURLHome(urlHome);
883
884 if (layout != null) {
885 if (layout.isTypePortlet()) {
886 boolean freeformLayout =
887 layoutTypePortlet.getLayoutTemplateId().equals("freeform");
888
889 themeDisplay.setFreeformLayout(freeformLayout);
890
891 if (hasUpdateLayoutPermission) {
892 themeDisplay.setShowAddContentIconPermission(true);
893
894 if (!LiferayWindowState.isMaximized(request)) {
895 themeDisplay.setShowAddContentIcon(true);
896 }
897
898 themeDisplay.setShowLayoutTemplatesIcon(true);
899
900 if (!group.isUser()) {
901 themeDisplay.setShowPageCustomizationIcon(true);
902 }
903
904 themeDisplay.setURLAddContent(
905 "Liferay.LayoutConfiguration.toggle('".concat(
906 PortletKeys.LAYOUT_CONFIGURATION).concat("');"));
907 }
908
909 if (hasCustomizeLayoutPermission && customizedView) {
910 themeDisplay.setShowAddContentIconPermission(true);
911
912 if (!LiferayWindowState.isMaximized(request)) {
913 themeDisplay.setShowAddContentIcon(true);
914 }
915
916 themeDisplay.setURLAddContent(
917 "Liferay.LayoutConfiguration.toggle('".concat(
918 PortletKeys.LAYOUT_CONFIGURATION).concat("');"));
919 }
920 }
921
922 if (hasUpdateLayoutPermission) {
923 themeDisplay.setShowPageSettingsIcon(true);
924
925 LiferayPortletURL pageSettingsURL = new PortletURLImpl(
926 request, PortletKeys.LAYOUTS_ADMIN, controlPanelPlid,
927 PortletRequest.RENDER_PHASE);
928
929 pageSettingsURL.setDoAsGroupId(scopeGroupId);
930 pageSettingsURL.setParameter(
931 "struts_action", "/layouts_admin/edit_layouts");
932
933 if (layout.isPrivateLayout()) {
934 pageSettingsURL.setParameter("tabs1", "private-pages");
935 }
936 else {
937 pageSettingsURL.setParameter("tabs1", "public-pages");
938 }
939
940 pageSettingsURL.setParameter(
941 "groupId", String.valueOf(scopeGroupId));
942 pageSettingsURL.setParameter("selPlid", String.valueOf(plid));
943 pageSettingsURL.setPortletMode(PortletMode.VIEW);
944
945 if (PropsValues.DOCKBAR_ADMINISTRATIVE_LINKS_SHOW_IN_POP_UP) {
946 pageSettingsURL.setControlPanelCategory(
947 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
948 PortletKeys.LAYOUTS_ADMIN);
949 pageSettingsURL.setParameter("closeRedirect", currentURL);
950 pageSettingsURL.setWindowState(LiferayWindowState.POP_UP);
951 }
952 else {
953 pageSettingsURL.setParameter(
954 "redirect", themeDisplay.getURLHome());
955 pageSettingsURL.setPlid(plid);
956 pageSettingsURL.setWindowState(WindowState.MAXIMIZED);
957 }
958
959 themeDisplay.setURLPageSettings(pageSettingsURL);
960
961 boolean site = group.isSite();
962
963 if (!site && group.isStagingGroup()) {
964 Group liveGroup = group.getLiveGroup();
965
966 site = liveGroup.isSite();
967 }
968
969 if (site &&
970 GroupPermissionUtil.contains(
971 permissionChecker, scopeGroupId,
972 ActionKeys.ASSIGN_MEMBERS)) {
973
974 themeDisplay.setShowManageSiteMembershipsIcon(true);
975
976 LiferayPortletURL manageSiteMembershipsURL =
977 new PortletURLImpl(
978 request, PortletKeys.SITE_MEMBERSHIPS_ADMIN,
979 controlPanelPlid, PortletRequest.RENDER_PHASE);
980
981 manageSiteMembershipsURL.setDoAsGroupId(scopeGroupId);
982 manageSiteMembershipsURL.setParameter(
983 "struts_action", "/sites_admin/edit_site_assignments");
984 manageSiteMembershipsURL.setParameter(
985 "groupId", String.valueOf(scopeGroupId));
986 manageSiteMembershipsURL.setParameter(
987 "selPlid", String.valueOf(plid));
988 manageSiteMembershipsURL.setPortletMode(PortletMode.VIEW);
989
990 if (PropsValues.
991 DOCKBAR_ADMINISTRATIVE_LINKS_SHOW_IN_POP_UP) {
992
993 manageSiteMembershipsURL.setControlPanelCategory(
994 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
995 PortletKeys.SITE_MEMBERSHIPS_ADMIN);
996 manageSiteMembershipsURL.setWindowState(
997 LiferayWindowState.POP_UP);
998 }
999 else {
1000 manageSiteMembershipsURL.setParameter(
1001 "redirect", themeDisplay.getURLHome());
1002 manageSiteMembershipsURL.setParameter(
1003 "showBackURL", Boolean.FALSE.toString());
1004 manageSiteMembershipsURL.setPlid(plid);
1005 manageSiteMembershipsURL.setWindowState(
1006 WindowState.MAXIMIZED);
1007 }
1008
1009 themeDisplay.setURLManageSiteMemberships(
1010 manageSiteMembershipsURL);
1011 }
1012 else {
1013 themeDisplay.setShowManageSiteMembershipsIcon(false);
1014 }
1015 }
1016
1017 boolean hasAddLayoutGroupPermission = GroupPermissionUtil.contains(
1018 permissionChecker, scopeGroupId, ActionKeys.ADD_LAYOUT);
1019 boolean hasAddLayoutLayoutPermission =
1020 LayoutPermissionUtil.contains(
1021 permissionChecker, layout, ActionKeys.ADD_LAYOUT);
1022 boolean hasManageLayoutsGroupPermission =
1023 GroupPermissionUtil.contains(
1024 permissionChecker, scopeGroupId, ActionKeys.MANAGE_LAYOUTS);
1025 boolean hasManageStagingPermission = GroupPermissionUtil.contains(
1026 permissionChecker, scopeGroupId, ActionKeys.MANAGE_STAGING);
1027 boolean hasPublishStagingPermission = GroupPermissionUtil.contains(
1028 permissionChecker, scopeGroupId, ActionKeys.PUBLISH_STAGING);
1029 boolean hasUpdateGroupPermission = GroupPermissionUtil.contains(
1030 permissionChecker, scopeGroupId, ActionKeys.UPDATE);
1031 boolean hasViewStagingPermission = GroupPermissionUtil.contains(
1032 permissionChecker, scopeGroupId, ActionKeys.VIEW_STAGING);
1033
1034 if (!group.isControlPanel() && !group.isUser() &&
1035 !group.isUserGroup() && hasUpdateGroupPermission) {
1036
1037 themeDisplay.setShowSiteSettingsIcon(true);
1038
1039 LiferayPortletURL siteSettingsURL = new PortletURLImpl(
1040 request, PortletKeys.SITE_SETTINGS, controlPanelPlid,
1041 PortletRequest.RENDER_PHASE);
1042
1043 siteSettingsURL.setDoAsGroupId(scopeGroupId);
1044 siteSettingsURL.setParameter(
1045 "struts_action", "/sites_admin/edit_site");
1046 siteSettingsURL.setParameter(
1047 "groupId", String.valueOf(scopeGroupId));
1048 siteSettingsURL.setParameter(
1049 "showBackURL", Boolean.FALSE.toString());
1050 siteSettingsURL.setPortletMode(PortletMode.VIEW);
1051
1052 if (PropsValues.DOCKBAR_ADMINISTRATIVE_LINKS_SHOW_IN_POP_UP) {
1053 siteSettingsURL.setControlPanelCategory(
1054 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
1055 PortletKeys.SITE_SETTINGS);
1056 siteSettingsURL.setParameter("closeRedirect", currentURL);
1057 siteSettingsURL.setWindowState(LiferayWindowState.POP_UP);
1058 }
1059 else {
1060 siteSettingsURL.setParameter(
1061 "redirect", themeDisplay.getURLHome());
1062 siteSettingsURL.setPlid(plid);
1063 siteSettingsURL.setWindowState(
1064 LiferayWindowState.MAXIMIZED);
1065 }
1066
1067 themeDisplay.setURLSiteSettings(siteSettingsURL);
1068 }
1069
1070 if (!group.isLayoutPrototype() &&
1071 (hasAddLayoutGroupPermission || hasAddLayoutLayoutPermission ||
1072 hasManageLayoutsGroupPermission || hasUpdateGroupPermission)) {
1073
1074 themeDisplay.setShowSiteMapSettingsIcon(true);
1075
1076 LiferayPortletURL siteMapSettingsURL = new PortletURLImpl(
1077 request, PortletKeys.LAYOUTS_ADMIN, controlPanelPlid,
1078 PortletRequest.RENDER_PHASE);
1079
1080 siteMapSettingsURL.setDoAsGroupId(scopeGroupId);
1081 siteMapSettingsURL.setParameter(
1082 "struts_action", "/layouts_admin/edit_layouts");
1083
1084 if (layout.isPrivateLayout()) {
1085 siteMapSettingsURL.setParameter("tabs1", "private-pages");
1086 }
1087 else {
1088 siteMapSettingsURL.setParameter("tabs1", "public-pages");
1089 }
1090
1091 siteMapSettingsURL.setParameter(
1092 "groupId", String.valueOf(scopeGroupId));
1093 siteMapSettingsURL.setPortletMode(PortletMode.VIEW);
1094
1095 if (PropsValues.DOCKBAR_ADMINISTRATIVE_LINKS_SHOW_IN_POP_UP) {
1096 siteMapSettingsURL.setControlPanelCategory(
1097 _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX +
1098 PortletKeys.LAYOUTS_ADMIN);
1099 siteMapSettingsURL.setParameter(
1100 "closeRedirect", currentURL);
1101 siteMapSettingsURL.setWindowState(
1102 LiferayWindowState.POP_UP);
1103 }
1104 else {
1105 siteMapSettingsURL.setParameter(
1106 "redirect", themeDisplay.getURLHome());
1107 siteMapSettingsURL.setPlid(plid);
1108 siteMapSettingsURL.setWindowState(
1109 LiferayWindowState.MAXIMIZED);
1110 }
1111
1112 themeDisplay.setURLSiteMapSettings(siteMapSettingsURL);
1113 }
1114
1115 if (group.hasStagingGroup() && !group.isStagingGroup()) {
1116 themeDisplay.setShowAddContentIcon(false);
1117 themeDisplay.setShowLayoutTemplatesIcon(false);
1118 themeDisplay.setShowPageSettingsIcon(false);
1119 themeDisplay.setURLPublishToLive(null);
1120 }
1121
1122 if (group.isControlPanel()) {
1123 themeDisplay.setShowPageSettingsIcon(false);
1124 themeDisplay.setURLPublishToLive(null);
1125 }
1126
1127
1128
1129 if (group.isStaged() || group.isStagingGroup()) {
1130 if (hasManageStagingPermission || hasPublishStagingPermission ||
1131 hasUpdateLayoutPermission || hasViewStagingPermission) {
1132
1133 themeDisplay.setShowStagingIcon(true);
1134 }
1135
1136 if (hasPublishStagingPermission) {
1137 PortletURL publishToLiveURL = new PortletURLImpl(
1138 request, PortletKeys.LAYOUTS_ADMIN, plid,
1139 PortletRequest.RENDER_PHASE);
1140
1141 publishToLiveURL.setParameter(
1142 "struts_action", "/layouts_admin/publish_layouts");
1143
1144 if (layout.isPrivateLayout()) {
1145 publishToLiveURL.setParameter("tabs1", "private-pages");
1146 }
1147 else {
1148 publishToLiveURL.setParameter("tabs1", "public-pages");
1149 }
1150
1151 publishToLiveURL.setParameter("pagesRedirect", currentURL);
1152 publishToLiveURL.setParameter(
1153 "groupId", String.valueOf(scopeGroupId));
1154 publishToLiveURL.setParameter(
1155 "selPlid", String.valueOf(plid));
1156 publishToLiveURL.setPortletMode(PortletMode.VIEW);
1157 publishToLiveURL.setWindowState(
1158 LiferayWindowState.EXCLUSIVE);
1159
1160 themeDisplay.setURLPublishToLive(publishToLiveURL);
1161 }
1162 }
1163
1164 PortletURLImpl myAccountURL = new PortletURLImpl(
1165 request, PortletKeys.MY_ACCOUNT, controlPanelPlid,
1166 PortletRequest.RENDER_PHASE);
1167
1168 if (scopeGroupId > 0) {
1169 myAccountURL.setDoAsGroupId(scopeGroupId);
1170 }
1171
1172 myAccountURL.setParameter("struts_action", "/my_account/edit_user");
1173 myAccountURL.setPortletMode(PortletMode.VIEW);
1174
1175 if (refererPlid > 0) {
1176 myAccountURL.setRefererPlid(refererPlid);
1177 }
1178 else {
1179 myAccountURL.setRefererPlid(plid);
1180 }
1181
1182 myAccountURL.setWindowState(WindowState.MAXIMIZED);
1183
1184 themeDisplay.setURLMyAccount(myAccountURL);
1185 }
1186
1187 if (!user.isActive() ||
1188 (PrefsPropsUtil.getBoolean(
1189 companyId, PropsKeys.TERMS_OF_USE_REQUIRED) &&
1190 !user.isAgreedToTermsOfUse())) {
1191
1192 themeDisplay.setShowAddContentIcon(false);
1193 themeDisplay.setShowMyAccountIcon(false);
1194 themeDisplay.setShowPageSettingsIcon(false);
1195 }
1196
1197 if (layout.isLayoutPrototypeLinkActive()) {
1198 themeDisplay.setShowPageCustomizationIcon(false);
1199 }
1200
1201 if (group.isLayoutPrototype()) {
1202 themeDisplay.setShowControlPanelIcon(false);
1203 themeDisplay.setShowHomeIcon(false);
1204 themeDisplay.setShowManageSiteMembershipsIcon(false);
1205 themeDisplay.setShowMyAccountIcon(false);
1206 themeDisplay.setShowPageCustomizationIcon(false);
1207 themeDisplay.setShowPageSettingsIcon(true);
1208 themeDisplay.setShowPortalIcon(false);
1209 themeDisplay.setShowSignInIcon(false);
1210 themeDisplay.setShowSignOutIcon(false);
1211 themeDisplay.setShowSiteContentIcon(false);
1212 themeDisplay.setShowSiteSettingsIcon(false);
1213 themeDisplay.setShowStagingIcon(false);
1214 }
1215
1216 if (group.isLayoutSetPrototype()) {
1217 themeDisplay.setShowPageCustomizationIcon(false);
1218 themeDisplay.setShowSiteSettingsIcon(false);
1219 }
1220
1221 if (group.hasStagingGroup() && !group.isStagingGroup()) {
1222 themeDisplay.setShowLayoutTemplatesIcon(false);
1223 themeDisplay.setShowPageCustomizationIcon(false);
1224 themeDisplay.setShowPageSettingsIcon(false);
1225 themeDisplay.setShowSiteContentIcon(false);
1226 themeDisplay.setShowSiteMapSettingsIcon(false);
1227 themeDisplay.setShowSiteSettingsIcon(false);
1228 }
1229
1230 themeDisplay.setURLPortal(portalURL.concat(contextPath));
1231
1232 String urlSignIn = mainPath.concat("/portal/login");
1233
1234 if (layout != null) {
1235 urlSignIn = HttpUtil.addParameter(
1236 urlSignIn, "p_l_id", layout.getPlid());
1237 }
1238
1239 themeDisplay.setURLSignIn(urlSignIn);
1240
1241 themeDisplay.setURLSignOut(mainPath.concat("/portal/logout"));
1242
1243 PortletURL updateManagerURL = new PortletURLImpl(
1244 request, PortletKeys.UPDATE_MANAGER, plid,
1245 PortletRequest.RENDER_PHASE);
1246
1247 updateManagerURL.setParameter("struts_action", "/update_manager/view");
1248 updateManagerURL.setPortletMode(PortletMode.VIEW);
1249 updateManagerURL.setWindowState(WindowState.MAXIMIZED);
1250
1251 themeDisplay.setURLUpdateManager(updateManagerURL);
1252
1253 return themeDisplay;
1254 }
1255
1256 @Override
1257 public void run(HttpServletRequest request, HttpServletResponse response)
1258 throws ActionException {
1259
1260 StopWatch stopWatch = null;
1261
1262 if (_log.isDebugEnabled()) {
1263 stopWatch = new StopWatch();
1264
1265 stopWatch.start();
1266 }
1267
1268 try {
1269 servicePre(request, response);
1270 }
1271 catch (Exception e) {
1272 throw new ActionException(e);
1273 }
1274
1275 if (_log.isDebugEnabled()) {
1276 _log.debug("Running takes " + stopWatch.getTime() + " ms");
1277 }
1278 }
1279
1280 protected void addDefaultLayoutsByLAR(
1281 long userId, long groupId, boolean privateLayout, File larFile)
1282 throws PortalException, SystemException {
1283
1284 Map<String, String[]> parameterMap = new HashMap<String, String[]>();
1285
1286 parameterMap.put(
1287 PortletDataHandlerKeys.PERMISSIONS,
1288 new String[] {Boolean.TRUE.toString()});
1289 parameterMap.put(
1290 PortletDataHandlerKeys.PORTLET_DATA,
1291 new String[] {Boolean.TRUE.toString()});
1292 parameterMap.put(
1293 PortletDataHandlerKeys.PORTLET_DATA_CONTROL_DEFAULT,
1294 new String[] {Boolean.TRUE.toString()});
1295 parameterMap.put(
1296 PortletDataHandlerKeys.PORTLET_SETUP,
1297 new String[] {Boolean.TRUE.toString()});
1298 parameterMap.put(
1299 PortletDataHandlerKeys.THEME_REFERENCE,
1300 new String[] {Boolean.TRUE.toString()});
1301 parameterMap.put(
1302 PortletDataHandlerKeys.USER_PERMISSIONS,
1303 new String[] {Boolean.FALSE.toString()});
1304
1305 LayoutLocalServiceUtil.importLayouts(
1306 userId, groupId, privateLayout, parameterMap, larFile);
1307 }
1308
1309 protected void addDefaultUserPrivateLayoutByProperties(
1310 long userId, long groupId)
1311 throws PortalException, SystemException {
1312
1313 String friendlyURL = getFriendlyURL(
1314 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_FRIENDLY_URL);
1315
1316 ServiceContext serviceContext = new ServiceContext();
1317
1318 Layout layout = LayoutLocalServiceUtil.addLayout(
1319 userId, groupId, true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
1320 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_NAME, StringPool.BLANK,
1321 StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL,
1322 serviceContext);
1323
1324 LayoutTypePortlet layoutTypePortlet =
1325 (LayoutTypePortlet)layout.getLayoutType();
1326
1327 layoutTypePortlet.setLayoutTemplateId(
1328 0, PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_TEMPLATE_ID, false);
1329
1330 for (int i = 0; i < 10; i++) {
1331 String columnId = "column-" + i;
1332 String portletIds = PropsUtil.get(
1333 PropsKeys.DEFAULT_USER_PRIVATE_LAYOUT_COLUMN + i);
1334
1335 String[] portletIdsArray = StringUtil.split(portletIds);
1336
1337 layoutTypePortlet.addPortletIds(
1338 0, portletIdsArray, columnId, false);
1339 }
1340
1341 LayoutLocalServiceUtil.updateLayout(
1342 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
1343 layout.getTypeSettings());
1344
1345 boolean updateLayoutSet = false;
1346
1347 LayoutSet layoutSet = layout.getLayoutSet();
1348
1349 if (Validator.isNotNull(
1350 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID)) {
1351
1352 layoutSet.setThemeId(
1353 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID);
1354
1355 updateLayoutSet = true;
1356 }
1357
1358 if (Validator.isNotNull(
1359 PropsValues.
1360 DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {
1361
1362 layoutSet.setColorSchemeId(
1363 PropsValues.
1364 DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID);
1365
1366 updateLayoutSet = true;
1367 }
1368
1369 if (Validator.isNotNull(
1370 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID)) {
1371
1372 layoutSet.setWapThemeId(
1373 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID);
1374
1375 updateLayoutSet = true;
1376 }
1377
1378 if (Validator.isNotNull(
1379 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID)) {
1380
1381 layoutSet.setWapColorSchemeId(
1382 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID);
1383
1384 updateLayoutSet = true;
1385 }
1386
1387 if (updateLayoutSet) {
1388 LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
1389 }
1390 }
1391
1392 protected void addDefaultUserPrivateLayouts(User user)
1393 throws PortalException, SystemException {
1394
1395 Group userGroup = user.getGroup();
1396
1397 if (privateLARFile != null) {
1398 addDefaultLayoutsByLAR(
1399 user.getUserId(), userGroup.getGroupId(), true, privateLARFile);
1400 }
1401 else {
1402 addDefaultUserPrivateLayoutByProperties(
1403 user.getUserId(), userGroup.getGroupId());
1404 }
1405 }
1406
1407 protected void addDefaultUserPublicLayoutByProperties(
1408 long userId, long groupId)
1409 throws PortalException, SystemException {
1410
1411 String friendlyURL = getFriendlyURL(
1412 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_FRIENDLY_URL);
1413
1414 ServiceContext serviceContext = new ServiceContext();
1415
1416 Layout layout = LayoutLocalServiceUtil.addLayout(
1417 userId, groupId, false, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
1418 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_NAME, StringPool.BLANK,
1419 StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL,
1420 serviceContext);
1421
1422 LayoutTypePortlet layoutTypePortlet =
1423 (LayoutTypePortlet)layout.getLayoutType();
1424
1425 layoutTypePortlet.setLayoutTemplateId(
1426 0, PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_TEMPLATE_ID, false);
1427
1428 for (int i = 0; i < 10; i++) {
1429 String columnId = "column-" + i;
1430 String portletIds = PropsUtil.get(
1431 PropsKeys.DEFAULT_USER_PUBLIC_LAYOUT_COLUMN + i);
1432
1433 String[] portletIdsArray = StringUtil.split(portletIds);
1434
1435 layoutTypePortlet.addPortletIds(
1436 0, portletIdsArray, columnId, false);
1437 }
1438
1439 LayoutLocalServiceUtil.updateLayout(
1440 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
1441 layout.getTypeSettings());
1442
1443 boolean updateLayoutSet = false;
1444
1445 LayoutSet layoutSet = layout.getLayoutSet();
1446
1447 if (Validator.isNotNull(
1448 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID)) {
1449
1450 layoutSet.setThemeId(
1451 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID);
1452
1453 updateLayoutSet = true;
1454 }
1455
1456 if (Validator.isNotNull(
1457 PropsValues.
1458 DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {
1459
1460 layoutSet.setColorSchemeId(
1461 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID);
1462
1463 updateLayoutSet = true;
1464 }
1465
1466 if (Validator.isNotNull(
1467 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID)) {
1468
1469 layoutSet.setWapThemeId(
1470 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID);
1471
1472 updateLayoutSet = true;
1473 }
1474
1475 if (Validator.isNotNull(
1476 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID)) {
1477
1478 layoutSet.setWapColorSchemeId(
1479 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID);
1480
1481 updateLayoutSet = true;
1482 }
1483
1484 if (updateLayoutSet) {
1485 LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
1486 }
1487 }
1488
1489 protected void addDefaultUserPublicLayouts(User user)
1490 throws PortalException, SystemException {
1491
1492 Group userGroup = user.getGroup();
1493
1494 if (publicLARFile != null) {
1495 addDefaultLayoutsByLAR(
1496 user.getUserId(), userGroup.getGroupId(), false, publicLARFile);
1497 }
1498 else {
1499 addDefaultUserPublicLayoutByProperties(
1500 user.getUserId(), userGroup.getGroupId());
1501 }
1502 }
1503
1504 protected void deleteDefaultUserPrivateLayouts(User user)
1505 throws PortalException, SystemException {
1506
1507 Group userGroup = user.getGroup();
1508
1509 ServiceContext serviceContext = new ServiceContext();
1510
1511 LayoutLocalServiceUtil.deleteLayouts(
1512 userGroup.getGroupId(), true, serviceContext);
1513 }
1514
1515 protected void deleteDefaultUserPublicLayouts(User user)
1516 throws PortalException, SystemException {
1517
1518 Group userGroup = user.getGroup();
1519
1520 ServiceContext serviceContext = new ServiceContext();
1521
1522 LayoutLocalServiceUtil.deleteLayouts(
1523 userGroup.getGroupId(), false, serviceContext);
1524 }
1525
1526 protected Object[] getDefaultLayout(
1527 HttpServletRequest request, User user, boolean signedIn)
1528 throws PortalException, SystemException {
1529
1530 Layout layout = null;
1531 List<Layout> layouts = null;
1532
1533 if (signedIn) {
1534
1535
1536
1537 Group userGroup = user.getGroup();
1538
1539 layouts = LayoutLocalServiceUtil.getLayouts(
1540 userGroup.getGroupId(), true,
1541 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1542
1543 if (layouts.size() == 0) {
1544 layouts = LayoutLocalServiceUtil.getLayouts(
1545 userGroup.getGroupId(), false,
1546 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1547 }
1548
1549 if (layouts.size() > 0) {
1550 layout = layouts.get(0);
1551 }
1552
1553
1554
1555 if (layout == null) {
1556 LinkedHashMap<String, Object> groupParams =
1557 new LinkedHashMap<String, Object>();
1558
1559 groupParams.put("usersGroups", new Long(user.getUserId()));
1560
1561 List<Group> groups = GroupLocalServiceUtil.search(
1562 user.getCompanyId(), null, null, groupParams,
1563 QueryUtil.ALL_POS, QueryUtil.ALL_POS);
1564
1565 for (Group group : groups) {
1566 layouts = LayoutLocalServiceUtil.getLayouts(
1567 group.getGroupId(), true,
1568 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1569
1570 if (layouts.size() == 0) {
1571 layouts = LayoutLocalServiceUtil.getLayouts(
1572 group.getGroupId(), false,
1573 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1574 }
1575
1576 if (layouts.size() > 0) {
1577 layout = layouts.get(0);
1578
1579 break;
1580 }
1581 }
1582 }
1583 }
1584 else {
1585
1586
1587
1588 LayoutSet layoutSet = (LayoutSet)request.getAttribute(
1589 WebKeys.VIRTUAL_HOST_LAYOUT_SET);
1590
1591 if (layoutSet != null) {
1592 layouts = LayoutLocalServiceUtil.getLayouts(
1593 layoutSet.getGroupId(), layoutSet.isPrivateLayout(),
1594 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1595
1596 Group group = null;
1597
1598 if (!layouts.isEmpty()) {
1599 layout = layouts.get(0);
1600
1601 group = layout.getGroup();
1602 }
1603
1604 if ((layout != null) && layout.isPrivateLayout()) {
1605 layouts = LayoutLocalServiceUtil.getLayouts(
1606 group.getGroupId(), false,
1607 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1608
1609 if (!layouts.isEmpty()) {
1610 layout = layouts.get(0);
1611 }
1612 else {
1613 group = null;
1614 layout = null;
1615 }
1616 }
1617
1618 if ((group != null) && group.isStagingGroup()) {
1619 Group liveGroup = group.getLiveGroup();
1620
1621 layouts = LayoutLocalServiceUtil.getLayouts(
1622 liveGroup.getGroupId(), false,
1623 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1624
1625 if (!layouts.isEmpty()) {
1626 layout = layouts.get(0);
1627 }
1628 else {
1629 layout = null;
1630 }
1631 }
1632 }
1633 }
1634
1635 if (layout == null) {
1636
1637
1638
1639 Group guestGroup = GroupLocalServiceUtil.getGroup(
1640 user.getCompanyId(), GroupConstants.GUEST);
1641
1642 layouts = LayoutLocalServiceUtil.getLayouts(
1643 guestGroup.getGroupId(), false,
1644 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1645
1646 if (layouts.size() > 0) {
1647 layout = layouts.get(0);
1648 }
1649 }
1650
1651 return new Object[] {layout, layouts};
1652 }
1653
1654 protected String getFriendlyURL(String friendlyURL) {
1655 friendlyURL = GetterUtil.getString(friendlyURL);
1656
1657 return FriendlyURLNormalizerUtil.normalize(friendlyURL);
1658 }
1659
1660 protected Object[] getViewableLayouts(
1661 HttpServletRequest request, User user,
1662 PermissionChecker permissionChecker, Layout layout,
1663 List<Layout> layouts)
1664 throws PortalException, SystemException {
1665
1666 if ((layouts == null) || layouts.isEmpty()) {
1667 return new Object[] {layout, layouts};
1668 }
1669
1670 Group group = layout.getGroup();
1671
1672 boolean hasViewLayoutPermission = false;
1673 boolean hasViewStagingPermission =
1674 (group.isStagingGroup() || group.isStagedRemotely()) &&
1675 GroupPermissionUtil.contains(
1676 permissionChecker, group.getGroupId(),
1677 ActionKeys.VIEW_STAGING);
1678
1679 if (LayoutPermissionUtil.contains(
1680 permissionChecker, layout, false, ActionKeys.VIEW) ||
1681 hasViewStagingPermission) {
1682
1683 hasViewLayoutPermission = true;
1684 }
1685
1686 List<Layout> accessibleLayouts = new ArrayList<Layout>();
1687
1688 for (int i = 0; i < layouts.size(); i++) {
1689 Layout curLayout = layouts.get(i);
1690
1691 if (!curLayout.isHidden() &&
1692 (LayoutPermissionUtil.contains(
1693 permissionChecker, curLayout, false, ActionKeys.VIEW) ||
1694 hasViewStagingPermission)) {
1695
1696 if (accessibleLayouts.isEmpty() && !hasViewLayoutPermission) {
1697 layout = curLayout;
1698 }
1699
1700 accessibleLayouts.add(curLayout);
1701 }
1702 }
1703
1704 if (accessibleLayouts.isEmpty()) {
1705 layouts = null;
1706
1707 if (!isLoginRequest(request) && !hasViewLayoutPermission) {
1708 if (user.isDefaultUser() &&
1709 PropsValues.AUTH_LOGIN_PROMPT_ENABLED) {
1710
1711 throw new PrincipalException("User is not authenticated");
1712 }
1713
1714 SessionErrors.add(
1715 request, LayoutPermissionException.class.getName());
1716 }
1717 }
1718 else {
1719 layouts = accessibleLayouts;
1720 }
1721
1722 return new Object[] {layout, layouts};
1723 }
1724
1725 protected Boolean hasPowerUserRole(User user) throws Exception {
1726 return RoleLocalServiceUtil.hasUserRole(
1727 user.getUserId(), user.getCompanyId(), RoleConstants.POWER_USER,
1728 true);
1729 }
1730
1731 protected void initImportLARFiles() {
1732 String privateLARFileName =
1733 PropsValues.DEFAULT_USER_PRIVATE_LAYOUTS_LAR;
1734
1735 if (_log.isDebugEnabled()) {
1736 _log.debug("Reading private LAR file " + privateLARFileName);
1737 }
1738
1739 if (Validator.isNotNull(privateLARFileName)) {
1740 privateLARFile = new File(privateLARFileName);
1741
1742 if (!privateLARFile.exists()) {
1743 _log.error(
1744 "Private LAR file " + privateLARFile + " does not exist");
1745
1746 privateLARFile = null;
1747 }
1748 else {
1749 if (_log.isDebugEnabled()) {
1750 _log.debug("Using private LAR file " + privateLARFileName);
1751 }
1752 }
1753 }
1754
1755 String publicLARFileName = PropsValues.DEFAULT_USER_PUBLIC_LAYOUTS_LAR;
1756
1757 if (_log.isDebugEnabled()) {
1758 _log.debug("Reading public LAR file " + publicLARFileName);
1759 }
1760
1761 if (Validator.isNotNull(publicLARFileName)) {
1762 publicLARFile = new File(publicLARFileName);
1763
1764 if (!publicLARFile.exists()) {
1765 _log.error(
1766 "Public LAR file " + publicLARFile + " does not exist");
1767
1768 publicLARFile = null;
1769 }
1770 else {
1771 if (_log.isDebugEnabled()) {
1772 _log.debug("Using public LAR file " + publicLARFileName);
1773 }
1774 }
1775 }
1776 }
1777
1778 protected boolean isLoginRequest(HttpServletRequest request) {
1779 String requestURI = request.getRequestURI();
1780
1781 String mainPath = PortalUtil.getPathMain();
1782
1783 if (requestURI.startsWith(mainPath.concat("/portal/login"))) {
1784 return true;
1785 }
1786 else {
1787 return false;
1788 }
1789 }
1790
1791
1794 protected boolean isViewableCommunity(
1795 User user, long groupId, boolean privateLayout,
1796 PermissionChecker permissionChecker)
1797 throws PortalException, SystemException {
1798
1799 return LayoutPermissionUtil.contains(
1800 permissionChecker, groupId, privateLayout, 0, ActionKeys.VIEW);
1801 }
1802
1803
1806 protected boolean isViewableGroup(
1807 User user, long groupId, boolean privateLayout, long layoutId,
1808 String controlPanelCategory, PermissionChecker permissionChecker)
1809 throws PortalException, SystemException {
1810
1811 return LayoutPermissionUtil.contains(
1812 permissionChecker, groupId, privateLayout, layoutId,
1813 controlPanelCategory, ActionKeys.VIEW);
1814 }
1815
1816 protected List<Layout> mergeAdditionalLayouts(
1817 HttpServletRequest request, User user,
1818 PermissionChecker permissionChecker, Layout layout,
1819 List<Layout> layouts)
1820 throws PortalException, SystemException {
1821
1822 if ((layout == null) || layout.isPrivateLayout()) {
1823 return layouts;
1824 }
1825
1826 long layoutGroupId = layout.getGroupId();
1827
1828 Group guestGroup = GroupLocalServiceUtil.getGroup(
1829 user.getCompanyId(), GroupConstants.GUEST);
1830
1831 if (layoutGroupId != guestGroup.getGroupId()) {
1832 Group layoutGroup = GroupLocalServiceUtil.getGroup(layoutGroupId);
1833
1834 UnicodeProperties typeSettingsProperties =
1835 layoutGroup.getTypeSettingsProperties();
1836
1837 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
1838 typeSettingsProperties.getProperty("mergeGuestPublicPages"));
1839
1840 if (!mergeGuestPublicPages) {
1841 return layouts;
1842 }
1843
1844 List<Layout> guestLayouts = LayoutLocalServiceUtil.getLayouts(
1845 guestGroup.getGroupId(), false,
1846 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1847
1848 Object[] viewableLayouts = getViewableLayouts(
1849 request, user, permissionChecker, layout, guestLayouts);
1850
1851 guestLayouts = (List<Layout>)viewableLayouts[1];
1852
1853 if (layouts == null) {
1854 return guestLayouts;
1855 }
1856
1857 layouts.addAll(0, guestLayouts);
1858 }
1859 else {
1860 HttpSession session = request.getSession();
1861
1862 Long previousGroupId = (Long)session.getAttribute(
1863 WebKeys.VISITED_GROUP_ID_PREVIOUS);
1864
1865 if ((previousGroupId != null) &&
1866 (previousGroupId.longValue() != layoutGroupId)) {
1867
1868 Group previousGroup = null;
1869
1870 try {
1871 previousGroup = GroupLocalServiceUtil.getGroup(
1872 previousGroupId.longValue());
1873 }
1874 catch (NoSuchGroupException nsge) {
1875 if (_log.isWarnEnabled()) {
1876 _log.warn(nsge);
1877 }
1878
1879 return layouts;
1880 }
1881
1882 UnicodeProperties typeSettingsProperties =
1883 previousGroup.getTypeSettingsProperties();
1884
1885 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
1886 typeSettingsProperties.getProperty(
1887 "mergeGuestPublicPages"));
1888
1889 if (!mergeGuestPublicPages) {
1890 return layouts;
1891 }
1892
1893 List<Layout> previousLayouts =
1894 LayoutLocalServiceUtil.getLayouts(
1895 previousGroupId.longValue(), false,
1896 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1897
1898 Object[] viewableLayouts = getViewableLayouts(
1899 request, user, permissionChecker, layout, previousLayouts);
1900
1901 previousLayouts = (List<Layout>)viewableLayouts[1];
1902
1903 if (previousLayouts != null) {
1904 layouts.addAll(previousLayouts);
1905 }
1906 }
1907 }
1908
1909 return layouts;
1910 }
1911
1912 protected void rememberVisitedGroupIds(
1913 HttpServletRequest request, long currentGroupId) {
1914
1915 String requestURI = GetterUtil.getString(request.getRequestURI());
1916
1917 if (!requestURI.endsWith(_PATH_PORTAL_LAYOUT)) {
1918 return;
1919 }
1920
1921 HttpSession session = request.getSession();
1922
1923 Long recentGroupId = (Long)session.getAttribute(
1924 WebKeys.VISITED_GROUP_ID_RECENT);
1925
1926 Long previousGroupId = (Long)session.getAttribute(
1927 WebKeys.VISITED_GROUP_ID_PREVIOUS);
1928
1929 if (recentGroupId == null) {
1930 recentGroupId = new Long(currentGroupId);
1931
1932 session.setAttribute(
1933 WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);
1934 }
1935 else if (recentGroupId.longValue() != currentGroupId) {
1936 previousGroupId = new Long(recentGroupId.longValue());
1937
1938 recentGroupId = new Long(currentGroupId);
1939
1940 session.setAttribute(
1941 WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);
1942
1943 session.setAttribute(
1944 WebKeys.VISITED_GROUP_ID_PREVIOUS, previousGroupId);
1945 }
1946
1947 if (_log.isDebugEnabled()) {
1948 _log.debug("Current group id " + currentGroupId);
1949 _log.debug("Recent group id " + recentGroupId);
1950 _log.debug("Previous group id " + previousGroupId);
1951 }
1952 }
1953
1954 protected void servicePre(
1955 HttpServletRequest request, HttpServletResponse response)
1956 throws Exception {
1957
1958 ThemeDisplay themeDisplay = initThemeDisplay(request, response);
1959
1960 if (themeDisplay == null) {
1961 return;
1962 }
1963
1964 request.setAttribute(WebKeys.THEME_DISPLAY, themeDisplay);
1965
1966
1967
1968 ServiceContext serviceContext = ServiceContextFactory.getInstance(
1969 request);
1970
1971 ServiceContextThreadLocal.pushServiceContext(serviceContext);
1972
1973
1974
1975 boolean parallelRenderEnable = true;
1976
1977 Layout layout = themeDisplay.getLayout();
1978
1979 if (layout != null) {
1980 LayoutTypePortlet layoutTypePortlet =
1981 themeDisplay.getLayoutTypePortlet();
1982
1983 List<String> portletIds = layoutTypePortlet.getPortletIds();
1984
1985 if (portletIds.size() == 1) {
1986 String portletId = portletIds.get(0);
1987
1988 Portlet portlet = PortletLocalServiceUtil.getPortletById(
1989 portletId);
1990
1991 if ((portlet != null) && !portlet.isAjaxable()) {
1992 parallelRenderEnable = false;
1993 }
1994 }
1995 }
1996
1997 Boolean parallelRenderEnableObj = Boolean.valueOf(
1998 ParamUtil.getBoolean(
1999 request, "p_p_parallel", parallelRenderEnable));
2000
2001 request.setAttribute(
2002 WebKeys.PORTLET_PARALLEL_RENDER, parallelRenderEnableObj);
2003
2004
2005
2006 long mainJournalArticleId = ParamUtil.getLong(request, "p_j_a_id");
2007
2008 if (mainJournalArticleId > 0) {
2009 try {
2010 JournalArticle mainJournalArticle =
2011 JournalArticleServiceUtil.getArticle(mainJournalArticleId);
2012
2013 AssetEntry layoutAssetEntry =
2014 AssetEntryLocalServiceUtil.getEntry(
2015 JournalArticle.class.getName(),
2016 mainJournalArticle.getResourcePrimKey());
2017
2018 request.setAttribute(
2019 WebKeys.LAYOUT_ASSET_ENTRY, layoutAssetEntry);
2020 }
2021 catch (NoSuchArticleException nsae) {
2022 if (_log.isWarnEnabled()) {
2023 _log.warn(nsae.getMessage());
2024 }
2025 }
2026 }
2027 }
2028
2029 protected void updateUserLayouts(User user) throws Exception {
2030 Boolean hasPowerUserRole = null;
2031
2032
2033
2034 boolean addDefaultUserPrivateLayouts = false;
2035
2036 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED &&
2037 PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_AUTO_CREATE) {
2038
2039 addDefaultUserPrivateLayouts = true;
2040
2041 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
2042 if (hasPowerUserRole == null) {
2043 hasPowerUserRole = hasPowerUserRole(user);
2044 }
2045
2046 if (!hasPowerUserRole.booleanValue()) {
2047 addDefaultUserPrivateLayouts = false;
2048 }
2049 }
2050 }
2051
2052 Boolean hasPrivateLayouts = null;
2053
2054 if (addDefaultUserPrivateLayouts) {
2055 hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(
2056 user, true, false);
2057
2058 if (!hasPrivateLayouts) {
2059 addDefaultUserPrivateLayouts(user);
2060 }
2061 }
2062
2063 boolean deleteDefaultUserPrivateLayouts = false;
2064
2065 if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED) {
2066 deleteDefaultUserPrivateLayouts = true;
2067 }
2068 else if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
2069 if (hasPowerUserRole == null) {
2070 hasPowerUserRole = hasPowerUserRole(user);
2071 }
2072
2073 if (!hasPowerUserRole.booleanValue()) {
2074 deleteDefaultUserPrivateLayouts = true;
2075 }
2076 }
2077
2078 if (deleteDefaultUserPrivateLayouts) {
2079 if (hasPrivateLayouts == null) {
2080 hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(
2081 user, true, false);
2082 }
2083
2084 if (hasPrivateLayouts) {
2085 deleteDefaultUserPrivateLayouts(user);
2086 }
2087 }
2088
2089
2090
2091 boolean addDefaultUserPublicLayouts = false;
2092
2093 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED &&
2094 PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_AUTO_CREATE) {
2095
2096 addDefaultUserPublicLayouts = true;
2097
2098 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
2099 if (hasPowerUserRole == null) {
2100 hasPowerUserRole = hasPowerUserRole(user);
2101 }
2102
2103 if (!hasPowerUserRole.booleanValue()) {
2104 addDefaultUserPublicLayouts = false;
2105 }
2106 }
2107 }
2108
2109 Boolean hasPublicLayouts = null;
2110
2111 if (addDefaultUserPublicLayouts) {
2112 hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(
2113 user, false, false);
2114
2115 if (!hasPublicLayouts) {
2116 addDefaultUserPublicLayouts(user);
2117 }
2118 }
2119
2120 boolean deleteDefaultUserPublicLayouts = false;
2121
2122 if (!PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED) {
2123 deleteDefaultUserPublicLayouts = true;
2124 }
2125 else if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
2126 if (hasPowerUserRole == null) {
2127 hasPowerUserRole = hasPowerUserRole(user);
2128 }
2129
2130 if (!hasPowerUserRole.booleanValue()) {
2131 deleteDefaultUserPublicLayouts = true;
2132 }
2133 }
2134
2135 if (deleteDefaultUserPublicLayouts) {
2136 if (hasPublicLayouts == null) {
2137 hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(
2138 user, false, false);
2139 }
2140
2141 if (hasPublicLayouts) {
2142 deleteDefaultUserPublicLayouts(user);
2143 }
2144 }
2145 }
2146
2147 protected File privateLARFile;
2148 protected File publicLARFile;
2149
2150 private static final String _CONTROL_PANEL_CATEGORY_PORTLET_PREFIX =
2151 "portlet_";
2152
2153 private static final String _PATH_PORTAL_LAYOUT = "/portal/layout";
2154
2155 private static Log _log = LogFactoryUtil.getLog(ServicePreAction.class);
2156
2157 }