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