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