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