1
22
23 package com.liferay.portal.events;
24
25 import com.liferay.portal.LayoutPermissionException;
26 import com.liferay.portal.NoSuchGroupException;
27 import com.liferay.portal.NoSuchLayoutException;
28 import com.liferay.portal.PortalException;
29 import com.liferay.portal.SystemException;
30 import com.liferay.portal.kernel.dao.orm.QueryUtil;
31 import com.liferay.portal.kernel.events.Action;
32 import com.liferay.portal.kernel.events.ActionException;
33 import com.liferay.portal.kernel.language.LanguageUtil;
34 import com.liferay.portal.kernel.portlet.LiferayWindowState;
35 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
36 import com.liferay.portal.kernel.servlet.ImageServletTokenUtil;
37 import com.liferay.portal.kernel.servlet.SessionErrors;
38 import com.liferay.portal.kernel.util.GetterUtil;
39 import com.liferay.portal.kernel.util.HttpUtil;
40 import com.liferay.portal.kernel.util.LocaleUtil;
41 import com.liferay.portal.kernel.util.ParamUtil;
42 import com.liferay.portal.kernel.util.StringPool;
43 import com.liferay.portal.kernel.util.StringUtil;
44 import com.liferay.portal.kernel.util.UnicodeProperties;
45 import com.liferay.portal.kernel.util.Validator;
46 import com.liferay.portal.lar.PortletDataHandlerKeys;
47 import com.liferay.portal.model.ColorScheme;
48 import com.liferay.portal.model.Company;
49 import com.liferay.portal.model.Group;
50 import com.liferay.portal.model.GroupConstants;
51 import com.liferay.portal.model.Image;
52 import com.liferay.portal.model.Layout;
53 import com.liferay.portal.model.LayoutConstants;
54 import com.liferay.portal.model.LayoutSet;
55 import com.liferay.portal.model.LayoutTypePortlet;
56 import com.liferay.portal.model.Role;
57 import com.liferay.portal.model.RoleConstants;
58 import com.liferay.portal.model.Theme;
59 import com.liferay.portal.model.User;
60 import com.liferay.portal.model.impl.ColorSchemeImpl;
61 import com.liferay.portal.model.impl.LayoutImpl;
62 import com.liferay.portal.model.impl.LayoutTypePortletImpl;
63 import com.liferay.portal.model.impl.ThemeImpl;
64 import com.liferay.portal.security.permission.ActionKeys;
65 import com.liferay.portal.security.permission.PermissionChecker;
66 import com.liferay.portal.security.permission.PermissionCheckerFactory;
67 import com.liferay.portal.security.permission.PermissionThreadLocal;
68 import com.liferay.portal.service.GroupLocalServiceUtil;
69 import com.liferay.portal.service.ImageLocalServiceUtil;
70 import com.liferay.portal.service.LayoutLocalServiceUtil;
71 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
72 import com.liferay.portal.service.OrganizationLocalServiceUtil;
73 import com.liferay.portal.service.RoleLocalServiceUtil;
74 import com.liferay.portal.service.ThemeLocalServiceUtil;
75 import com.liferay.portal.service.UserLocalServiceUtil;
76 import com.liferay.portal.service.permission.GroupPermissionUtil;
77 import com.liferay.portal.service.permission.LayoutPermissionUtil;
78 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
79 import com.liferay.portal.service.permission.UserPermissionUtil;
80 import com.liferay.portal.theme.ThemeDisplay;
81 import com.liferay.portal.theme.ThemeDisplayFactory;
82 import com.liferay.portal.util.CookieKeys;
83 import com.liferay.portal.util.LayoutClone;
84 import com.liferay.portal.util.LayoutCloneFactory;
85 import com.liferay.portal.util.PortalUtil;
86 import com.liferay.portal.util.PortletKeys;
87 import com.liferay.portal.util.PropsKeys;
88 import com.liferay.portal.util.PropsUtil;
89 import com.liferay.portal.util.PropsValues;
90 import com.liferay.portal.util.WebKeys;
91 import com.liferay.portlet.PortletURLImpl;
92 import com.liferay.util.Normalizer;
93
94 import java.io.File;
95
96 import java.util.ArrayList;
97 import java.util.HashMap;
98 import java.util.LinkedHashMap;
99 import java.util.List;
100 import java.util.Locale;
101 import java.util.Map;
102 import java.util.TimeZone;
103
104 import javax.portlet.PortletMode;
105 import javax.portlet.PortletRequest;
106 import javax.portlet.PortletURL;
107 import javax.portlet.WindowState;
108
109 import javax.servlet.http.HttpServletRequest;
110 import javax.servlet.http.HttpServletResponse;
111 import javax.servlet.http.HttpSession;
112
113 import org.apache.commons.lang.time.StopWatch;
114 import org.apache.commons.logging.Log;
115 import org.apache.commons.logging.LogFactory;
116 import org.apache.struts.Globals;
117
118
125 public class ServicePreAction extends Action {
126
127 public ServicePreAction() {
128 initImportLARFiles();
129 }
130
131 public void run(HttpServletRequest request, HttpServletResponse response)
132 throws ActionException {
133
134 StopWatch stopWatch = null;
135
136 if (_log.isDebugEnabled()) {
137 stopWatch = new StopWatch();
138
139 stopWatch.start();
140 }
141
142 try {
143 servicePre(request, response);
144 }
145 catch (Exception e) {
146 throw new ActionException(e);
147 }
148
149 if (_log.isDebugEnabled()) {
150 _log.debug("Running takes " + stopWatch.getTime() + " ms");
151 }
152 }
153
154 protected void addDefaultLayoutsByLAR(
155 long userId, long groupId, boolean privateLayout, File larFile)
156 throws PortalException, SystemException {
157
158 Map<String, String[]> parameterMap = new HashMap<String, String[]>();
159
160 parameterMap.put(
161 PortletDataHandlerKeys.PERMISSIONS,
162 new String[] {Boolean.TRUE.toString()});
163 parameterMap.put(
164 PortletDataHandlerKeys.PORTLET_DATA,
165 new String[] {Boolean.TRUE.toString()});
166 parameterMap.put(
167 PortletDataHandlerKeys.PORTLET_DATA_CONTROL_DEFAULT,
168 new String[] {Boolean.TRUE.toString()});
169 parameterMap.put(
170 PortletDataHandlerKeys.PORTLET_SETUP,
171 new String[] {Boolean.TRUE.toString()});
172 parameterMap.put(
173 PortletDataHandlerKeys.USER_PERMISSIONS,
174 new String[] {Boolean.FALSE.toString()});
175
176 LayoutLocalServiceUtil.importLayouts(
177 userId, groupId, privateLayout, parameterMap, larFile);
178 }
179
180 protected void addDefaultUserPrivateLayoutByProperties(
181 long userId, long groupId)
182 throws PortalException, SystemException {
183
184 String friendlyURL = getFriendlyURL(
185 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_FRIENDLY_URL);
186
187 Layout layout = LayoutLocalServiceUtil.addLayout(
188 userId, groupId, true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
189 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_NAME, StringPool.BLANK,
190 StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL);
191
192 LayoutTypePortlet layoutTypePortlet =
193 (LayoutTypePortlet)layout.getLayoutType();
194
195 layoutTypePortlet.setLayoutTemplateId(
196 0, PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_TEMPLATE_ID, false);
197
198 for (int i = 0; i < 10; i++) {
199 String columnId = "column-" + i;
200 String portletIds = PropsUtil.get(
201 PropsKeys.DEFAULT_USER_PRIVATE_LAYOUT_COLUMN + i);
202
203 String[] portletIdsArray = StringUtil.split(portletIds);
204
205 layoutTypePortlet.addPortletIds(
206 0, portletIdsArray, columnId, false);
207 }
208
209 LayoutLocalServiceUtil.updateLayout(
210 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
211 layout.getTypeSettings());
212
213 boolean updateLayoutSet = false;
214
215 LayoutSet layoutSet = layout.getLayoutSet();
216
217 if (Validator.isNotNull(
218 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID)) {
219
220 layoutSet.setThemeId(
221 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_THEME_ID);
222
223 updateLayoutSet = true;
224 }
225
226 if (Validator.isNotNull(
227 PropsValues.
228 DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {
229
230 layoutSet.setColorSchemeId(
231 PropsValues.
232 DEFAULT_USER_PRIVATE_LAYOUT_REGULAR_COLOR_SCHEME_ID);
233
234 updateLayoutSet = true;
235 }
236
237 if (Validator.isNotNull(
238 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID)) {
239
240 layoutSet.setWapThemeId(
241 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_THEME_ID);
242
243 updateLayoutSet = true;
244 }
245
246 if (Validator.isNotNull(
247 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID)) {
248
249 layoutSet.setWapColorSchemeId(
250 PropsValues.DEFAULT_USER_PRIVATE_LAYOUT_WAP_COLOR_SCHEME_ID);
251
252 updateLayoutSet = true;
253 }
254
255 if (updateLayoutSet) {
256 LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
257 }
258 }
259
260 protected void addDefaultUserPrivateLayouts(User user)
261 throws PortalException, SystemException {
262
263 Group userGroup = user.getGroup();
264
265 if (privateLARFile != null) {
266 addDefaultLayoutsByLAR(
267 user.getUserId(), userGroup.getGroupId(), true, privateLARFile);
268 }
269 else {
270 addDefaultUserPrivateLayoutByProperties(
271 user.getUserId(), userGroup.getGroupId());
272 }
273 }
274
275 protected void addDefaultUserPublicLayoutByProperties(
276 long userId, long groupId)
277 throws PortalException, SystemException {
278
279 String friendlyURL = getFriendlyURL(
280 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_FRIENDLY_URL);
281
282 Layout layout = LayoutLocalServiceUtil.addLayout(
283 userId, groupId, false, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
284 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_NAME, StringPool.BLANK,
285 StringPool.BLANK, LayoutConstants.TYPE_PORTLET, false, friendlyURL);
286
287 LayoutTypePortlet layoutTypePortlet =
288 (LayoutTypePortlet)layout.getLayoutType();
289
290 layoutTypePortlet.setLayoutTemplateId(
291 0, PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_TEMPLATE_ID, false);
292
293 for (int i = 0; i < 10; i++) {
294 String columnId = "column-" + i;
295 String portletIds = PropsUtil.get(
296 PropsKeys.DEFAULT_USER_PUBLIC_LAYOUT_COLUMN + i);
297
298 String[] portletIdsArray = StringUtil.split(portletIds);
299
300 layoutTypePortlet.addPortletIds(
301 0, portletIdsArray, columnId, false);
302 }
303
304 LayoutLocalServiceUtil.updateLayout(
305 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
306 layout.getTypeSettings());
307
308 boolean updateLayoutSet = false;
309
310 LayoutSet layoutSet = layout.getLayoutSet();
311
312 if (Validator.isNotNull(
313 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID)) {
314
315 layoutSet.setThemeId(
316 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_THEME_ID);
317
318 updateLayoutSet = true;
319 }
320
321 if (Validator.isNotNull(
322 PropsValues.
323 DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID)) {
324
325 layoutSet.setColorSchemeId(
326 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_REGULAR_COLOR_SCHEME_ID);
327
328 updateLayoutSet = true;
329 }
330
331 if (Validator.isNotNull(
332 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID)) {
333
334 layoutSet.setWapThemeId(
335 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_THEME_ID);
336
337 updateLayoutSet = true;
338 }
339
340 if (Validator.isNotNull(
341 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID)) {
342
343 layoutSet.setWapColorSchemeId(
344 PropsValues.DEFAULT_USER_PUBLIC_LAYOUT_WAP_COLOR_SCHEME_ID);
345
346 updateLayoutSet = true;
347 }
348
349 if (updateLayoutSet) {
350 LayoutSetLocalServiceUtil.updateLayoutSet(layoutSet);
351 }
352 }
353
354 protected void addDefaultUserPublicLayouts(User user)
355 throws PortalException, SystemException {
356
357 Group userGroup = user.getGroup();
358
359 if (publicLARFile != null) {
360 addDefaultLayoutsByLAR(
361 user.getUserId(), userGroup.getGroupId(), false, publicLARFile);
362 }
363 else {
364 addDefaultUserPublicLayoutByProperties(
365 user.getUserId(), userGroup.getGroupId());
366 }
367 }
368
369 protected void deleteDefaultUserPrivateLayouts(User user)
370 throws PortalException, SystemException {
371
372 Group userGroup = user.getGroup();
373
374 LayoutLocalServiceUtil.deleteLayouts(userGroup.getGroupId(), true);
375 }
376
377 protected void deleteDefaultUserPublicLayouts(User user)
378 throws PortalException, SystemException {
379
380 Group userGroup = user.getGroup();
381
382 LayoutLocalServiceUtil.deleteLayouts(userGroup.getGroupId(), false);
383 }
384
385 protected Object[] getDefaultLayout(
386 HttpServletRequest request, User user, boolean signedIn)
387 throws PortalException, SystemException {
388
389
391 LayoutSet layoutSet = (LayoutSet)request.getAttribute(
392 WebKeys.VIRTUAL_HOST_LAYOUT_SET);
393
394 if (layoutSet != null) {
395 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
396 layoutSet.getGroupId(), layoutSet.isPrivateLayout(),
397 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
398
399 if (layouts.size() > 0) {
400 Layout layout = layouts.get(0);
401
402 return new Object[] {layout, layouts};
403 }
404 }
405
406 Layout layout = null;
407 List<Layout> layouts = null;
408
409 if (signedIn) {
410
411
413 Group userGroup = user.getGroup();
414
415 layouts = LayoutLocalServiceUtil.getLayouts(
416 userGroup.getGroupId(), true,
417 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
418
419 if (layouts.size() == 0) {
420 layouts = LayoutLocalServiceUtil.getLayouts(
421 userGroup.getGroupId(), false,
422 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
423 }
424
425 if (layouts.size() > 0) {
426 layout = layouts.get(0);
427 }
428
429
431 if (layout == null) {
432 LinkedHashMap<String, Object> groupParams =
433 new LinkedHashMap<String, Object>();
434
435 groupParams.put("usersGroups", new Long(user.getUserId()));
436
437 List<Group> groups = GroupLocalServiceUtil.search(
438 user.getCompanyId(), null, null, groupParams,
439 QueryUtil.ALL_POS, QueryUtil.ALL_POS);
440
441 for (int i = 0; i < groups.size(); i++) {
442 Group group = groups.get(i);
443
444 layouts = LayoutLocalServiceUtil.getLayouts(
445 group.getGroupId(), true,
446 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
447
448 if (layouts.size() == 0) {
449 layouts = LayoutLocalServiceUtil.getLayouts(
450 group.getGroupId(), false,
451 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
452 }
453
454 if (layouts.size() > 0) {
455 layout = layouts.get(0);
456
457 break;
458 }
459 }
460 }
461 }
462 else {
463
464
466 Group guestGroup = GroupLocalServiceUtil.getGroup(
467 user.getCompanyId(), GroupConstants.GUEST);
468
469 layouts = LayoutLocalServiceUtil.getLayouts(
470 guestGroup.getGroupId(), false,
471 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
472
473 if (layouts.size() > 0) {
474 layout = layouts.get(0);
475 }
476 }
477
478 return new Object[] {layout, layouts};
479 }
480
481 protected String getFriendlyURL(String friendlyURL) {
482 friendlyURL = GetterUtil.getString(friendlyURL);
483
484 return Normalizer.normalizeToAscii(friendlyURL.trim().toLowerCase());
485 }
486
487 protected Object[] getViewableLayouts(
488 HttpServletRequest request, User user,
489 PermissionChecker permissionChecker, Layout layout,
490 List<Layout> layouts)
491 throws PortalException, SystemException {
492
493 if ((layouts == null) || (layouts.size() == 0)) {
494 return new Object[] {layout, layouts};
495 }
496
497 boolean replaceLayout = true;
498
499 if (LayoutPermissionUtil.contains(
500 permissionChecker, layout, ActionKeys.VIEW)) {
501
502 replaceLayout = false;
503 }
504
505 List<Layout> accessibleLayouts = new ArrayList<Layout>();
506
507 for (int i = 0; i < layouts.size(); i++) {
508 Layout curLayout = layouts.get(i);
509
510 if (!curLayout.isHidden() &&
511 LayoutPermissionUtil.contains(
512 permissionChecker, curLayout, ActionKeys.VIEW)) {
513
514 if ((accessibleLayouts.size() == 0) && replaceLayout) {
515 layout = curLayout;
516 }
517
518 accessibleLayouts.add(curLayout);
519 }
520 }
521
522 if (accessibleLayouts.size() == 0) {
523 layouts = null;
524
525 SessionErrors.add(
526 request, LayoutPermissionException.class.getName());
527 }
528 else {
529 layouts = accessibleLayouts;
530 }
531
532 return new Object[] {layout, layouts};
533 }
534
535 protected void initImportLARFiles() {
536 String privateLARFileName =
537 PropsValues.DEFAULT_USER_PRIVATE_LAYOUTS_LAR;
538
539 if (_log.isDebugEnabled()) {
540 _log.debug("Reading private LAR file " + privateLARFileName);
541 }
542
543 if (Validator.isNotNull(privateLARFileName)) {
544 privateLARFile = new File(privateLARFileName);
545
546 if (!privateLARFile.exists()) {
547 _log.error(
548 "Private LAR file " + privateLARFile + " does not exist");
549
550 privateLARFile = null;
551 }
552 else {
553 if (_log.isDebugEnabled()) {
554 _log.debug("Using private LAR file " + privateLARFileName);
555 }
556 }
557 }
558
559 String publicLARFileName = PropsValues.DEFAULT_USER_PUBLIC_LAYOUTS_LAR;
560
561 if (_log.isDebugEnabled()) {
562 _log.debug("Reading public LAR file " + publicLARFileName);
563 }
564
565 if (Validator.isNotNull(publicLARFileName)) {
566 publicLARFile = new File(publicLARFileName);
567
568 if (!publicLARFile.exists()) {
569 _log.error(
570 "Public LAR file " + publicLARFile + " does not exist");
571
572 publicLARFile = null;
573 }
574 else {
575 if (_log.isDebugEnabled()) {
576 _log.debug("Using public LAR file " + publicLARFileName);
577 }
578 }
579 }
580 }
581
582 protected boolean isViewableCommunity(
583 User user, long groupId, boolean privateLayout,
584 PermissionChecker permissionChecker)
585 throws PortalException, SystemException {
586
587 Group group = GroupLocalServiceUtil.getGroup(groupId);
588
589
591 if (!group.isActive()) {
592 return false;
593 }
594 else if (group.isStagingGroup()) {
595 Group liveGroup = group.getLiveGroup();
596
597 if (!liveGroup.isActive()) {
598 return false;
599 }
600 }
601
602
605 if (group.isUser()) {
606 long groupUserId = group.getClassPK();
607
608 if (groupUserId == user.getUserId()) {
609 return true;
610 }
611 else {
612 User groupUser = UserLocalServiceUtil.getUserById(groupUserId);
613
614 if (!groupUser.isActive()) {
615 return false;
616 }
617
618 if (privateLayout) {
619 if (UserPermissionUtil.contains(
620 permissionChecker, groupUserId,
621 groupUser.getOrganizationIds(),
622 ActionKeys.UPDATE)) {
623
624 return true;
625 }
626 else {
627 return false;
628 }
629 }
630 }
631 }
632
633
636 if (group.isStagingGroup()) {
637 if (user.isDefaultUser()) {
638 return false;
639 }
640
641 if (GroupPermissionUtil.contains(
642 permissionChecker, groupId, ActionKeys.APPROVE_PROPOSAL) ||
643 GroupPermissionUtil.contains(
644 permissionChecker, groupId, ActionKeys.ASSIGN_REVIEWER) ||
645 GroupPermissionUtil.contains(
646 permissionChecker, groupId, ActionKeys.MANAGE_LAYOUTS) ||
647 GroupPermissionUtil.contains(
648 permissionChecker, groupId, ActionKeys.MANAGE_STAGING) ||
649 GroupPermissionUtil.contains(
650 permissionChecker, groupId, ActionKeys.PUBLISH_STAGING)) {
651
652 return true;
653 }
654
655 return false;
656 }
657
658
660 if (!privateLayout) {
661 return true;
662 }
663
664
668 if (group.isCommunity()) {
669 if (GroupLocalServiceUtil.hasUserGroup(user.getUserId(), groupId)) {
670 return true;
671 }
672 else if (GroupPermissionUtil.contains(
673 permissionChecker, groupId, ActionKeys.UPDATE)) {
674
675 return true;
676 }
677 }
678 else if (group.isOrganization()) {
679 long organizationId = group.getClassPK();
680
681 if (OrganizationLocalServiceUtil.hasUserOrganization(
682 user.getUserId(), organizationId)) {
683
684 return true;
685 }
686 else if (OrganizationPermissionUtil.contains(
687 permissionChecker, organizationId, ActionKeys.UPDATE)) {
688
689 return true;
690 }
691 }
692 else if (group.isUserGroup()) {
693 if (GroupPermissionUtil.contains(
694 permissionChecker, groupId, ActionKeys.MANAGE_LAYOUTS)) {
695
696 return true;
697 }
698 }
699
700 return false;
701 }
702
703 protected List<Layout> mergeAdditionalLayouts(
704 HttpServletRequest request, User user,
705 PermissionChecker permissionChecker, Layout layout,
706 List<Layout> layouts)
707 throws PortalException, SystemException {
708
709 if ((layout == null) || layout.isPrivateLayout()) {
710 return layouts;
711 }
712
713 long layoutGroupId = layout.getGroupId();
714
715 Group guestGroup = GroupLocalServiceUtil.getGroup(
716 user.getCompanyId(), GroupConstants.GUEST);
717
718 if (layoutGroupId != guestGroup.getGroupId()) {
719 Group layoutGroup = GroupLocalServiceUtil.getGroup(layoutGroupId);
720
721 UnicodeProperties props = layoutGroup.getTypeSettingsProperties();
722
723 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
724 props.getProperty("mergeGuestPublicPages"));
725
726 if (!mergeGuestPublicPages) {
727 return layouts;
728 }
729
730 List<Layout> guestLayouts = LayoutLocalServiceUtil.getLayouts(
731 guestGroup.getGroupId(), false,
732 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
733
734 Object[] viewableLayouts = getViewableLayouts(
735 request, user, permissionChecker, layout, guestLayouts);
736
737 guestLayouts = (List<Layout>)viewableLayouts[1];
738
739 layouts.addAll(0, guestLayouts);
740 }
741 else {
742 HttpSession session = request.getSession();
743
744 Long previousGroupId = (Long)session.getAttribute(
745 WebKeys.LIFERAY_SHARED_VISITED_GROUP_ID_PREVIOUS);
746
747 if ((previousGroupId != null) &&
748 (previousGroupId.longValue() != layoutGroupId)) {
749
750 Group previousGroup = null;
751
752 try {
753 previousGroup = GroupLocalServiceUtil.getGroup(
754 previousGroupId.longValue());
755 }
756 catch (NoSuchGroupException nsge) {
757 if (_log.isWarnEnabled()) {
758 _log.warn(nsge);
759 }
760
761 return layouts;
762 }
763
764 UnicodeProperties props =
765 previousGroup.getTypeSettingsProperties();
766
767 boolean mergeGuestPublicPages = GetterUtil.getBoolean(
768 props.getProperty("mergeGuestPublicPages"));
769
770 if (!mergeGuestPublicPages) {
771 return layouts;
772 }
773
774 List<Layout> previousLayouts =
775 LayoutLocalServiceUtil.getLayouts(
776 previousGroupId.longValue(), false,
777 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
778
779 Object[] viewableLayouts = getViewableLayouts(
780 request, user, permissionChecker, layout, previousLayouts);
781
782 previousLayouts = (List<Layout>)viewableLayouts[1];
783
784 layouts.addAll(previousLayouts);
785 }
786 }
787
788 return layouts;
789 }
790
791 protected void rememberVisitedGroupIds(
792 HttpServletRequest request, long currentGroupId) {
793
794 String requestURI = GetterUtil.getString(request.getRequestURI());
795
796 if (!requestURI.endsWith(_PATH_PORTAL_LAYOUT)) {
797 return;
798 }
799
800 HttpSession session = request.getSession();
801
802 Long recentGroupId = (Long)session.getAttribute(
803 WebKeys.LIFERAY_SHARED_VISITED_GROUP_ID_RECENT);
804
805 Long previousGroupId = (Long)session.getAttribute(
806 WebKeys.LIFERAY_SHARED_VISITED_GROUP_ID_PREVIOUS);
807
808 if (recentGroupId == null) {
809 recentGroupId = new Long(currentGroupId);
810
811 session.setAttribute(
812 WebKeys.LIFERAY_SHARED_VISITED_GROUP_ID_RECENT,
813 recentGroupId);
814 }
815 else if (recentGroupId.longValue() != currentGroupId) {
816 previousGroupId = new Long(recentGroupId.longValue());
817
818 recentGroupId = new Long(currentGroupId);
819
820 session.setAttribute(
821 WebKeys.LIFERAY_SHARED_VISITED_GROUP_ID_RECENT,
822 recentGroupId);
823
824 session.setAttribute(
825 WebKeys.LIFERAY_SHARED_VISITED_GROUP_ID_PREVIOUS,
826 previousGroupId);
827 }
828
829 if (_log.isDebugEnabled()) {
830 _log.debug("Current group id " + currentGroupId);
831 _log.debug("Recent group id " + recentGroupId);
832 _log.debug("Previous group id " + previousGroupId);
833 }
834 }
835
836 protected void servicePre(
837 HttpServletRequest request, HttpServletResponse response)
838 throws Exception {
839
840 HttpSession session = request.getSession();
841
842
844 Company company = PortalUtil.getCompany(request);
845
846 long companyId = company.getCompanyId();
847
848
850 String cdnHost = ParamUtil.getString(
851 request, "cdn_host", PortalUtil.getCDNHost());
852
853
855 String portalURL = PortalUtil.getPortalURL(request);
856
857
859 String contextPath = PortalUtil.getPathContext();
860 String friendlyURLPrivateGroupPath =
861 PortalUtil.getPathFriendlyURLPrivateGroup();
862 String friendlyURLPrivateUserPath =
863 PortalUtil.getPathFriendlyURLPrivateUser();
864 String friendlyURLPublicPath = PortalUtil.getPathFriendlyURLPublic();
865 String imagePath = PortalUtil.getPathImage();
866 String mainPath = PortalUtil.getPathMain();
867
868 String i18nLanguageId = (String)request.getAttribute(
869 WebKeys.I18N_LANGUAGE_ID);
870
871 if (Validator.isNotNull(i18nLanguageId)) {
872 if (Validator.isNotNull(contextPath)) {
873 mainPath = StringUtil.replaceFirst(
874 mainPath, contextPath,
875 contextPath + StringPool.SLASH + i18nLanguageId);
876 }
877 else {
878 mainPath = StringPool.SLASH + i18nLanguageId + mainPath;
879 }
880 }
881
882
884 String companyLogo =
885 imagePath + "/company_logo?img_id=" + company.getLogoId() + "&t=" +
886 ImageServletTokenUtil.getToken(company.getLogoId());
887
888 Image companyLogoImage = ImageLocalServiceUtil.getCompanyLogo(
889 company.getLogoId());
890
891 int companyLogoHeight = companyLogoImage.getHeight();
892 int companyLogoWidth = companyLogoImage.getWidth();
893
894 String realCompanyLogo = companyLogo;
895 int realCompanyLogoHeight = companyLogoHeight;
896 int realCompanyLogoWidth = companyLogoWidth;
897
898
900 User user = PortalUtil.getUser(request);
901
902 boolean signedIn = false;
903
904 if (user == null) {
905 user = company.getDefaultUser();
906 }
907 else if (!user.isDefaultUser()) {
908 signedIn = true;
909 }
910
911 User realUser = user;
912
913 Long realUserId = (Long)session.getAttribute(WebKeys.USER_ID);
914
915 if (realUserId != null) {
916 if (user.getUserId() != realUserId.longValue()) {
917 realUser = UserLocalServiceUtil.getUserById(
918 realUserId.longValue());
919 }
920 }
921
922 String doAsUserId = ParamUtil.getString(request, "doAsUserId");
923
924
926 PermissionChecker permissionChecker = PermissionCheckerFactory.create(
927 user, true);
928
929 PermissionThreadLocal.setPermissionChecker(permissionChecker);
930
931
933 Locale locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);
934
935 if (Validator.isNotNull(i18nLanguageId)) {
936 locale = LocaleUtil.fromLanguageId(i18nLanguageId);
937 }
938 else if (locale == null) {
939 if (signedIn) {
940 locale = user.getLocale();
941 }
942 else {
943
944
946 String languageId = CookieKeys.getCookie(
947 request, CookieKeys.GUEST_LANGUAGE_ID);
948
949 if (Validator.isNotNull(languageId)) {
950 locale = LocaleUtil.fromLanguageId(languageId);
951 }
952
953
955 if ((locale == null) && PropsValues.LOCALE_DEFAULT_REQUEST) {
956 locale = request.getLocale();
957 }
958
959
961 if (locale == null) {
962 locale = user.getLocale();
963 }
964
965 if (Validator.isNull(locale.getCountry())) {
966
967
969 locale = LanguageUtil.getLocale(locale.getLanguage());
970 }
971
972 if (!LanguageUtil.isAvailableLocale(locale)) {
973 locale = user.getLocale();
974 }
975 }
976
977 session.setAttribute(Globals.LOCALE_KEY, locale);
978
979 LanguageUtil.updateCookie(request, response, locale);
980 }
981
982
984 try {
985
986
988 CookieKeys.validateSupportCookie(request);
989 }
990 catch (Exception e) {
991 CookieKeys.addSupportCookie(request, response);
992 }
993
994
996 TimeZone timeZone = user.getTimeZone();
997
998 if (timeZone == null) {
999 timeZone = company.getTimeZone();
1000 }
1001
1002
1004 if (signedIn) {
1005 updateUserLayouts(user);
1006 }
1007
1008 Layout layout = null;
1009 List<Layout> layouts = null;
1010
1011 long plid = ParamUtil.getLong(request, "p_l_id");
1012
1013 if (plid > 0) {
1014 layout = LayoutLocalServiceUtil.getLayout(plid);
1015 }
1016 else {
1017 long groupId = ParamUtil.getLong(request, "groupId");
1018 boolean privateLayout = ParamUtil.getBoolean(
1019 request, "privateLayout");
1020 long layoutId = ParamUtil.getLong(request, "layoutId");
1021
1022 if ((groupId > 0) && layoutId > 0) {
1023 layout = LayoutLocalServiceUtil.getLayout(
1024 groupId, privateLayout, layoutId);
1025 }
1026 }
1027
1028 if (layout != null) {
1029 try {
1030 if (!signedIn && PropsValues.AUTH_FORWARD_BY_REDIRECT) {
1031 request.setAttribute(WebKeys.REQUESTED_LAYOUT, layout);
1032 }
1033
1034 boolean isViewableCommunity = isViewableCommunity(
1035 user, layout.getGroupId(), layout.isPrivateLayout(),
1036 permissionChecker);
1037
1038 if (!isViewableCommunity) {
1039 StringBuilder sb = new StringBuilder();
1040
1041 sb.append("User ");
1042 sb.append(user.getUserId());
1043 sb.append(" is not allowed to access the ");
1044 sb.append(layout.isPrivateLayout() ? "private": "public");
1045 sb.append(" pages of group ");
1046 sb.append(layout.getGroupId());
1047
1048 _log.warn(sb.toString());
1049
1050 layout = null;
1051 }
1052 else if (isViewableCommunity &&
1053 !LayoutPermissionUtil.contains(
1054 permissionChecker, layout, ActionKeys.VIEW)) {
1055
1056 layout = null;
1057 }
1058 else {
1059 layouts = LayoutLocalServiceUtil.getLayouts(
1060 layout.getGroupId(), layout.isPrivateLayout(),
1061 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
1062 }
1063 }
1064 catch (NoSuchLayoutException nsle) {
1065 }
1066 }
1067
1068 if (layout == null) {
1069 Object[] defaultLayout = getDefaultLayout(request, user, signedIn);
1070
1071 layout = (Layout)defaultLayout[0];
1072 layouts = (List<Layout>)defaultLayout[1];
1073
1074 request.setAttribute(WebKeys.LAYOUT_DEFAULT, Boolean.TRUE);
1075 }
1076
1077 Object[] viewableLayouts = getViewableLayouts(
1078 request, user, permissionChecker, layout, layouts);
1079
1080 String layoutSetLogo = null;
1081
1082 layout = (Layout)viewableLayouts[0];
1083 layouts = (List<Layout>)viewableLayouts[1];
1084
1085 LayoutTypePortlet layoutTypePortlet = null;
1086
1087 long scopeGroupId = PortalUtil.getScopeGroupId(layout);
1088
1089 rememberVisitedGroupIds(request, scopeGroupId);
1090
1091 layouts = mergeAdditionalLayouts(
1092 request, user, permissionChecker, layout, layouts);
1093
1094 if (layout != null) {
1095 if (company.isCommunityLogo()) {
1096 LayoutSet layoutSet = layout.getLayoutSet();
1097
1098 if (layoutSet.isLogo()) {
1099 long logoId = layoutSet.getLogoId();
1100
1101 layoutSetLogo =
1102 imagePath + "/layout_set_logo?img_id=" + logoId +
1103 "&t=" + ImageServletTokenUtil.getToken(logoId);
1104
1105 Image layoutSetLogoImage =
1106 ImageLocalServiceUtil.getCompanyLogo(logoId);
1107
1108 companyLogo = layoutSetLogo;
1109 companyLogoHeight = layoutSetLogoImage.getHeight();
1110 companyLogoWidth = layoutSetLogoImage.getWidth();
1111 }
1112 }
1113
1114 plid = layout.getPlid();
1115
1116
1119 layout = (Layout)((LayoutImpl)layout).clone();
1120
1121 layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType();
1122
1123 LayoutClone layoutClone = LayoutCloneFactory.getInstance();
1124
1125 if (layoutClone != null) {
1126 String typeSettings = layoutClone.get(request, plid);
1127
1128 if (typeSettings != null) {
1129 UnicodeProperties props = new UnicodeProperties(true);
1130
1131 props.load(typeSettings);
1132
1133 String stateMax = props.getProperty(
1134 LayoutTypePortletImpl.STATE_MAX);
1135 String stateMin = props.getProperty(
1136 LayoutTypePortletImpl.STATE_MIN);
1137 String modeAbout = props.getProperty(
1138 LayoutTypePortletImpl.MODE_ABOUT);
1139 String modeConfig = props.getProperty(
1140 LayoutTypePortletImpl.MODE_CONFIG);
1141 String modeEdit = props.getProperty(
1142 LayoutTypePortletImpl.MODE_EDIT);
1143 String modeEditDefaults = props.getProperty(
1144 LayoutTypePortletImpl.MODE_EDIT_DEFAULTS);
1145 String modeEditGuest = props.getProperty(
1146 LayoutTypePortletImpl.MODE_EDIT_GUEST);
1147 String modeHelp = props.getProperty(
1148 LayoutTypePortletImpl.MODE_HELP);
1149 String modePreview = props.getProperty(
1150 LayoutTypePortletImpl.MODE_PREVIEW);
1151 String modePrint = props.getProperty(
1152 LayoutTypePortletImpl.MODE_PRINT);
1153
1154 layoutTypePortlet.setStateMax(stateMax);
1155 layoutTypePortlet.setStateMin(stateMin);
1156 layoutTypePortlet.setModeAbout(modeAbout);
1157 layoutTypePortlet.setModeConfig(modeConfig);
1158 layoutTypePortlet.setModeEdit(modeEdit);
1159 layoutTypePortlet.setModeEditDefaults(modeEditDefaults);
1160 layoutTypePortlet.setModeEditGuest(modeEditGuest);
1161 layoutTypePortlet.setModeHelp(modeHelp);
1162 layoutTypePortlet.setModePreview(modePreview);
1163 layoutTypePortlet.setModePrint(modePrint);
1164 }
1165 }
1166
1167 request.setAttribute(WebKeys.LAYOUT, layout);
1168 request.setAttribute(WebKeys.LAYOUTS, layouts);
1169
1170 if (layout.isPrivateLayout()) {
1171 permissionChecker.setCheckGuest(false);
1172 }
1173 }
1174
1175
1177 Theme theme = null;
1178 ColorScheme colorScheme = null;
1179
1180 boolean wapTheme = BrowserSnifferUtil.isWap(request);
1181
1182 if (layout != null) {
1183 if (wapTheme) {
1184 theme = layout.getWapTheme();
1185 colorScheme = layout.getWapColorScheme();
1186 }
1187 else {
1188 theme = layout.getTheme();
1189 colorScheme = layout.getColorScheme();
1190 }
1191 }
1192 else {
1193 String themeId = null;
1194 String colorSchemeId = null;
1195
1196 if (wapTheme) {
1197 themeId = ThemeImpl.getDefaultWapThemeId();
1198 colorSchemeId = ColorSchemeImpl.getDefaultWapColorSchemeId();
1199 }
1200 else {
1201 themeId = ThemeImpl.getDefaultRegularThemeId();
1202 colorSchemeId =
1203 ColorSchemeImpl.getDefaultRegularColorSchemeId();
1204 }
1205
1206 theme = ThemeLocalServiceUtil.getTheme(
1207 companyId, themeId, wapTheme);
1208 colorScheme = ThemeLocalServiceUtil.getColorScheme(
1209 companyId, theme.getThemeId(), colorSchemeId, wapTheme);
1210 }
1211
1212 request.setAttribute(WebKeys.THEME, theme);
1213 request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);
1214
1215 boolean themeCssFastLoad = ParamUtil.getBoolean(
1216 request, "css_fast_load", PropsValues.THEME_CSS_FAST_LOAD);
1217
1218 boolean themeJsBarebone = PropsValues.JAVASCRIPT_BAREBONE_ENABLED;
1219
1220 if (themeJsBarebone) {
1221 if (signedIn) {
1222 themeJsBarebone = false;
1223 }
1224 }
1225
1226 boolean themeJsFastLoad = ParamUtil.getBoolean(
1227 request, "js_fast_load", PropsValues.JAVASCRIPT_FAST_LOAD);
1228
1229 String lifecycle = ParamUtil.getString(request, "p_p_lifecycle");
1230
1231 String facebookCanvasPageURL = (String)request.getAttribute(
1232 WebKeys.FACEBOOK_CANVAS_PAGE_URL);
1233
1234 boolean widget = false;
1235
1236 Boolean widgetObj = (Boolean)request.getAttribute(WebKeys.WIDGET);
1237
1238 if (widgetObj != null) {
1239 widget = widgetObj.booleanValue();
1240 }
1241
1242
1244 ThemeDisplay themeDisplay = ThemeDisplayFactory.create();
1245
1246
1249 themeDisplay.setCDNHost(cdnHost);
1250 themeDisplay.setPortalURL(portalURL);
1251 themeDisplay.setFacebookCanvasPageURL(facebookCanvasPageURL);
1252 themeDisplay.setWidget(widget);
1253
1254 themeDisplay.setCompany(company);
1255 themeDisplay.setCompanyLogo(companyLogo);
1256 themeDisplay.setCompanyLogoHeight(companyLogoHeight);
1257 themeDisplay.setCompanyLogoWidth(companyLogoWidth);
1258 themeDisplay.setRealCompanyLogo(realCompanyLogo);
1259 themeDisplay.setRealCompanyLogoHeight(realCompanyLogoHeight);
1260 themeDisplay.setRealCompanyLogoWidth(realCompanyLogoWidth);
1261 themeDisplay.setUser(user);
1262 themeDisplay.setRealUser(realUser);
1263 themeDisplay.setDoAsUserId(doAsUserId);
1264 themeDisplay.setLayoutSetLogo(layoutSetLogo);
1265 themeDisplay.setLayout(layout);
1266 themeDisplay.setLayouts(layouts);
1267 themeDisplay.setPlid(plid);
1268 themeDisplay.setLayoutTypePortlet(layoutTypePortlet);
1269 themeDisplay.setScopeGroupId(scopeGroupId);
1270 themeDisplay.setSignedIn(signedIn);
1271 themeDisplay.setPermissionChecker(permissionChecker);
1272 themeDisplay.setLocale(locale);
1273 themeDisplay.setLanguageId(LocaleUtil.toLanguageId(locale));
1274 themeDisplay.setI18nLanguageId(i18nLanguageId);
1275 themeDisplay.setTimeZone(timeZone);
1276 themeDisplay.setLookAndFeel(contextPath, theme, colorScheme);
1277 themeDisplay.setThemeCssFastLoad(themeCssFastLoad);
1278 themeDisplay.setThemeJsBarebone(themeJsBarebone);
1279 themeDisplay.setThemeJsFastLoad(themeJsFastLoad);
1280 themeDisplay.setServerName(request.getServerName());
1281 themeDisplay.setServerPort(request.getServerPort());
1282 themeDisplay.setSecure(request.isSecure());
1283 themeDisplay.setLifecycle(lifecycle);
1284 themeDisplay.setLifecycleAction(lifecycle.equals("1"));
1285 themeDisplay.setLifecycleRender(lifecycle.equals("0"));
1286 themeDisplay.setLifecycleResource(lifecycle.equals("2"));
1287 themeDisplay.setStateExclusive(LiferayWindowState.isExclusive(request));
1288 themeDisplay.setStateMaximized(LiferayWindowState.isMaximized(request));
1289 themeDisplay.setStatePopUp(LiferayWindowState.isPopUp(request));
1290 themeDisplay.setPathApplet(contextPath + "/applets");
1291 themeDisplay.setPathCms(contextPath + "/cms");
1292 themeDisplay.setPathContext(contextPath);
1293 themeDisplay.setPathFlash(contextPath + "/flash");
1294 themeDisplay.setPathFriendlyURLPrivateGroup(
1295 friendlyURLPrivateGroupPath);
1296 themeDisplay.setPathFriendlyURLPrivateUser(friendlyURLPrivateUserPath);
1297 themeDisplay.setPathFriendlyURLPublic(friendlyURLPublicPath);
1298 themeDisplay.setPathImage(imagePath);
1299 themeDisplay.setPathJavaScript(cdnHost + contextPath + "/html/js");
1300 themeDisplay.setPathMain(mainPath);
1301 themeDisplay.setPathSound(contextPath + "/html/sound");
1302
1303
1305 themeDisplay.setShowAddContentIcon(false);
1306 themeDisplay.setShowHomeIcon(true);
1307 themeDisplay.setShowMyAccountIcon(signedIn);
1308 themeDisplay.setShowPageSettingsIcon(false);
1309 themeDisplay.setShowPortalIcon(true);
1310 themeDisplay.setShowSignInIcon(!signedIn);
1311 themeDisplay.setShowSignOutIcon(signedIn);
1312 themeDisplay.setShowStagingIcon(false);
1313
1314 PortletURL createAccountURL = new PortletURLImpl(
1315 request, PortletKeys.LOGIN, plid, PortletRequest.ACTION_PHASE);
1316
1317 createAccountURL.setWindowState(WindowState.MAXIMIZED);
1318 createAccountURL.setPortletMode(PortletMode.VIEW);
1319
1320 createAccountURL.setParameter("saveLastPath", "0");
1321 createAccountURL.setParameter(
1322 "struts_action", "/login/create_account");
1323
1324 themeDisplay.setURLCreateAccount(createAccountURL);
1325
1326 String currentURL = PortalUtil.getCurrentURL(request);
1327
1328 themeDisplay.setURLCurrent(currentURL);
1329
1330 String urlHome = portalURL + contextPath;
1331
1332 themeDisplay.setURLHome(urlHome);
1333
1334 if (layout != null) {
1335 Group group = layout.getGroup();
1336
1337 if (layout.getType().equals(LayoutConstants.TYPE_PORTLET)) {
1338 boolean freeformLayout =
1339 layoutTypePortlet.getLayoutTemplateId().equals(
1340 "freeform");
1341
1342 themeDisplay.setFreeformLayout(freeformLayout);
1343
1344 boolean hasUpdateLayoutPermission =
1345 LayoutPermissionUtil.contains(
1346 permissionChecker, layout, ActionKeys.UPDATE);
1347
1348 if (hasUpdateLayoutPermission) {
1349 if (!LiferayWindowState.isMaximized(request)) {
1350 themeDisplay.setShowAddContentIcon(true);
1351 }
1352
1353 themeDisplay.setShowLayoutTemplatesIcon(true);
1354
1355 themeDisplay.setURLAddContent(
1356 "LayoutConfiguration.toggle('" +
1357 PortletKeys.LAYOUT_CONFIGURATION + "');");
1358
1359 themeDisplay.setURLLayoutTemplates(
1360 "Liferay.Layout.showTemplates();");
1361 }
1362 }
1363
1364 boolean hasManageLayoutsPermission =
1365 GroupPermissionUtil.contains(
1366 permissionChecker, scopeGroupId, ActionKeys.MANAGE_LAYOUTS);
1367
1368 if (group.isUser()) {
1369 if ((layout.isPrivateLayout() &&
1370 !PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_MODIFIABLE) ||
1371 (layout.isPublicLayout() &&
1372 !PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_MODIFIABLE)) {
1373
1374 hasManageLayoutsPermission = false;
1375 }
1376 }
1377
1378 if (hasManageLayoutsPermission) {
1379 themeDisplay.setShowPageSettingsIcon(true);
1380
1381 PortletURL pageSettingsURL = new PortletURLImpl(
1382 request, PortletKeys.LAYOUT_MANAGEMENT, plid,
1383 PortletRequest.RENDER_PHASE);
1384
1385 pageSettingsURL.setWindowState(WindowState.MAXIMIZED);
1386 pageSettingsURL.setPortletMode(PortletMode.VIEW);
1387
1388 pageSettingsURL.setParameter(
1389 "struts_action", "/layout_management/edit_pages");
1390
1391 if (layout.isPrivateLayout()) {
1392 pageSettingsURL.setParameter("tabs1", "private-pages");
1393 }
1394 else {
1395 pageSettingsURL.setParameter("tabs1", "public-pages");
1396 }
1397
1398 pageSettingsURL.setParameter("redirect", currentURL);
1399 pageSettingsURL.setParameter(
1400 "groupId", String.valueOf(scopeGroupId));
1401 pageSettingsURL.setParameter("selPlid", String.valueOf(plid));
1402
1403 themeDisplay.setURLPageSettings(pageSettingsURL);
1404
1405 PortletURL publishToLiveURL = new PortletURLImpl(
1406 request, PortletKeys.LAYOUT_MANAGEMENT, plid,
1407 PortletRequest.RENDER_PHASE);
1408
1409 publishToLiveURL.setWindowState(LiferayWindowState.EXCLUSIVE);
1410 publishToLiveURL.setPortletMode(PortletMode.VIEW);
1411
1412 publishToLiveURL.setParameter(
1413 "struts_action", "/layout_management/export_pages");
1414
1415 if (layout.isPrivateLayout()) {
1416 publishToLiveURL.setParameter("tabs1", "private-pages");
1417 }
1418 else {
1419 publishToLiveURL.setParameter("tabs1", "public-pages");
1420 }
1421
1422 publishToLiveURL.setParameter("pagesRedirect", currentURL);
1423 publishToLiveURL.setParameter(
1424 "groupId", String.valueOf(scopeGroupId));
1425 publishToLiveURL.setParameter("selPlid", String.valueOf(plid));
1426
1427 themeDisplay.setURLPublishToLive(publishToLiveURL);
1428 }
1429
1430 if (group.hasStagingGroup() && !group.isStagingGroup()) {
1431 themeDisplay.setShowAddContentIcon(false);
1432 themeDisplay.setShowLayoutTemplatesIcon(false);
1433 themeDisplay.setShowPageSettingsIcon(false);
1434 themeDisplay.setURLPublishToLive(null);
1435 }
1436
1437
1439 if (group.hasStagingGroup() || group.isStagingGroup()) {
1440 boolean hasApproveProposalPermission =
1441 GroupPermissionUtil.contains(
1442 permissionChecker, scopeGroupId,
1443 ActionKeys.APPROVE_PROPOSAL);
1444
1445 if (hasManageLayoutsPermission) {
1446 themeDisplay.setShowStagingIcon(true);
1447 }
1448 else if (hasApproveProposalPermission) {
1449 themeDisplay.setShowStagingIcon(true);
1450 }
1451 }
1452
1453 String myAccountNamespace = PortalUtil.getPortletNamespace(
1454 PortletKeys.MY_ACCOUNT);
1455
1456 String myAccountRedirect = ParamUtil.getString(
1457 request, myAccountNamespace + "backURL", currentURL);
1458
1459 PortletURL myAccountURL = new PortletURLImpl(
1460 request, PortletKeys.MY_ACCOUNT, plid,
1461 PortletRequest.RENDER_PHASE);
1462
1463 myAccountURL.setWindowState(WindowState.MAXIMIZED);
1464 myAccountURL.setPortletMode(PortletMode.VIEW);
1465
1466 myAccountURL.setParameter("struts_action", "/my_account/edit_user");
1467 myAccountURL.setParameter("backURL", myAccountRedirect);
1468
1469 themeDisplay.setURLMyAccount(myAccountURL);
1470 }
1471
1472 if ((!user.isActive()) ||
1473 (PropsValues.TERMS_OF_USE_REQUIRED &&
1474 !user.isAgreedToTermsOfUse())) {
1475
1476 themeDisplay.setShowAddContentIcon(false);
1477 themeDisplay.setShowMyAccountIcon(false);
1478 themeDisplay.setShowPageSettingsIcon(false);
1479 }
1480
1481 themeDisplay.setURLPortal(themeDisplay.getURLHome());
1482
1483 String urlSignIn = mainPath + "/portal/login";
1484
1485 if (layout != null) {
1486 urlSignIn = HttpUtil.addParameter(
1487 urlSignIn, "p_l_id", layout.getPlid());
1488 }
1489
1490 themeDisplay.setURLSignIn(urlSignIn);
1491
1492 themeDisplay.setURLSignOut(mainPath + "/portal/logout");
1493
1494 PortletURL updateManagerURL = new PortletURLImpl(
1495 request, PortletKeys.UPDATE_MANAGER, plid,
1496 PortletRequest.RENDER_PHASE);
1497
1498 updateManagerURL.setWindowState(WindowState.MAXIMIZED);
1499 updateManagerURL.setPortletMode(PortletMode.VIEW);
1500
1501 updateManagerURL.setParameter("struts_action", "/update_manager/view");
1502
1503 themeDisplay.setURLUpdateManager(updateManagerURL);
1504
1505 request.setAttribute(WebKeys.THEME_DISPLAY, themeDisplay);
1506
1507
1509 boolean parallelRenderEnable = true;
1510
1511 if (layout != null) {
1512 if (layoutTypePortlet.getPortletIds().size() == 1) {
1513 parallelRenderEnable = false;
1514 }
1515 }
1516
1517 Boolean parallelRenderEnableObj = Boolean.valueOf(ParamUtil.getBoolean(
1518 request, "p_p_parallel", parallelRenderEnable));
1519
1520 request.setAttribute(
1521 WebKeys.PORTLET_PARALLEL_RENDER, parallelRenderEnableObj);
1522 }
1523
1524 protected void updateUserLayouts(User user) throws Exception {
1525
1526
1528 boolean addDefaultUserPrivateLayouts = false;
1529
1530 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED &&
1531 PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_AUTO_CREATE) {
1532
1533 addDefaultUserPrivateLayouts = true;
1534
1535 if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
1536 Role powerUserRole = RoleLocalServiceUtil.getRole(
1537 user.getCompanyId(), RoleConstants.POWER_USER);
1538
1539 if (!UserLocalServiceUtil.hasRoleUser(
1540 powerUserRole.getRoleId(), user.getUserId())) {
1541
1542 addDefaultUserPrivateLayouts = false;
1543 }
1544 }
1545 }
1546
1547 if (addDefaultUserPrivateLayouts && !user.hasPrivateLayouts()) {
1548 addDefaultUserPrivateLayouts(user);
1549 }
1550
1551 boolean deleteDefaultUserPrivateLayouts = false;
1552
1553 if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED) {
1554 deleteDefaultUserPrivateLayouts = true;
1555 }
1556 else if (PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED) {
1557 Role powerUserRole = RoleLocalServiceUtil.getRole(
1558 user.getCompanyId(), RoleConstants.POWER_USER);
1559
1560 if (!UserLocalServiceUtil.hasRoleUser(
1561 powerUserRole.getRoleId(), user.getUserId())) {
1562
1563 deleteDefaultUserPrivateLayouts = true;
1564 }
1565 }
1566
1567 if (deleteDefaultUserPrivateLayouts && user.hasPrivateLayouts()) {
1568 deleteDefaultUserPrivateLayouts(user);
1569 }
1570
1571
1573 boolean addDefaultUserPublicLayouts = false;
1574
1575 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED &&
1576 PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_AUTO_CREATE) {
1577
1578 addDefaultUserPublicLayouts = true;
1579
1580 if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
1581 Role powerUserRole = RoleLocalServiceUtil.getRole(
1582 user.getCompanyId(), RoleConstants.POWER_USER);
1583
1584 if (!UserLocalServiceUtil.hasRoleUser(
1585 powerUserRole.getRoleId(), user.getUserId())) {
1586
1587 addDefaultUserPublicLayouts = false;
1588 }
1589 }
1590 }
1591
1592 if (addDefaultUserPublicLayouts && !user.hasPublicLayouts()) {
1593 addDefaultUserPublicLayouts(user);
1594 }
1595
1596 boolean deleteDefaultUserPublicLayouts = false;
1597
1598 if (!PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED) {
1599 deleteDefaultUserPublicLayouts = true;
1600 }
1601 else if (PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED) {
1602 Role powerUserRole = RoleLocalServiceUtil.getRole(
1603 user.getCompanyId(), RoleConstants.POWER_USER);
1604
1605 if (!UserLocalServiceUtil.hasRoleUser(
1606 powerUserRole.getRoleId(), user.getUserId())) {
1607
1608 deleteDefaultUserPublicLayouts = true;
1609 }
1610 }
1611
1612 if (deleteDefaultUserPublicLayouts && user.hasPublicLayouts()) {
1613 deleteDefaultUserPublicLayouts(user);
1614 }
1615 }
1616
1617 protected File privateLARFile;
1618 protected File publicLARFile;
1619
1620 private static final String _PATH_PORTAL_LAYOUT = "/portal/layout";
1621
1622 private static Log _log = LogFactory.getLog(ServicePreAction.class);
1623
1624}