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.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.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.LayoutType;
060 import com.liferay.portal.model.LayoutTypeAccessPolicy;
061 import com.liferay.portal.model.LayoutTypePortlet;
062 import com.liferay.portal.model.LayoutTypePortletConstants;
063 import com.liferay.portal.model.RoleConstants;
064 import com.liferay.portal.model.Theme;
065 import com.liferay.portal.model.User;
066 import com.liferay.portal.model.impl.VirtualLayout;
067 import com.liferay.portal.security.auth.PrincipalException;
068 import com.liferay.portal.security.permission.ActionKeys;
069 import com.liferay.portal.security.permission.PermissionChecker;
070 import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
071 import com.liferay.portal.security.permission.PermissionThreadLocal;
072 import com.liferay.portal.service.GroupLocalServiceUtil;
073 import com.liferay.portal.service.ImageLocalServiceUtil;
074 import com.liferay.portal.service.LayoutLocalServiceUtil;
075 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
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.theme.ThemeDisplay;
086 import com.liferay.portal.theme.ThemeDisplayFactory;
087 import com.liferay.portal.util.LayoutClone;
088 import com.liferay.portal.util.LayoutCloneFactory;
089 import com.liferay.portal.util.PortalUtil;
090 import com.liferay.portal.util.PortletKeys;
091 import com.liferay.portal.util.PrefsPropsUtil;
092 import com.liferay.portal.util.PropsUtil;
093 import com.liferay.portal.util.PropsValues;
094 import com.liferay.portal.webserver.WebServerServletTokenUtil;
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.portlet.sites.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(int start, int end) {
1428 List<Group> groups = GroupLocalServiceUtil.search(
1429 user.getCompanyId(), null, null, groupParams, start, end);
1430
1431 for (Group group : groups) {
1432 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
1433 group.getGroupId(), true,
1434 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1435
1436 if (layouts.isEmpty()) {
1437 layouts = LayoutLocalServiceUtil.getLayouts(
1438 group.getGroupId(), false,
1439 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1440 }
1441
1442 if (!layouts.isEmpty()) {
1443 return new LayoutComposite(layouts.get(0), layouts);
1444 }
1445 }
1446
1447 return null;
1448 }
1449
1450 });
1451
1452 LayoutComposite layoutComposite =
1453 intervalActionProcessor.performIntervalActions();
1454
1455 if (layoutComposite == null) {
1456 return new LayoutComposite(null, new ArrayList<Layout>());
1457 }
1458
1459 return layoutComposite;
1460 }
1461
1462 protected LayoutComposite getDefaultViewableLayoutComposite(
1463 HttpServletRequest request, User user,
1464 PermissionChecker permissionChecker, long doAsGroupId,
1465 boolean signedIn)
1466 throws PortalException {
1467
1468 LayoutComposite defaultLayoutComposite =
1469 getDefaultVirtualHostLayoutComposite(request);
1470
1471 defaultLayoutComposite = getViewableLayoutComposite(
1472 request, user, permissionChecker, defaultLayoutComposite,
1473 doAsGroupId);
1474
1475 if (defaultLayoutComposite.getLayouts() != null) {
1476 return defaultLayoutComposite;
1477 }
1478
1479 if (signedIn) {
1480 defaultLayoutComposite = getDefaultUserPersonalSiteLayoutComposite(
1481 user);
1482
1483 if (defaultLayoutComposite.getLayout() == null) {
1484 defaultLayoutComposite = getDefaultUserSitesLayoutComposite(
1485 user);
1486 }
1487
1488 defaultLayoutComposite = getViewableLayoutComposite(
1489 request, user, permissionChecker, defaultLayoutComposite,
1490 doAsGroupId);
1491
1492 if (defaultLayoutComposite.getLayouts() != null) {
1493 return defaultLayoutComposite;
1494 }
1495 }
1496
1497 defaultLayoutComposite = getGuestSiteLayoutComposite(user);
1498
1499 return getViewableLayoutComposite(
1500 request, user, permissionChecker, defaultLayoutComposite,
1501 doAsGroupId);
1502 }
1503
1504 protected LayoutComposite getDefaultVirtualHostLayoutComposite(
1505 HttpServletRequest request)
1506 throws PortalException {
1507
1508 Layout layout = null;
1509 List<Layout> layouts = null;
1510
1511 LayoutSet layoutSet = (LayoutSet)request.getAttribute(
1512 WebKeys.VIRTUAL_HOST_LAYOUT_SET);
1513
1514 if (layoutSet != null) {
1515 layouts = LayoutLocalServiceUtil.getLayouts(
1516 layoutSet.getGroupId(), layoutSet.isPrivateLayout(),
1517 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1518
1519 Group group = null;
1520
1521 if (!layouts.isEmpty()) {
1522 layout = layouts.get(0);
1523
1524 group = layout.getGroup();
1525 }
1526
1527 if ((layout != null) && layout.isPrivateLayout()) {
1528 layouts = LayoutLocalServiceUtil.getLayouts(
1529 group.getGroupId(), false,
1530 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1531
1532 if (!layouts.isEmpty()) {
1533 layout = layouts.get(0);
1534 }
1535 else {
1536 group = null;
1537 layout = null;
1538 }
1539 }
1540
1541 if ((group != null) && group.isStagingGroup()) {
1542 Group liveGroup = group.getLiveGroup();
1543
1544 layouts = LayoutLocalServiceUtil.getLayouts(
1545 liveGroup.getGroupId(), false,
1546 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1547
1548 if (!layouts.isEmpty()) {
1549 layout = layouts.get(0);
1550 }
1551 else {
1552 layout = null;
1553 }
1554 }
1555 }
1556
1557 return new LayoutComposite(layout, layouts);
1558 }
1559
1560 protected String getFriendlyURL(String friendlyURL) {
1561 friendlyURL = GetterUtil.getString(friendlyURL);
1562
1563 return FriendlyURLNormalizerUtil.normalize(friendlyURL);
1564 }
1565
1566 protected LayoutComposite getGuestSiteLayoutComposite(User user)
1567 throws PortalException {
1568
1569 Layout layout = null;
1570 List<Layout> layouts = null;
1571
1572 Group guestGroup = GroupLocalServiceUtil.getGroup(
1573 user.getCompanyId(), GroupConstants.GUEST);
1574
1575 layouts = LayoutLocalServiceUtil.getLayouts(
1576 guestGroup.getGroupId(), false,
1577 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1578
1579 if (!layouts.isEmpty()) {
1580 layout = layouts.get(0);
1581 }
1582
1583 return new LayoutComposite(layout, layouts);
1584 }
1585
1586 protected LayoutComposite getViewableLayoutComposite(
1587 HttpServletRequest request, User user,
1588 PermissionChecker permissionChecker, Layout layout,
1589 List<Layout> layouts, long doAsGroupId)
1590 throws PortalException {
1591
1592 if ((layouts == null) || layouts.isEmpty()) {
1593 return new LayoutComposite(layout, layouts);
1594 }
1595
1596 Group group = layout.getGroup();
1597
1598 boolean hasViewLayoutPermission = false;
1599 boolean hasViewStagingPermission =
1600 (group.isStagingGroup() || group.isStagedRemotely()) &&
1601 !group.isControlPanel() &&
1602 GroupPermissionUtil.contains(
1603 permissionChecker, group, ActionKeys.VIEW_STAGING);
1604
1605 if (hasAccessPermission(
1606 permissionChecker, layout, doAsGroupId, false) ||
1607 hasViewStagingPermission) {
1608
1609 hasViewLayoutPermission = true;
1610 }
1611
1612 List<Layout> accessibleLayouts = new ArrayList<>();
1613
1614 for (int i = 0; i < layouts.size(); i++) {
1615 Layout curLayout = layouts.get(i);
1616
1617 if (!curLayout.isHidden() &&
1618 (hasAccessPermission(
1619 permissionChecker, curLayout, doAsGroupId, false) ||
1620 hasViewStagingPermission)) {
1621
1622 if (accessibleLayouts.isEmpty() && !hasViewLayoutPermission) {
1623 layout = curLayout;
1624 }
1625
1626 accessibleLayouts.add(curLayout);
1627 }
1628 }
1629
1630 if (accessibleLayouts.isEmpty()) {
1631 layouts = null;
1632
1633 if (!isLoginRequest(request) && !hasViewLayoutPermission) {
1634 if (user.isDefaultUser() &&
1635 PropsValues.AUTH_LOGIN_PROMPT_ENABLED) {
1636
1637 throw new PrincipalException.MustBeAuthenticated(
1638 String.valueOf(user.getUserId()));
1639 }
1640
1641 SessionErrors.add(
1642 request, LayoutPermissionException.class.getName());
1643 }
1644 }
1645 else {
1646 layouts = accessibleLayouts;
1647 }
1648
1649 return new LayoutComposite(layout, layouts);
1650 }
1651
1652 protected LayoutComposite getViewableLayoutComposite(
1653 HttpServletRequest request, User user,
1654 PermissionChecker permissionChecker,
1655 LayoutComposite defaultLayoutComposite, long doAsGroupId)
1656 throws PortalException {
1657
1658 Layout layout = defaultLayoutComposite.getLayout();
1659 List<Layout> layouts = defaultLayoutComposite.getLayouts();
1660
1661 return getViewableLayoutComposite(
1662 request, user, permissionChecker, layout, layouts, doAsGroupId);
1663 }
1664
1665 protected boolean hasAccessPermission(
1666 PermissionChecker permissionChecker, Layout layout,
1667 long doAsGroupId, boolean checkViewableGroup)
1668 throws PortalException {
1669
1670 return LayoutPermissionUtil.contains(
1671 permissionChecker, layout, checkViewableGroup, ActionKeys.VIEW);
1672 }
1673
1674 protected Boolean hasPowerUserRole(User user) throws Exception {
1675 return RoleLocalServiceUtil.hasUserRole(
1676 user.getUserId(), user.getCompanyId(), RoleConstants.POWER_USER,
1677 true);
1678 }
1679
1680 protected void initImportLARFiles() {
1681 String privateLARFileName =
1682 PropsValues.DEFAULT_USER_PRIVATE_LAYOUTS_LAR;
1683
1684 if (_log.isDebugEnabled()) {
1685 _log.debug("Reading private LAR file " + privateLARFileName);
1686 }
1687
1688 if (Validator.isNotNull(privateLARFileName)) {
1689 privateLARFile = new File(privateLARFileName);
1690
1691 if (!privateLARFile.exists()) {
1692 _log.error(
1693 "Private LAR file " + privateLARFile + " does not exist");
1694
1695 privateLARFile = null;
1696 }
1697 else {
1698 if (_log.isDebugEnabled()) {
1699 _log.debug("Using private LAR file " + privateLARFileName);
1700 }
1701 }
1702 }
1703
1704 String publicLARFileName = PropsValues.DEFAULT_USER_PUBLIC_LAYOUTS_LAR;
1705
1706 if (_log.isDebugEnabled()) {
1707 _log.debug("Reading public LAR file " + publicLARFileName);
1708 }
1709
1710 if (Validator.isNotNull(publicLARFileName)) {
1711 publicLARFile = new File(publicLARFileName);
1712
1713 if (!publicLARFile.exists()) {
1714 _log.error(
1715 "Public LAR file " + publicLARFile + " does not exist");
1716
1717 publicLARFile = null;
1718 }
1719 else {
1720 if (_log.isDebugEnabled()) {
1721 _log.debug("Using public LAR file " + publicLARFileName);
1722 }
1723 }
1724 }
1725 }
1726
1727 protected boolean isLoginRequest(HttpServletRequest request) {
1728 String requestURI = request.getRequestURI();
1729
1730 String mainPath = PortalUtil.getPathMain();
1731
1732 if (requestURI.startsWith(mainPath.concat(_PATH_PORTAL_LOGIN))) {
1733 return true;
1734 }
1735 else {
1736 return false;
1737 }
1738 }
1739
1740
1743 @Deprecated
1744 protected boolean isViewableCommunity(
1745 User user, long groupId, boolean privateLayout,
1746 PermissionChecker permissionChecker)
1747 throws PortalException {
1748
1749 return LayoutPermissionUtil.contains(
1750 permissionChecker, groupId, privateLayout, 0, ActionKeys.VIEW);
1751 }
1752
1753
1756 @Deprecated
1757 protected boolean isViewableGroup(
1758 User user, long groupId, boolean privateLayout, long layoutId,
1759 String controlPanelCategory, PermissionChecker permissionChecker)
1760 throws PortalException {
1761
1762 return LayoutPermissionUtil.contains(
1763 permissionChecker, groupId, privateLayout, layoutId,
1764 ActionKeys.VIEW);
1765 }
1766
1767 protected List<Layout> mergeAdditionalLayouts(
1768 HttpServletRequest request, User user,
1769 PermissionChecker permissionChecker, Layout layout,
1770 List<Layout> layouts, long doAsGroupId)
1771 throws PortalException {
1772
1773 if ((layout == null) || layout.isPrivateLayout()) {
1774 return layouts;
1775 }
1776
1777 long layoutGroupId = layout.getGroupId();
1778
1779 Group guestGroup = GroupLocalServiceUtil.getGroup(
1780 user.getCompanyId(), GroupConstants.GUEST);
1781
1782 if (layoutGroupId != guestGroup.getGroupId()) {
1783 Group layoutGroup = GroupLocalServiceUtil.getGroup(layoutGroupId);
1784
1785 UnicodeProperties typeSettingsProperties =
1786 layoutGroup.getTypeSettingsProperties();
1787
1788 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
1789 typeSettingsProperties.getProperty("mergeGuestPublicPages"));
1790
1791 if (!mergeGuestPublicPages) {
1792 return layouts;
1793 }
1794
1795 List<Layout> guestLayouts = LayoutLocalServiceUtil.getLayouts(
1796 guestGroup.getGroupId(), false,
1797 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1798
1799 LayoutComposite viewableLayoutComposite =
1800 getViewableLayoutComposite(
1801 request, user, permissionChecker, layout, guestLayouts,
1802 doAsGroupId);
1803
1804 guestLayouts = viewableLayoutComposite.getLayouts();
1805
1806 if (layouts == null) {
1807 return guestLayouts;
1808 }
1809
1810 layouts.addAll(0, guestLayouts);
1811 }
1812 else {
1813 HttpSession session = request.getSession();
1814
1815 Long previousGroupId = (Long)session.getAttribute(
1816 WebKeys.VISITED_GROUP_ID_PREVIOUS);
1817
1818 if ((previousGroupId != null) &&
1819 (previousGroupId.longValue() != layoutGroupId)) {
1820
1821 Group previousGroup = null;
1822
1823 try {
1824 previousGroup = GroupLocalServiceUtil.getGroup(
1825 previousGroupId.longValue());
1826 }
1827 catch (NoSuchGroupException nsge) {
1828 if (_log.isWarnEnabled()) {
1829 _log.warn(nsge);
1830 }
1831
1832 return layouts;
1833 }
1834
1835 UnicodeProperties typeSettingsProperties =
1836 previousGroup.getTypeSettingsProperties();
1837
1838 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
1839 typeSettingsProperties.getProperty(
1840 "mergeGuestPublicPages"));
1841
1842 if (!mergeGuestPublicPages) {
1843 return layouts;
1844 }
1845
1846 List<Layout> previousLayouts =
1847 LayoutLocalServiceUtil.getLayouts(
1848 previousGroupId.longValue(), false,
1849 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1850
1851 LayoutComposite viewableLayoutComposite =
1852 getViewableLayoutComposite(
1853 request, user, permissionChecker, layout,
1854 previousLayouts, doAsGroupId);
1855
1856 previousLayouts = viewableLayoutComposite.getLayouts();
1857
1858 if (previousLayouts != null) {
1859 layouts.addAll(previousLayouts);
1860 }
1861 }
1862 }
1863
1864 return layouts;
1865 }
1866
1867 protected void rememberVisitedGroupIds(
1868 HttpServletRequest request, long currentGroupId) {
1869
1870 String requestURI = GetterUtil.getString(request.getRequestURI());
1871
1872 if (!requestURI.endsWith(_PATH_PORTAL_LAYOUT)) {
1873 return;
1874 }
1875
1876 HttpSession session = request.getSession();
1877
1878 Long recentGroupId = (Long)session.getAttribute(
1879 WebKeys.VISITED_GROUP_ID_RECENT);
1880
1881 Long previousGroupId = (Long)session.getAttribute(
1882 WebKeys.VISITED_GROUP_ID_PREVIOUS);
1883
1884 if (recentGroupId == null) {
1885 recentGroupId = Long.valueOf(currentGroupId);
1886
1887 session.setAttribute(
1888 WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);
1889 }
1890 else if (recentGroupId.longValue() != currentGroupId) {
1891 previousGroupId = Long.valueOf(recentGroupId.longValue());
1892
1893 recentGroupId = Long.valueOf(currentGroupId);
1894
1895 session.setAttribute(
1896 WebKeys.VISITED_GROUP_ID_RECENT, recentGroupId);
1897
1898 session.setAttribute(
1899 WebKeys.VISITED_GROUP_ID_PREVIOUS, previousGroupId);
1900 }
1901
1902 if (_log.isDebugEnabled()) {
1903 _log.debug("Current group id " + currentGroupId);
1904 _log.debug("Recent group id " + recentGroupId);
1905 _log.debug("Previous group id " + previousGroupId);
1906 }
1907 }
1908
1909 protected void servicePre(
1910 HttpServletRequest request, HttpServletResponse response)
1911 throws Exception {
1912
1913 ThemeDisplay themeDisplay = initThemeDisplay(request, response);
1914
1915 if (themeDisplay == null) {
1916 return;
1917 }
1918
1919 request.setAttribute(WebKeys.THEME_DISPLAY, themeDisplay);
1920
1921
1922
1923 ServiceContext serviceContext = ServiceContextFactory.getInstance(
1924 request);
1925
1926 ServiceContextThreadLocal.pushServiceContext(serviceContext);
1927
1928
1929
1930 if (PropsValues.LAYOUT_AJAX_RENDER_ENABLE) {
1931 boolean portletAjaxRender = ParamUtil.getBoolean(
1932 request, "p_p_ajax", true);
1933
1934 request.setAttribute(
1935 WebKeys.PORTLET_AJAX_RENDER, portletAjaxRender);
1936 }
1937
1938
1939
1940 if (PropsValues.LAYOUT_PARALLEL_RENDER_ENABLE &&
1941 ServerDetector.isTomcat()) {
1942
1943 boolean portletParallelRender = ParamUtil.getBoolean(
1944 request, "p_p_parallel", true);
1945
1946 request.setAttribute(
1947 WebKeys.PORTLET_PARALLEL_RENDER, portletParallelRender);
1948 }
1949 }
1950
1951 protected void updateUserLayouts(User user) throws Exception {
1952 Boolean hasPowerUserRole = null;
1953
1954
1955
1956 boolean addDefaultUserPrivateLayouts = false;
1957
1958 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED &&
1959 PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_AUTO_CREATE) {
1960
1961 addDefaultUserPrivateLayouts = true;
1962
1963 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
1964 if (hasPowerUserRole == null) {
1965 hasPowerUserRole = hasPowerUserRole(user);
1966 }
1967
1968 if (!hasPowerUserRole.booleanValue()) {
1969 addDefaultUserPrivateLayouts = false;
1970 }
1971 }
1972 }
1973
1974 Boolean hasPrivateLayouts = null;
1975
1976 if (addDefaultUserPrivateLayouts) {
1977 hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(
1978 user, true, false);
1979
1980 if (!hasPrivateLayouts) {
1981 addDefaultUserPrivateLayouts(user);
1982 }
1983 }
1984
1985 boolean deleteDefaultUserPrivateLayouts = false;
1986
1987 if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED) {
1988 deleteDefaultUserPrivateLayouts = true;
1989 }
1990 else if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
1991 if (hasPowerUserRole == null) {
1992 hasPowerUserRole = hasPowerUserRole(user);
1993 }
1994
1995 if (!hasPowerUserRole.booleanValue()) {
1996 deleteDefaultUserPrivateLayouts = true;
1997 }
1998 }
1999
2000 if (deleteDefaultUserPrivateLayouts) {
2001 if (hasPrivateLayouts == null) {
2002 hasPrivateLayouts = LayoutLocalServiceUtil.hasLayouts(
2003 user, true, false);
2004 }
2005
2006 if (hasPrivateLayouts) {
2007 deleteDefaultUserPrivateLayouts(user);
2008 }
2009 }
2010
2011
2012
2013 boolean addDefaultUserPublicLayouts = false;
2014
2015 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED &&
2016 PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_AUTO_CREATE) {
2017
2018 addDefaultUserPublicLayouts = true;
2019
2020 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
2021 if (hasPowerUserRole == null) {
2022 hasPowerUserRole = hasPowerUserRole(user);
2023 }
2024
2025 if (!hasPowerUserRole.booleanValue()) {
2026 addDefaultUserPublicLayouts = false;
2027 }
2028 }
2029 }
2030
2031 Boolean hasPublicLayouts = null;
2032
2033 if (addDefaultUserPublicLayouts) {
2034 hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(
2035 user, false, false);
2036
2037 if (!hasPublicLayouts) {
2038 addDefaultUserPublicLayouts(user);
2039 }
2040 }
2041
2042 boolean deleteDefaultUserPublicLayouts = false;
2043
2044 if (!PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED) {
2045 deleteDefaultUserPublicLayouts = true;
2046 }
2047 else if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
2048 if (hasPowerUserRole == null) {
2049 hasPowerUserRole = hasPowerUserRole(user);
2050 }
2051
2052 if (!hasPowerUserRole.booleanValue()) {
2053 deleteDefaultUserPublicLayouts = true;
2054 }
2055 }
2056
2057 if (deleteDefaultUserPublicLayouts) {
2058 if (hasPublicLayouts == null) {
2059 hasPublicLayouts = LayoutLocalServiceUtil.hasLayouts(
2060 user, false, false);
2061 }
2062
2063 if (hasPublicLayouts) {
2064 deleteDefaultUserPublicLayouts(user);
2065 }
2066 }
2067 }
2068
2069 protected File privateLARFile;
2070 protected File publicLARFile;
2071
2072 protected class LayoutComposite {
2073
2074 protected LayoutComposite(Layout layout, List<Layout> layouts) {
2075 _layout = layout;
2076 _layouts = layouts;
2077 }
2078
2079 protected Layout getLayout() {
2080 return _layout;
2081 }
2082
2083 protected List<Layout> getLayouts() {
2084 return _layouts;
2085 }
2086
2087 private final Layout _layout;
2088 private final List<Layout> _layouts;
2089
2090 }
2091
2092 private static final String _PATH_PORTAL_LAYOUT = "/portal/layout";
2093
2094 private static final String _PATH_PORTAL_LOGIN = "/portal/login";
2095
2096 private static final String _PATH_PORTAL_LOGOUT = "/portal/logout";
2097
2098 private static final Log _log = LogFactoryUtil.getLog(
2099 ServicePreAction.class);
2100
2101 }