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