001
014
015 package com.liferay.portal.freemarker;
016
017 import com.liferay.portal.kernel.freemarker.FreeMarkerContext;
018 import com.liferay.portal.kernel.freemarker.FreeMarkerVariables;
019 import com.liferay.portal.kernel.json.JSONFactoryUtil;
020 import com.liferay.portal.kernel.language.LanguageUtil;
021 import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
022 import com.liferay.portal.kernel.log.Log;
023 import com.liferay.portal.kernel.log.LogFactoryUtil;
024 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
025 import com.liferay.portal.kernel.util.ArrayUtil;
026 import com.liferay.portal.kernel.util.ArrayUtil_IW;
027 import com.liferay.portal.kernel.util.DateUtil_IW;
028 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
029 import com.liferay.portal.kernel.util.GetterUtil;
030 import com.liferay.portal.kernel.util.GetterUtil_IW;
031 import com.liferay.portal.kernel.util.HtmlUtil;
032 import com.liferay.portal.kernel.util.HttpUtil;
033 import com.liferay.portal.kernel.util.JavaConstants;
034 import com.liferay.portal.kernel.util.LocaleUtil;
035 import com.liferay.portal.kernel.util.ParamUtil_IW;
036 import com.liferay.portal.kernel.util.PrefsPropsUtil;
037 import com.liferay.portal.kernel.util.PropsUtil;
038 import com.liferay.portal.kernel.util.Randomizer_IW;
039 import com.liferay.portal.kernel.util.StaticFieldGetter;
040 import com.liferay.portal.kernel.util.StringPool;
041 import com.liferay.portal.kernel.util.StringUtil_IW;
042 import com.liferay.portal.kernel.util.TimeZoneUtil_IW;
043 import com.liferay.portal.kernel.util.UnicodeFormatter_IW;
044 import com.liferay.portal.kernel.util.Validator;
045 import com.liferay.portal.kernel.util.Validator_IW;
046 import com.liferay.portal.kernel.xml.SAXReader;
047 import com.liferay.portal.model.Layout;
048 import com.liferay.portal.model.Theme;
049 import com.liferay.portal.service.permission.AccountPermissionUtil;
050 import com.liferay.portal.service.permission.CommonPermissionUtil;
051 import com.liferay.portal.service.permission.GroupPermissionUtil;
052 import com.liferay.portal.service.permission.LayoutPermissionUtil;
053 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
054 import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
055 import com.liferay.portal.service.permission.PortalPermissionUtil;
056 import com.liferay.portal.service.permission.PortletPermissionUtil;
057 import com.liferay.portal.service.permission.RolePermissionUtil;
058 import com.liferay.portal.service.permission.UserGroupPermissionUtil;
059 import com.liferay.portal.service.permission.UserPermissionUtil;
060 import com.liferay.portal.theme.NavItem;
061 import com.liferay.portal.theme.RequestVars;
062 import com.liferay.portal.theme.ThemeDisplay;
063 import com.liferay.portal.util.PortalUtil;
064 import com.liferay.portal.util.SessionClicks_IW;
065 import com.liferay.portal.util.WebKeys;
066 import com.liferay.portal.velocity.ServiceLocator;
067 import com.liferay.portal.velocity.UtilLocator;
068 import com.liferay.portal.velocity.VelocityPortletPreferences;
069 import com.liferay.portal.webserver.WebServerServletTokenUtil;
070 import com.liferay.portlet.PortletConfigImpl;
071 import com.liferay.portlet.PortletURLFactoryUtil;
072 import com.liferay.portlet.expando.service.ExpandoColumnLocalService;
073 import com.liferay.portlet.expando.service.ExpandoRowLocalService;
074 import com.liferay.portlet.expando.service.ExpandoTableLocalService;
075 import com.liferay.portlet.expando.service.ExpandoValueLocalService;
076 import com.liferay.portlet.journalcontent.util.JournalContentUtil;
077 import com.liferay.taglib.util.VelocityTaglib;
078 import com.liferay.util.portlet.PortletRequestUtil;
079
080 import freemarker.ext.beans.BeansWrapper;
081
082 import java.lang.reflect.Method;
083
084 import java.util.List;
085 import java.util.Map;
086
087 import javax.portlet.PortletRequest;
088 import javax.portlet.PortletResponse;
089 import javax.portlet.RenderRequest;
090 import javax.portlet.RenderResponse;
091
092 import javax.servlet.http.HttpServletRequest;
093
094 import org.apache.struts.taglib.tiles.ComponentConstants;
095 import org.apache.struts.tiles.ComponentContext;
096
097
101 public class FreeMarkerVariablesImpl implements FreeMarkerVariables {
102
103 public void insertHelperUtilities(
104 FreeMarkerContext freeMarkerContext, String[] restrictedVariables) {
105
106
107
108 freeMarkerContext.put("arrayUtil", ArrayUtil_IW.getInstance());
109
110
111
112 try {
113 freeMarkerContext.put(
114 "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
115 }
116 catch (SecurityException se) {
117 _log.error(se, se);
118 }
119
120
121
122 try {
123 freeMarkerContext.put(
124 "dateFormatFactory",
125 FastDateFormatFactoryUtil.getFastDateFormatFactory());
126 }
127 catch (SecurityException se) {
128 _log.error(se, se);
129 }
130
131
132
133 freeMarkerContext.put("dateUtil", DateUtil_IW.getInstance());
134
135
136
137 freeMarkerContext.put(
138 "enumUtil", BeansWrapper.getDefaultInstance().getEnumModels());
139
140 try {
141
142
143
144 ServiceLocator serviceLocator = ServiceLocator.getInstance();
145
146 insertHelperUtility(
147 freeMarkerContext, restrictedVariables, "serviceLocator",
148 serviceLocator);
149
150
151
152 try {
153 freeMarkerContext.put(
154 "expandoColumnLocalService",
155 serviceLocator.findService(
156 ExpandoColumnLocalService.class.getName()));
157 }
158 catch (SecurityException se) {
159 _log.error(se, se);
160 }
161
162
163
164 try {
165 freeMarkerContext.put(
166 "expandoRowLocalService",
167 serviceLocator.findService(
168 ExpandoRowLocalService.class.getName()));
169 }
170 catch (SecurityException se) {
171 _log.error(se, se);
172 }
173
174
175
176 try {
177 freeMarkerContext.put(
178 "expandoTableLocalService",
179 serviceLocator.findService(
180 ExpandoTableLocalService.class.getName()));
181 }
182 catch (SecurityException se) {
183 _log.error(se, se);
184 }
185
186
187
188 try {
189 freeMarkerContext.put(
190 "expandoValueLocalService",
191 serviceLocator.findService(
192 ExpandoValueLocalService.class.getName()));
193 }
194 catch (SecurityException se) {
195 _log.error(se, se);
196 }
197 }
198 catch (SecurityException se) {
199 _log.error(se, se);
200 }
201
202
203
204 freeMarkerContext.put("getterUtil", GetterUtil_IW.getInstance());
205
206
207
208 try {
209 freeMarkerContext.put("htmlUtil", HtmlUtil.getHtml());
210 }
211 catch (SecurityException se) {
212 _log.error(se, se);
213 }
214
215
216
217 try {
218 freeMarkerContext.put("httpUtil", HttpUtil.getHttp());
219 }
220 catch (SecurityException se) {
221 _log.error(se, se);
222 }
223
224
225
226 try {
227 freeMarkerContext.put(
228 "journalContentUtil", JournalContentUtil.getJournalContent());
229 }
230 catch (SecurityException se) {
231 _log.error(se, se);
232 }
233
234
235
236 try {
237 freeMarkerContext.put(
238 "jsonFactoryUtil", JSONFactoryUtil.getJSONFactory());
239 }
240 catch (SecurityException se) {
241 _log.error(se, se);
242 }
243
244
245
246 try {
247 freeMarkerContext.put("languageUtil", LanguageUtil.getLanguage());
248 }
249 catch (SecurityException se) {
250 _log.error(se, se);
251 }
252
253 try {
254 freeMarkerContext.put(
255 "unicodeLanguageUtil",
256 UnicodeLanguageUtil.getUnicodeLanguage());
257 }
258 catch (SecurityException se) {
259 _log.error(se, se);
260 }
261
262
263
264 try {
265 freeMarkerContext.put("localeUtil", LocaleUtil.getInstance());
266 }
267 catch (SecurityException se) {
268 _log.error(se, se);
269 }
270
271
272
273 freeMarkerContext.put("objectUtil", new LiferayObjectConstructor());
274
275
276
277 freeMarkerContext.put("paramUtil", ParamUtil_IW.getInstance());
278
279
280
281 try {
282 insertHelperUtility(
283 freeMarkerContext, restrictedVariables, "portalUtil",
284 PortalUtil.getPortal());
285 insertHelperUtility(
286 freeMarkerContext, restrictedVariables, "portal",
287 PortalUtil.getPortal());
288 }
289 catch (SecurityException se) {
290 _log.error(se, se);
291 }
292
293
294
295 try {
296 insertHelperUtility(
297 freeMarkerContext, restrictedVariables, "prefsPropsUtil",
298 PrefsPropsUtil.getPrefsProps());
299 }
300 catch (SecurityException se) {
301 _log.error(se, se);
302 }
303
304
305
306 try {
307 insertHelperUtility(
308 freeMarkerContext, restrictedVariables, "propsUtil",
309 PropsUtil.getProps());
310 }
311 catch (SecurityException se) {
312 _log.error(se, se);
313 }
314
315
316
317 try {
318 freeMarkerContext.put(
319 "portletURLFactory",
320 PortletURLFactoryUtil.getPortletURLFactory());
321 }
322 catch (SecurityException se) {
323 _log.error(se, se);
324 }
325
326
327
328 insertHelperUtility(
329 freeMarkerContext, restrictedVariables,
330 "freeMarkerPortletPreferences", new VelocityPortletPreferences());
331
332
333
334 freeMarkerContext.put(
335 "randomizer", Randomizer_IW.getInstance().getWrappedInstance());
336
337 try {
338
339
340 UtilLocator utilLocator = UtilLocator.getInstance();
341
342 insertHelperUtility(
343 freeMarkerContext, restrictedVariables, "utilLocator",
344 utilLocator);
345
346
347
348 try {
349 freeMarkerContext.put(
350 "saxReaderUtil",
351 utilLocator.findUtil(SAXReader.class.getName()));
352 }
353 catch (SecurityException se) {
354 _log.error(se, se);
355 }
356 }
357 catch (SecurityException se) {
358 _log.error(se, se);
359 }
360
361
362
363 try {
364 insertHelperUtility(
365 freeMarkerContext, restrictedVariables, "sessionClicks",
366 SessionClicks_IW.getInstance());
367 }
368 catch (SecurityException se) {
369 _log.error(se, se);
370 }
371
372
373
374 freeMarkerContext.put(
375 "staticFieldGetter", StaticFieldGetter.getInstance());
376
377
378
379 freeMarkerContext.put(
380 "staticUtil", BeansWrapper.getDefaultInstance().getStaticModels());
381
382
383
384 freeMarkerContext.put("stringUtil", StringUtil_IW.getInstance());
385
386
387
388 freeMarkerContext.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
389
390
391
392 freeMarkerContext.put(
393 "unicodeFormatter", UnicodeFormatter_IW.getInstance());
394
395
396
397 freeMarkerContext.put("validator", Validator_IW.getInstance());
398
399
400
401 try {
402 Class<?> clazz = VelocityTaglib.class;
403
404 Method method = clazz.getMethod(
405 "layoutIcon", new Class[] {Layout.class});
406
407 freeMarkerContext.put("velocityTaglib#layoutIcon", method);
408 }
409 catch (Exception e) {
410 _log.error(e, e);
411 }
412
413
414
415 try {
416 freeMarkerContext.put(
417 "webServerToken",
418 WebServerServletTokenUtil.getWebServerServletToken());
419 }
420 catch (SecurityException se) {
421 _log.error(se, se);
422 }
423
424
425
426 try {
427 freeMarkerContext.put(
428 "accountPermission",
429 AccountPermissionUtil.getAccountPermission());
430 }
431 catch (SecurityException se) {
432 _log.error(se, se);
433 }
434
435 try {
436 freeMarkerContext.put(
437 "commonPermission", CommonPermissionUtil.getCommonPermission());
438 }
439 catch (SecurityException se) {
440 _log.error(se, se);
441 }
442
443 try {
444 freeMarkerContext.put(
445 "groupPermission", GroupPermissionUtil.getGroupPermission());
446 }
447 catch (SecurityException se) {
448 _log.error(se, se);
449 }
450
451 try {
452 freeMarkerContext.put(
453 "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
454 }
455 catch (SecurityException se) {
456 _log.error(se, se);
457 }
458
459 try {
460 freeMarkerContext.put(
461 "organizationPermission",
462 OrganizationPermissionUtil.getOrganizationPermission());
463 }
464 catch (SecurityException se) {
465 _log.error(se, se);
466 }
467
468 try {
469 freeMarkerContext.put(
470 "passwordPolicyPermission",
471 PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
472 }
473 catch (SecurityException se) {
474 _log.error(se, se);
475 }
476
477 try {
478 freeMarkerContext.put(
479 "portalPermission", PortalPermissionUtil.getPortalPermission());
480 }
481 catch (SecurityException se) {
482 _log.error(se, se);
483 }
484
485 try {
486 freeMarkerContext.put(
487 "portletPermission",
488 PortletPermissionUtil.getPortletPermission());
489 }
490 catch (SecurityException se) {
491 _log.error(se, se);
492 }
493
494 try {
495 freeMarkerContext.put(
496 "rolePermission", RolePermissionUtil.getRolePermission());
497 }
498 catch (SecurityException se) {
499 _log.error(se, se);
500 }
501
502 try {
503 freeMarkerContext.put(
504 "userGroupPermission",
505 UserGroupPermissionUtil.getUserGroupPermission());
506 }
507 catch (SecurityException se) {
508 _log.error(se, se);
509 }
510
511 try {
512 freeMarkerContext.put(
513 "userPermission", UserPermissionUtil.getUserPermission());
514 }
515 catch (SecurityException se) {
516 _log.error(se, se);
517 }
518
519
520
521 try {
522 freeMarkerContext.put(
523 "imageToken",
524 WebServerServletTokenUtil.getWebServerServletToken());
525 }
526 catch (SecurityException se) {
527 _log.error(se, se);
528 }
529 }
530
531 public void insertVariables(
532 FreeMarkerContext freeMarkerContext, HttpServletRequest request)
533 throws Exception {
534
535
536
537 freeMarkerContext.put("request", request);
538
539
540
541 PortletConfigImpl portletConfigImpl =
542 (PortletConfigImpl)request.getAttribute(
543 JavaConstants.JAVAX_PORTLET_CONFIG);
544
545 if (portletConfigImpl != null) {
546 freeMarkerContext.put("portletConfig", portletConfigImpl);
547 }
548
549
550
551 final PortletRequest portletRequest =
552 (PortletRequest)request.getAttribute(
553 JavaConstants.JAVAX_PORTLET_REQUEST);
554
555 if (portletRequest != null) {
556 if (portletRequest instanceof RenderRequest) {
557 freeMarkerContext.put("renderRequest", portletRequest);
558 }
559 }
560
561
562
563 final PortletResponse portletResponse =
564 (PortletResponse)request.getAttribute(
565 JavaConstants.JAVAX_PORTLET_RESPONSE);
566
567 if (portletResponse != null) {
568 if (portletResponse instanceof RenderResponse) {
569 freeMarkerContext.put("renderResponse", portletResponse);
570 }
571 }
572
573
574
575 if ((portletRequest != null) && (portletResponse != null)) {
576 freeMarkerContext.put(
577 "xmlRequest",
578 new Object() {
579
580 @Override
581 public String toString() {
582 return PortletRequestUtil.toXML(
583 portletRequest, portletResponse);
584 }
585
586 }
587 );
588 }
589
590
591
592 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
593 WebKeys.THEME_DISPLAY);
594
595 if (themeDisplay != null) {
596 Theme theme = themeDisplay.getTheme();
597
598 Layout layout = themeDisplay.getLayout();
599 List<Layout> layouts = themeDisplay.getLayouts();
600
601 freeMarkerContext.put("themeDisplay", themeDisplay);
602 freeMarkerContext.put("company", themeDisplay.getCompany());
603 freeMarkerContext.put("user", themeDisplay.getUser());
604 freeMarkerContext.put("realUser", themeDisplay.getRealUser());
605 freeMarkerContext.put("layout", layout);
606 freeMarkerContext.put("layouts", layouts);
607 freeMarkerContext.put(
608 "plid", String.valueOf(themeDisplay.getPlid()));
609 freeMarkerContext.put(
610 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
611 freeMarkerContext.put(
612 "scopeGroupId", new Long(themeDisplay.getScopeGroupId()));
613 freeMarkerContext.put(
614 "permissionChecker", themeDisplay.getPermissionChecker());
615 freeMarkerContext.put("locale", themeDisplay.getLocale());
616 freeMarkerContext.put("timeZone", themeDisplay.getTimeZone());
617 freeMarkerContext.put("theme", theme);
618 freeMarkerContext.put("colorScheme", themeDisplay.getColorScheme());
619 freeMarkerContext.put(
620 "portletDisplay", themeDisplay.getPortletDisplay());
621
622
623
624 if (layout != null) {
625 RequestVars requestVars = new RequestVars(
626 request, themeDisplay, layout.getAncestorPlid(),
627 layout.getAncestorLayoutId(), freeMarkerContext);
628
629 List<NavItem> navItems = NavItem.fromLayouts(
630 requestVars, layouts);
631
632 freeMarkerContext.put("navItems", navItems);
633 }
634
635
636
637 String servletContextName = GetterUtil.getString(
638 theme.getServletContextName());
639
640 freeMarkerContext.put(
641 "fullCssPath",
642 StringPool.SLASH + servletContextName +
643 theme.getFreeMarkerTemplateLoader() + theme.getCssPath());
644
645 freeMarkerContext.put(
646 "fullTemplatesPath",
647 StringPool.SLASH + servletContextName +
648 theme.getFreeMarkerTemplateLoader() +
649 theme.getTemplatesPath());
650
651
652
653 freeMarkerContext.put(
654 "init",
655 StringPool.SLASH + themeDisplay.getPathContext() +
656 FreeMarkerTemplateLoader.SERVLET_SEPARATOR +
657 "/html/themes/_unstyled/templates/init.ftl");
658
659
660
661 freeMarkerContext.put(
662 "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
663 }
664
665
666
667 insertTilesVariables(freeMarkerContext, request);
668
669
670
671 if (request.getAttribute(WebKeys.PAGE_TITLE) != null) {
672 freeMarkerContext.put(
673 "pageTitle", request.getAttribute(WebKeys.PAGE_TITLE));
674 }
675
676 if (request.getAttribute(WebKeys.PAGE_SUBTITLE) != null) {
677 freeMarkerContext.put(
678 "pageSubtitle", request.getAttribute(WebKeys.PAGE_SUBTITLE));
679 }
680
681
682
683 Map<String, Object> ftlVariables =
684 (Map<String, Object>)request.getAttribute(WebKeys.FTL_VARIABLES);
685
686 if (ftlVariables != null) {
687 for (Map.Entry<String, Object> entry : ftlVariables.entrySet()) {
688 String key = entry.getKey();
689 Object value = entry.getValue();
690
691 if (Validator.isNotNull(key)) {
692 freeMarkerContext.put(key, value);
693 }
694 }
695 }
696 }
697
698 protected void insertHelperUtility(
699 FreeMarkerContext freeMarkerContext, String[] restrictedVariables,
700 String key, Object value) {
701
702 if (!ArrayUtil.contains(restrictedVariables, key)) {
703 freeMarkerContext.put(key, value);
704 }
705 }
706
707 protected void insertTilesVariables(
708 FreeMarkerContext freeMarkerContext, HttpServletRequest request) {
709
710 ComponentContext componentContext =
711 (ComponentContext)request.getAttribute(
712 ComponentConstants.COMPONENT_CONTEXT);
713
714 if (componentContext == null) {
715 return;
716 }
717
718 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
719 WebKeys.THEME_DISPLAY);
720
721 String tilesTitle = (String)componentContext.getAttribute("title");
722
723 themeDisplay.setTilesTitle(tilesTitle);
724
725 if (tilesTitle != null) {
726 freeMarkerContext.put("tilesTitle", tilesTitle);
727 }
728
729 String tilesContent = (String)componentContext.getAttribute("content");
730
731 themeDisplay.setTilesContent(tilesContent);
732
733 if (tilesContent != null) {
734 freeMarkerContext.put("tilesContent", tilesContent);
735 }
736
737 boolean tilesSelectable = GetterUtil.getBoolean(
738 (String)componentContext.getAttribute("selectable"));
739
740 themeDisplay.setTilesSelectable(tilesSelectable);
741
742 freeMarkerContext.put("tilesSelectable", tilesSelectable);
743 }
744
745 private static Log _log = LogFactoryUtil.getLog(
746 FreeMarkerVariablesImpl.class);
747
748 }