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