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