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