001
014
015 package com.liferay.portal.template;
016
017 import com.liferay.expando.kernel.service.ExpandoColumnLocalService;
018 import com.liferay.expando.kernel.service.ExpandoRowLocalService;
019 import com.liferay.expando.kernel.service.ExpandoTableLocalService;
020 import com.liferay.expando.kernel.service.ExpandoValueLocalService;
021 import com.liferay.portal.kernel.audit.AuditMessageFactoryUtil;
022 import com.liferay.portal.kernel.audit.AuditRouterUtil;
023 import com.liferay.portal.kernel.image.ImageToolUtil;
024 import com.liferay.portal.kernel.json.JSONFactoryUtil;
025 import com.liferay.portal.kernel.language.LanguageUtil;
026 import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
027 import com.liferay.portal.kernel.log.Log;
028 import com.liferay.portal.kernel.log.LogFactoryUtil;
029 import com.liferay.portal.kernel.model.Layout;
030 import com.liferay.portal.kernel.model.Theme;
031 import com.liferay.portal.kernel.portlet.PortletModeFactory_IW;
032 import com.liferay.portal.kernel.portlet.PortletProvider;
033 import com.liferay.portal.kernel.portlet.PortletRequestModel;
034 import com.liferay.portal.kernel.portlet.PortletRequestModelFactory;
035 import com.liferay.portal.kernel.portlet.PortletURLFactoryUtil;
036 import com.liferay.portal.kernel.portlet.WindowStateFactory_IW;
037 import com.liferay.portal.kernel.service.GroupLocalService;
038 import com.liferay.portal.kernel.service.GroupService;
039 import com.liferay.portal.kernel.service.LayoutLocalService;
040 import com.liferay.portal.kernel.service.LayoutService;
041 import com.liferay.portal.kernel.service.OrganizationLocalService;
042 import com.liferay.portal.kernel.service.OrganizationService;
043 import com.liferay.portal.kernel.service.UserLocalService;
044 import com.liferay.portal.kernel.service.UserService;
045 import com.liferay.portal.kernel.service.permission.AccountPermissionUtil;
046 import com.liferay.portal.kernel.service.permission.CommonPermissionUtil;
047 import com.liferay.portal.kernel.service.permission.GroupPermissionUtil;
048 import com.liferay.portal.kernel.service.permission.LayoutPermissionUtil;
049 import com.liferay.portal.kernel.service.permission.OrganizationPermissionUtil;
050 import com.liferay.portal.kernel.service.permission.PasswordPolicyPermissionUtil;
051 import com.liferay.portal.kernel.service.permission.PortalPermissionUtil;
052 import com.liferay.portal.kernel.service.permission.PortletPermissionUtil;
053 import com.liferay.portal.kernel.service.permission.RolePermissionUtil;
054 import com.liferay.portal.kernel.service.permission.UserGroupPermissionUtil;
055 import com.liferay.portal.kernel.service.permission.UserPermissionUtil;
056 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
057 import com.liferay.portal.kernel.template.TemplateHandler;
058 import com.liferay.portal.kernel.template.TemplateHandlerRegistryUtil;
059 import com.liferay.portal.kernel.template.TemplateVariableGroup;
060 import com.liferay.portal.kernel.theme.NavItem;
061 import com.liferay.portal.kernel.theme.ThemeDisplay;
062 import com.liferay.portal.kernel.util.ArrayUtil_IW;
063 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
064 import com.liferay.portal.kernel.util.ClassLoaderUtil;
065 import com.liferay.portal.kernel.util.DateUtil_IW;
066 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
067 import com.liferay.portal.kernel.util.GetterUtil;
068 import com.liferay.portal.kernel.util.GetterUtil_IW;
069 import com.liferay.portal.kernel.util.HtmlUtil;
070 import com.liferay.portal.kernel.util.HttpUtil;
071 import com.liferay.portal.kernel.util.JavaConstants;
072 import com.liferay.portal.kernel.util.ListMergeable;
073 import com.liferay.portal.kernel.util.LocaleUtil;
074 import com.liferay.portal.kernel.util.ParamUtil_IW;
075 import com.liferay.portal.kernel.util.PortalUtil;
076 import com.liferay.portal.kernel.util.PrefsPropsUtil;
077 import com.liferay.portal.kernel.util.PropsUtil;
078 import com.liferay.portal.kernel.util.SessionClicks_IW;
079 import com.liferay.portal.kernel.util.StaticFieldGetter;
080 import com.liferay.portal.kernel.util.StringPool;
081 import com.liferay.portal.kernel.util.StringUtil_IW;
082 import com.liferay.portal.kernel.util.TimeZoneUtil_IW;
083 import com.liferay.portal.kernel.util.UnicodeFormatter_IW;
084 import com.liferay.portal.kernel.util.Validator_IW;
085 import com.liferay.portal.kernel.util.WebKeys;
086 import com.liferay.portal.kernel.webserver.WebServerServletTokenUtil;
087 import com.liferay.portal.kernel.xml.SAXReader;
088
089 import java.util.Collections;
090 import java.util.HashMap;
091 import java.util.List;
092 import java.util.Locale;
093 import java.util.Map;
094 import java.util.Set;
095 import java.util.concurrent.ConcurrentHashMap;
096
097 import javax.portlet.PortletConfig;
098 import javax.portlet.PortletRequest;
099 import javax.portlet.PortletResponse;
100 import javax.portlet.RenderRequest;
101 import javax.portlet.RenderResponse;
102
103 import javax.servlet.http.HttpServletRequest;
104
105 import org.apache.struts.tiles.ComponentContext;
106 import org.apache.struts.tiles.taglib.ComponentConstants;
107
108
113 public class TemplateContextHelper {
114
115 public static Map<String, TemplateVariableGroup> getTemplateVariableGroups(
116 long classNameId, long classPK, String language, Locale locale)
117 throws Exception {
118
119 TemplateHandler templateHandler =
120 TemplateHandlerRegistryUtil.getTemplateHandler(classNameId);
121
122 if (templateHandler == null) {
123 return Collections.emptyMap();
124 }
125
126 Map<String, TemplateVariableGroup> templateVariableGroups =
127 templateHandler.getTemplateVariableGroups(
128 classPK, language, locale);
129
130 String[] restrictedVariables = templateHandler.getRestrictedVariables(
131 language);
132
133 TemplateVariableGroup portalServicesTemplateVariableGroup =
134 new TemplateVariableGroup("portal-services", restrictedVariables);
135
136 portalServicesTemplateVariableGroup.setAutocompleteEnabled(false);
137
138 portalServicesTemplateVariableGroup.addServiceLocatorVariables(
139 GroupLocalService.class, GroupService.class,
140 LayoutLocalService.class, LayoutService.class,
141 OrganizationLocalService.class, OrganizationService.class,
142 UserLocalService.class, UserService.class);
143
144 templateVariableGroups.put(
145 portalServicesTemplateVariableGroup.getLabel(),
146 portalServicesTemplateVariableGroup);
147
148 return templateVariableGroups;
149 }
150
151 public Map<String, Object> getHelperUtilities(
152 ClassLoader classLoader, boolean restricted) {
153
154 Map<String, Object>[] helperUtilitiesArray = _helperUtilitiesMaps.get(
155 classLoader);
156
157 if (helperUtilitiesArray == null) {
158 helperUtilitiesArray = (Map<String, Object>[])new Map<?, ?>[2];
159
160 _helperUtilitiesMaps.put(classLoader, helperUtilitiesArray);
161 }
162 else {
163 Map<String, Object> helperUtilities = null;
164
165 if (restricted) {
166 helperUtilities = helperUtilitiesArray[1];
167 }
168 else {
169 helperUtilities = helperUtilitiesArray[0];
170 }
171
172 if (helperUtilities != null) {
173 return helperUtilities;
174 }
175 }
176
177 Map<String, Object> helperUtilities = new HashMap<>();
178
179 populateCommonHelperUtilities(helperUtilities);
180 populateExtraHelperUtilities(helperUtilities);
181
182 if (restricted) {
183 Set<String> restrictedVariables = getRestrictedVariables();
184
185 for (String restrictedVariable : restrictedVariables) {
186 helperUtilities.remove(restrictedVariable);
187 }
188
189 helperUtilitiesArray[1] = helperUtilities;
190 }
191 else {
192 helperUtilitiesArray[0] = helperUtilities;
193 }
194
195 return helperUtilities;
196 }
197
198 public Set<String> getRestrictedVariables() {
199 return Collections.emptySet();
200 }
201
202 public TemplateControlContext getTemplateControlContext() {
203 return _pacl.getTemplateControlContext();
204 }
205
206 public void prepare(
207 Map<String, Object> contextObjects, HttpServletRequest request) {
208
209
210
211 contextObjects.put("request", request);
212
213
214
215 PortletConfig portletConfig = (PortletConfig)request.getAttribute(
216 JavaConstants.JAVAX_PORTLET_CONFIG);
217
218 if (portletConfig != null) {
219 contextObjects.put("portletConfig", portletConfig);
220 }
221
222
223
224 final PortletRequest portletRequest =
225 (PortletRequest)request.getAttribute(
226 JavaConstants.JAVAX_PORTLET_REQUEST);
227
228 if (portletRequest != null) {
229 if (portletRequest instanceof RenderRequest) {
230 contextObjects.put("renderRequest", portletRequest);
231 }
232 }
233
234
235
236 final PortletResponse portletResponse =
237 (PortletResponse)request.getAttribute(
238 JavaConstants.JAVAX_PORTLET_RESPONSE);
239
240 if (portletResponse != null) {
241 if (portletResponse instanceof RenderResponse) {
242 contextObjects.put("renderResponse", portletResponse);
243 }
244 }
245
246
247
248 if ((portletRequest != null) && (portletResponse != null)) {
249 contextObjects.put(
250 "portletRequestModelFactory",
251 new PortletRequestModelFactory(
252 portletRequest, portletResponse));
253
254
255
256 contextObjects.put(
257 "xmlRequest",
258 new Object() {
259
260 @Override
261 public String toString() {
262 PortletRequestModel portletRequestModel =
263 new PortletRequestModel(
264 portletRequest, portletResponse);
265
266 return portletRequestModel.toXML();
267 }
268
269 }
270 );
271 }
272
273
274
275 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
276 WebKeys.THEME_DISPLAY);
277
278 if (themeDisplay != null) {
279 Layout layout = themeDisplay.getLayout();
280 List<Layout> layouts = themeDisplay.getLayouts();
281
282 contextObjects.put("bodyCssClass", StringPool.BLANK);
283 contextObjects.put("colorScheme", themeDisplay.getColorScheme());
284 contextObjects.put("company", themeDisplay.getCompany());
285 contextObjects.put("layout", layout);
286 contextObjects.put("layouts", layouts);
287 contextObjects.put(
288 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
289 contextObjects.put("locale", themeDisplay.getLocale());
290 contextObjects.put(
291 "permissionChecker", themeDisplay.getPermissionChecker());
292 contextObjects.put("plid", String.valueOf(themeDisplay.getPlid()));
293 contextObjects.put(
294 "portletDisplay", themeDisplay.getPortletDisplay());
295 contextObjects.put("realUser", themeDisplay.getRealUser());
296 contextObjects.put(
297 "scopeGroupId", Long.valueOf(themeDisplay.getScopeGroupId()));
298 contextObjects.put("themeDisplay", themeDisplay);
299 contextObjects.put("timeZone", themeDisplay.getTimeZone());
300 contextObjects.put("user", themeDisplay.getUser());
301
302
303
304 if (layout != null) {
305 List<NavItem> navItems = NavItem.fromLayouts(
306 request, layouts, contextObjects);
307
308 contextObjects.put("navItems", navItems);
309 }
310
311
312
313 contextObjects.put(
314 "portletGroupId", Long.valueOf(themeDisplay.getScopeGroupId()));
315 }
316
317
318
319 Theme theme = (Theme)request.getAttribute(WebKeys.THEME);
320
321 if ((theme == null) && (themeDisplay != null)) {
322 theme = themeDisplay.getTheme();
323 }
324
325 if (theme != null) {
326 contextObjects.put("theme", theme);
327 }
328
329
330
331 prepareTiles(contextObjects, request);
332
333
334
335 ListMergeable<String> pageTitleListMergeable =
336 (ListMergeable<String>)request.getAttribute(WebKeys.PAGE_TITLE);
337
338 if (pageTitleListMergeable != null) {
339 String pageTitle = pageTitleListMergeable.mergeToString(
340 StringPool.SPACE);
341
342 contextObjects.put("pageTitle", pageTitle);
343 }
344
345 ListMergeable<String> pageSubtitleListMergeable =
346 (ListMergeable<String>)request.getAttribute(WebKeys.PAGE_SUBTITLE);
347
348 if (pageSubtitleListMergeable != null) {
349 String pageSubtitle = pageSubtitleListMergeable.mergeToString(
350 StringPool.SPACE);
351
352 contextObjects.put("pageSubtitle", pageSubtitle);
353 }
354 }
355
356 public void removeAllHelperUtilities() {
357 _helperUtilitiesMaps.clear();
358 }
359
360 public void removeHelperUtilities(ClassLoader classLoader) {
361 _helperUtilitiesMaps.remove(classLoader);
362 }
363
364 public interface PACL {
365
366 public TemplateControlContext getTemplateControlContext();
367
368 }
369
370 protected void populateCommonHelperUtilities(
371 Map<String, Object> variables) {
372
373
374
375 variables.put("arrayUtil", ArrayUtil_IW.getInstance());
376
377
378
379 try {
380 variables.put(
381 "auditMessageFactoryUtil",
382 AuditMessageFactoryUtil.getAuditMessageFactory());
383 }
384 catch (SecurityException se) {
385 _log.error(se, se);
386 }
387
388
389
390 try {
391 variables.put("auditRouterUtil", AuditRouterUtil.getAuditRouter());
392 }
393 catch (SecurityException se) {
394 _log.error(se, se);
395 }
396
397
398
399 try {
400 variables.put(
401 "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
402 }
403 catch (SecurityException se) {
404 _log.error(se, se);
405 }
406
407
408
409 try {
410 variables.put(
411 "calendarFactory", CalendarFactoryUtil.getCalendarFactory());
412 }
413 catch (SecurityException se) {
414 _log.error(se, se);
415 }
416
417
418
419 try {
420 variables.put(
421 "dateFormatFactory",
422 FastDateFormatFactoryUtil.getFastDateFormatFactory());
423 }
424 catch (SecurityException se) {
425 _log.error(se, se);
426 }
427
428
429
430 variables.put("dateUtil", DateUtil_IW.getInstance());
431
432
433
434 try {
435 ServiceLocator serviceLocator = ServiceLocator.getInstance();
436
437
438
439 variables.put("serviceLocator", serviceLocator);
440
441 try {
442 variables.put(
443 "expandoColumnLocalService",
444 serviceLocator.findService(
445 ExpandoColumnLocalService.class.getName()));
446 }
447 catch (SecurityException se) {
448 _log.error(se, se);
449 }
450
451
452
453 try {
454 variables.put(
455 "expandoRowLocalService",
456 serviceLocator.findService(
457 ExpandoRowLocalService.class.getName()));
458 }
459 catch (SecurityException se) {
460 _log.error(se, se);
461 }
462
463
464
465 try {
466 variables.put(
467 "expandoTableLocalService",
468 serviceLocator.findService(
469 ExpandoTableLocalService.class.getName()));
470 }
471 catch (SecurityException se) {
472 _log.error(se, se);
473 }
474
475
476
477 try {
478 variables.put(
479 "expandoValueLocalService",
480 serviceLocator.findService(
481 ExpandoValueLocalService.class.getName()));
482 }
483 catch (SecurityException se) {
484 _log.error(se, se);
485 }
486 }
487 catch (SecurityException se) {
488 _log.error(se, se);
489 }
490
491
492
493 variables.put("getterUtil", GetterUtil_IW.getInstance());
494
495
496
497 try {
498 variables.put("htmlUtil", HtmlUtil.getHtml());
499 }
500 catch (SecurityException se) {
501 _log.error(se, se);
502 }
503
504
505
506 try {
507 variables.put("httpUtil", HttpUtil.getHttp());
508 }
509 catch (SecurityException se) {
510 _log.error(se, se);
511 }
512
513
514
515 try {
516 variables.put("imageToolUtil", ImageToolUtil.getImageTool());
517 }
518 catch (SecurityException se) {
519 _log.error(se, se);
520 }
521
522
523
524 try {
525 variables.put("jsonFactoryUtil", JSONFactoryUtil.getJSONFactory());
526 }
527 catch (SecurityException se) {
528 _log.error(se, se);
529 }
530
531
532
533 try {
534 variables.put("languageUtil", LanguageUtil.getLanguage());
535 }
536 catch (SecurityException se) {
537 _log.error(se, se);
538 }
539
540 try {
541 variables.put(
542 "unicodeLanguageUtil",
543 UnicodeLanguageUtil.getUnicodeLanguage());
544 }
545 catch (SecurityException se) {
546 _log.error(se, se);
547 }
548
549
550
551 try {
552 variables.put("localeUtil", LocaleUtil.getInstance());
553 }
554 catch (SecurityException se) {
555 _log.error(se, se);
556 }
557
558
559
560 variables.put("paramUtil", ParamUtil_IW.getInstance());
561
562
563
564 try {
565 variables.put("portalUtil", PortalUtil.getPortal());
566 }
567 catch (SecurityException se) {
568 _log.error(se, se);
569 }
570
571 try {
572 variables.put("portal", PortalUtil.getPortal());
573 }
574 catch (SecurityException se) {
575 _log.error(se, se);
576 }
577
578
579
580 try {
581 variables.put("prefsPropsUtil", PrefsPropsUtil.getPrefsProps());
582 }
583 catch (SecurityException se) {
584 _log.error(se, se);
585 }
586
587
588
589 try {
590 variables.put("propsUtil", PropsUtil.getProps());
591 }
592 catch (SecurityException se) {
593 _log.error(se, se);
594 }
595
596
597
598 variables.put(
599 "portletModeFactory", PortletModeFactory_IW.getInstance());
600
601
602
603 try {
604 variables.put(
605 "portletURLFactory",
606 PortletURLFactoryUtil.getPortletURLFactory());
607 }
608 catch (SecurityException se) {
609 _log.error(se, se);
610 }
611
612 try {
613 UtilLocator utilLocator = UtilLocator.getInstance();
614
615
616
617 variables.put("utilLocator", utilLocator);
618
619
620
621 try {
622 variables.put(
623 "saxReaderUtil",
624 utilLocator.findUtil(SAXReader.class.getName()));
625 }
626 catch (SecurityException se) {
627 _log.error(se, se);
628 }
629 }
630 catch (SecurityException se) {
631 _log.error(se, se);
632 }
633
634
635
636 variables.put("sessionClicks", SessionClicks_IW.getInstance());
637
638
639
640 variables.put("staticFieldGetter", StaticFieldGetter.getInstance());
641
642
643
644 variables.put("stringUtil", StringUtil_IW.getInstance());
645
646
647
648 variables.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
649
650
651
652 variables.put("unicodeFormatter", UnicodeFormatter_IW.getInstance());
653
654
655
656 variables.put("validator", Validator_IW.getInstance());
657
658
659
660 try {
661 variables.put(
662 "webServerToken",
663 WebServerServletTokenUtil.getWebServerServletToken());
664 }
665 catch (SecurityException se) {
666 _log.error(se, se);
667 }
668
669
670
671 variables.put(
672 "windowStateFactory", WindowStateFactory_IW.getInstance());
673
674
675
676 try {
677 variables.put(
678 "accountPermission",
679 AccountPermissionUtil.getAccountPermission());
680 }
681 catch (SecurityException se) {
682 _log.error(se, se);
683 }
684
685 try {
686 variables.put(
687 "commonPermission", CommonPermissionUtil.getCommonPermission());
688 }
689 catch (SecurityException se) {
690 _log.error(se, se);
691 }
692
693 try {
694 variables.put(
695 "groupPermission", GroupPermissionUtil.getGroupPermission());
696 }
697 catch (SecurityException se) {
698 _log.error(se, se);
699 }
700
701 try {
702 variables.put(
703 "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
704 }
705 catch (SecurityException se) {
706 _log.error(se, se);
707 }
708
709 try {
710 variables.put(
711 "organizationPermission",
712 OrganizationPermissionUtil.getOrganizationPermission());
713 }
714 catch (SecurityException se) {
715 _log.error(se, se);
716 }
717
718 try {
719 variables.put(
720 "passwordPolicyPermission",
721 PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
722 }
723 catch (SecurityException se) {
724 _log.error(se, se);
725 }
726
727 try {
728 variables.put(
729 "portalPermission", PortalPermissionUtil.getPortalPermission());
730 }
731 catch (SecurityException se) {
732 _log.error(se, se);
733 }
734
735 try {
736 variables.put(
737 "portletPermission",
738 PortletPermissionUtil.getPortletPermission());
739 }
740 catch (SecurityException se) {
741 _log.error(se, se);
742 }
743
744 Map<String, PortletProvider.Action> portletProviderActionMap =
745 new HashMap<>();
746
747 for (PortletProvider.Action action : PortletProvider.Action.values()) {
748 portletProviderActionMap.put(action.name(), action);
749 }
750
751 try {
752 variables.put("portletProviderAction", portletProviderActionMap);
753 }
754 catch (SecurityException se) {
755 _log.error(se, se);
756 }
757
758 try {
759 variables.put(
760 "rolePermission", RolePermissionUtil.getRolePermission());
761 }
762 catch (SecurityException se) {
763 _log.error(se, se);
764 }
765
766 try {
767 variables.put(
768 "userGroupPermission",
769 UserGroupPermissionUtil.getUserGroupPermission());
770 }
771 catch (SecurityException se) {
772 _log.error(se, se);
773 }
774
775 try {
776 variables.put(
777 "userPermission", UserPermissionUtil.getUserPermission());
778 }
779 catch (SecurityException se) {
780 _log.error(se, se);
781 }
782
783
784
785 populateDeprecatedCommonHelperUtilities(variables);
786 }
787
788 @SuppressWarnings("deprecation")
789 protected void populateDeprecatedCommonHelperUtilities(
790 Map<String, Object> variables) {
791
792 try {
793 variables.put(
794 "dateFormats",
795 FastDateFormatFactoryUtil.getFastDateFormatFactory());
796 }
797 catch (SecurityException se) {
798 _log.error(se, se);
799 }
800
801 try {
802 variables.put(
803 "imageToken",
804 WebServerServletTokenUtil.getWebServerServletToken());
805 }
806 catch (SecurityException se) {
807 _log.error(se, se);
808 }
809
810 try {
811 variables.put(
812 "locationPermission",
813 OrganizationPermissionUtil.getOrganizationPermission());
814 }
815 catch (SecurityException se) {
816 _log.error(se, se);
817 }
818
819 try {
820 com.liferay.portal.kernel.util.Randomizer_IW randomizer =
821 com.liferay.portal.kernel.util.Randomizer_IW.getInstance();
822
823 variables.put("randomizer", randomizer.getWrappedInstance());
824 }
825 catch (SecurityException se) {
826 _log.error(se, se);
827 }
828 }
829
830 protected void populateExtraHelperUtilities(Map<String, Object> variables) {
831 }
832
833 protected void prepareTiles(
834 Map<String, Object> contextObjects, HttpServletRequest request) {
835
836 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
837 WebKeys.THEME_DISPLAY);
838
839 ComponentContext componentContext =
840 (ComponentContext)request.getAttribute(
841 ComponentConstants.COMPONENT_CONTEXT);
842
843 if (componentContext == null) {
844 themeDisplay.setTilesSelectable(true);
845
846 return;
847 }
848
849 String tilesTitle = (String)componentContext.getAttribute("title");
850
851 themeDisplay.setTilesTitle(tilesTitle);
852
853 contextObjects.put("tilesTitle", tilesTitle);
854
855 String tilesContent = (String)componentContext.getAttribute("content");
856
857 themeDisplay.setTilesContent(tilesContent);
858
859 contextObjects.put("tilesContent", tilesContent);
860
861 boolean tilesSelectable = GetterUtil.getBoolean(
862 (String)componentContext.getAttribute("selectable"));
863
864 themeDisplay.setTilesSelectable(tilesSelectable);
865
866 contextObjects.put("tilesSelectable", tilesSelectable);
867 }
868
869 private static final Log _log = LogFactoryUtil.getLog(
870 TemplateContextHelper.class);
871
872 private static final PACL _pacl = new NoPACL();
873
874 private final Map<ClassLoader, Map<String, Object>[]> _helperUtilitiesMaps =
875 new ConcurrentHashMap<>();
876
877 private static class NoPACL implements PACL {
878
879 @Override
880 public TemplateControlContext getTemplateControlContext() {
881 ClassLoader contextClassLoader =
882 ClassLoaderUtil.getContextClassLoader();
883
884 return new TemplateControlContext(null, contextClassLoader);
885 }
886
887 }
888
889 }