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.servlet.BrowserSnifferUtil;
023 import com.liferay.portal.kernel.util.ArrayUtil;
024 import com.liferay.portal.kernel.util.ArrayUtil_IW;
025 import com.liferay.portal.kernel.util.DateUtil_IW;
026 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
027 import com.liferay.portal.kernel.util.GetterUtil;
028 import com.liferay.portal.kernel.util.GetterUtil_IW;
029 import com.liferay.portal.kernel.util.HtmlUtil;
030 import com.liferay.portal.kernel.util.HttpUtil;
031 import com.liferay.portal.kernel.util.JavaConstants;
032 import com.liferay.portal.kernel.util.LocaleUtil;
033 import com.liferay.portal.kernel.util.ParamUtil_IW;
034 import com.liferay.portal.kernel.util.Randomizer_IW;
035 import com.liferay.portal.kernel.util.StaticFieldGetter;
036 import com.liferay.portal.kernel.util.StringUtil_IW;
037 import com.liferay.portal.kernel.util.TimeZoneUtil_IW;
038 import com.liferay.portal.kernel.util.UnicodeFormatter_IW;
039 import com.liferay.portal.kernel.util.Validator;
040 import com.liferay.portal.kernel.util.Validator_IW;
041 import com.liferay.portal.kernel.velocity.VelocityContext;
042 import com.liferay.portal.kernel.velocity.VelocityVariables;
043 import com.liferay.portal.kernel.xml.SAXReader;
044 import com.liferay.portal.model.Layout;
045 import com.liferay.portal.model.Theme;
046 import com.liferay.portal.service.permission.AccountPermissionUtil;
047 import com.liferay.portal.service.permission.CommonPermissionUtil;
048 import com.liferay.portal.service.permission.GroupPermissionUtil;
049 import com.liferay.portal.service.permission.LayoutPermissionUtil;
050 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
051 import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
052 import com.liferay.portal.service.permission.PortalPermissionUtil;
053 import com.liferay.portal.service.permission.PortletPermissionUtil;
054 import com.liferay.portal.service.permission.RolePermissionUtil;
055 import com.liferay.portal.service.permission.UserGroupPermissionUtil;
056 import com.liferay.portal.service.permission.UserPermissionUtil;
057 import com.liferay.portal.theme.NavItem;
058 import com.liferay.portal.theme.RequestVars;
059 import com.liferay.portal.theme.ThemeDisplay;
060 import com.liferay.portal.util.PortalUtil;
061 import com.liferay.portal.util.PrefsPropsUtil_IW;
062 import com.liferay.portal.util.PropsUtil_IW;
063 import com.liferay.portal.util.SessionClicks_IW;
064 import com.liferay.portal.util.WebKeys;
065 import com.liferay.portal.webserver.WebServerServletTokenUtil;
066 import com.liferay.portlet.PortletConfigImpl;
067 import com.liferay.portlet.PortletURLFactoryUtil;
068 import com.liferay.portlet.expando.service.ExpandoColumnLocalService;
069 import com.liferay.portlet.expando.service.ExpandoRowLocalService;
070 import com.liferay.portlet.expando.service.ExpandoTableLocalService;
071 import com.liferay.portlet.expando.service.ExpandoValueLocalService;
072 import com.liferay.portlet.journalcontent.util.JournalContentUtil;
073 import com.liferay.util.portlet.PortletRequestUtil;
074
075 import java.util.List;
076 import java.util.Map;
077
078 import javax.portlet.PortletRequest;
079 import javax.portlet.PortletResponse;
080 import javax.portlet.RenderRequest;
081 import javax.portlet.RenderResponse;
082
083 import javax.servlet.http.HttpServletRequest;
084
085 import org.apache.struts.taglib.tiles.ComponentConstants;
086 import org.apache.struts.tiles.ComponentContext;
087 import org.apache.velocity.tools.generic.DateTool;
088 import org.apache.velocity.tools.generic.EscapeTool;
089 import org.apache.velocity.tools.generic.IteratorTool;
090 import org.apache.velocity.tools.generic.ListTool;
091 import org.apache.velocity.tools.generic.MathTool;
092 import org.apache.velocity.tools.generic.NumberTool;
093 import org.apache.velocity.tools.generic.SortTool;
094
095
099 public class VelocityVariablesImpl implements VelocityVariables {
100
101 public void insertHelperUtilities(
102 VelocityContext velocityContext, String[] restrictedVariables) {
103
104
105
106 velocityContext.put("arrayUtil", ArrayUtil_IW.getInstance());
107
108
109
110 velocityContext.put(
111 "auditMessageFactoryUtil",
112 AuditMessageFactoryUtil.getAuditMessageFactory());
113
114
115
116 velocityContext.put(
117 "auditRouterUtil", AuditRouterUtil.getAuditRouter());
118
119
120
121 velocityContext.put(
122 "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
123
124
125
126 velocityContext.put(
127 "dateFormatFactory",
128 FastDateFormatFactoryUtil.getFastDateFormatFactory());
129
130
131
132 velocityContext.put("dateTool", new DateTool());
133
134
135
136 velocityContext.put("dateUtil", DateUtil_IW.getInstance());
137
138
139
140 velocityContext.put("escapeTool", new EscapeTool());
141
142
143
144 ServiceLocator serviceLocator = ServiceLocator.getInstance();
145
146 velocityContext.put(
147 "expandoColumnLocalService",
148 serviceLocator.findService(
149 ExpandoColumnLocalService.class.getName()));
150
151
152
153 velocityContext.put(
154 "expandoRowLocalService",
155 serviceLocator.findService(ExpandoRowLocalService.class.getName()));
156
157
158
159 velocityContext.put(
160 "expandoTableLocalService",
161 serviceLocator.findService(
162 ExpandoTableLocalService.class.getName()));
163
164
165
166 velocityContext.put(
167 "expandoValueLocalService",
168 serviceLocator.findService(
169 ExpandoValueLocalService.class.getName()));
170
171
172
173 velocityContext.put("getterUtil", GetterUtil_IW.getInstance());
174
175
176
177 velocityContext.put("htmlUtil", HtmlUtil.getHtml());
178
179
180
181 velocityContext.put("httpUtil", HttpUtil.getHttp());
182
183
184
185 velocityContext.put("iteratorTool", new IteratorTool());
186
187
188
189 velocityContext.put(
190 "journalContentUtil", JournalContentUtil.getJournalContent());
191
192
193
194 velocityContext.put(
195 "jsonFactoryUtil", JSONFactoryUtil.getJSONFactory());
196
197
198
199 velocityContext.put("languageUtil", LanguageUtil.getLanguage());
200 velocityContext.put(
201 "unicodeLanguageUtil", UnicodeLanguageUtil.getUnicodeLanguage());
202
203
204
205 velocityContext.put("listTool", new ListTool());
206
207
208
209 velocityContext.put("localeUtil", LocaleUtil.getInstance());
210
211
212
213 velocityContext.put("mathTool", new MathTool());
214
215
216
217 velocityContext.put("numberTool", new NumberTool());
218
219
220
221 velocityContext.put("paramUtil", ParamUtil_IW.getInstance());
222
223
224
225 insertHelperUtility(
226 velocityContext, restrictedVariables, "portalUtil",
227 PortalUtil.getPortal());
228 insertHelperUtility(
229 velocityContext, restrictedVariables, "portal",
230 PortalUtil.getPortal());
231
232
233
234 insertHelperUtility(
235 velocityContext, restrictedVariables, "prefsPropsUtil",
236 PrefsPropsUtil_IW.getInstance());
237
238
239
240 insertHelperUtility(
241 velocityContext, restrictedVariables, "propsUtil",
242 PropsUtil_IW.getInstance());
243
244
245
246 velocityContext.put(
247 "portletURLFactory", PortletURLFactoryUtil.getPortletURLFactory());
248
249
250
251 insertHelperUtility(
252 velocityContext, restrictedVariables, "velocityPortletPreferences",
253 new VelocityPortletPreferences());
254
255
256
257 velocityContext.put(
258 "randomizer", Randomizer_IW.getInstance().getWrappedInstance());
259
260
261
262 UtilLocator utilLocator = UtilLocator.getInstance();
263
264 velocityContext.put(
265 "saxReaderUtil", utilLocator.findUtil(SAXReader.class.getName()));
266
267
268
269 insertHelperUtility(
270 velocityContext, restrictedVariables, "serviceLocator",
271 serviceLocator);
272
273
274
275 insertHelperUtility(
276 velocityContext, restrictedVariables, "sessionClicks",
277 SessionClicks_IW.getInstance());
278
279
280
281 velocityContext.put("sortTool", new SortTool());
282
283
284
285 velocityContext.put(
286 "staticFieldGetter", StaticFieldGetter.getInstance());
287
288
289
290 velocityContext.put("stringUtil", StringUtil_IW.getInstance());
291
292
293
294 velocityContext.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
295
296
297
298 insertHelperUtility(
299 velocityContext, restrictedVariables, "utilLocator", utilLocator);
300
301
302
303 velocityContext.put(
304 "unicodeFormatter", UnicodeFormatter_IW.getInstance());
305
306
307
308 velocityContext.put("validator", Validator_IW.getInstance());
309
310
311
312 velocityContext.put(
313 "webServerToken",
314 WebServerServletTokenUtil.getWebServerServletToken());
315
316
317
318 velocityContext.put(
319 "accountPermission", AccountPermissionUtil.getAccountPermission());
320 velocityContext.put(
321 "commonPermission", CommonPermissionUtil.getCommonPermission());
322 velocityContext.put(
323 "groupPermission", GroupPermissionUtil.getGroupPermission());
324 velocityContext.put(
325 "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
326 velocityContext.put(
327 "organizationPermission",
328 OrganizationPermissionUtil.getOrganizationPermission());
329 velocityContext.put(
330 "passwordPolicyPermission",
331 PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
332 velocityContext.put(
333 "portalPermission", PortalPermissionUtil.getPortalPermission());
334 velocityContext.put(
335 "portletPermission", PortletPermissionUtil.getPortletPermission());
336 velocityContext.put(
337 "rolePermission", RolePermissionUtil.getRolePermission());
338 velocityContext.put(
339 "userGroupPermission",
340 UserGroupPermissionUtil.getUserGroupPermission());
341 velocityContext.put(
342 "userPermission", UserPermissionUtil.getUserPermission());
343
344
345
346 velocityContext.put(
347 "dateFormats",
348 FastDateFormatFactoryUtil.getFastDateFormatFactory());
349 velocityContext.put(
350 "imageToken", WebServerServletTokenUtil.getWebServerServletToken());
351 velocityContext.put(
352 "locationPermission",
353 OrganizationPermissionUtil.getOrganizationPermission());
354 }
355
356 public void insertVariables(
357 VelocityContext velocityContext, HttpServletRequest request)
358 throws Exception {
359
360
361
362 velocityContext.put("request", request);
363
364
365
366 PortletConfigImpl portletConfigImpl =
367 (PortletConfigImpl)request.getAttribute(
368 JavaConstants.JAVAX_PORTLET_CONFIG);
369
370 if (portletConfigImpl != null) {
371 velocityContext.put("portletConfig", portletConfigImpl);
372 }
373
374
375
376 final PortletRequest portletRequest =
377 (PortletRequest)request.getAttribute(
378 JavaConstants.JAVAX_PORTLET_REQUEST);
379
380 if (portletRequest != null) {
381 if (portletRequest instanceof RenderRequest) {
382 velocityContext.put("renderRequest", portletRequest);
383 }
384 }
385
386
387
388 final PortletResponse portletResponse =
389 (PortletResponse)request.getAttribute(
390 JavaConstants.JAVAX_PORTLET_RESPONSE);
391
392 if (portletResponse != null) {
393 if (portletResponse instanceof RenderResponse) {
394 velocityContext.put("renderResponse", portletResponse);
395 }
396 }
397
398
399
400 if ((portletRequest != null) && (portletResponse != null)) {
401 velocityContext.put(
402 "xmlRequest",
403 new Object() {
404
405 @Override
406 public String toString() {
407 return PortletRequestUtil.toXML(
408 portletRequest, portletResponse);
409 }
410
411 }
412 );
413 }
414
415
416
417 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
418 WebKeys.THEME_DISPLAY);
419
420 if (themeDisplay != null) {
421 Layout layout = themeDisplay.getLayout();
422 List<Layout> layouts = themeDisplay.getLayouts();
423
424 velocityContext.put("themeDisplay", themeDisplay);
425 velocityContext.put("company", themeDisplay.getCompany());
426 velocityContext.put("user", themeDisplay.getUser());
427 velocityContext.put("realUser", themeDisplay.getRealUser());
428 velocityContext.put("layout", layout);
429 velocityContext.put("layouts", layouts);
430 velocityContext.put("plid", String.valueOf(themeDisplay.getPlid()));
431 velocityContext.put(
432 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
433 velocityContext.put(
434 "scopeGroupId", new Long(themeDisplay.getScopeGroupId()));
435 velocityContext.put(
436 "permissionChecker", themeDisplay.getPermissionChecker());
437 velocityContext.put("locale", themeDisplay.getLocale());
438 velocityContext.put("timeZone", themeDisplay.getTimeZone());
439 velocityContext.put("colorScheme", themeDisplay.getColorScheme());
440 velocityContext.put(
441 "portletDisplay", themeDisplay.getPortletDisplay());
442
443
444
445 if (layout != null) {
446 RequestVars requestVars = new RequestVars(
447 request, themeDisplay, layout.getAncestorPlid(),
448 layout.getAncestorLayoutId());
449
450 List<NavItem> navItems = NavItem.fromLayouts(
451 requestVars, layouts);
452
453 velocityContext.put("navItems", navItems);
454 }
455
456
457
458 velocityContext.put(
459 "init",
460 themeDisplay.getPathContext() +
461 VelocityResourceListener.SERVLET_SEPARATOR +
462 "/html/themes/_unstyled/templates/init.vm");
463
464
465
466 velocityContext.put(
467 "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
468 }
469
470
471
472 Theme theme = (Theme)request.getAttribute(WebKeys.THEME);
473
474 if ((theme == null) && (themeDisplay != null)) {
475 theme = themeDisplay.getTheme();
476 }
477
478 if (theme != null) {
479
480
481
482 velocityContext.put("theme", theme);
483
484 String servletContextName = GetterUtil.getString(
485 theme.getServletContextName());
486
487 velocityContext.put(
488 "fullCssPath",
489 servletContextName + theme.getVelocityResourceListener() +
490 theme.getCssPath());
491
492 velocityContext.put(
493 "fullTemplatesPath",
494 servletContextName + theme.getVelocityResourceListener() +
495 theme.getTemplatesPath());
496 }
497
498
499
500 insertTilesVariables(velocityContext, request);
501
502
503
504 velocityContext.put(
505 "pageTitle", request.getAttribute(WebKeys.PAGE_TITLE));
506 velocityContext.put(
507 "pageSubtitle", request.getAttribute(WebKeys.PAGE_SUBTITLE));
508
509
510
511 Map<String, Object> vmVariables =
512 (Map<String, Object>)request.getAttribute(WebKeys.VM_VARIABLES);
513
514 if (vmVariables != null) {
515 for (Map.Entry<String, Object> entry : vmVariables.entrySet()) {
516 String key = entry.getKey();
517 Object value = entry.getValue();
518
519 if (Validator.isNotNull(key)) {
520 velocityContext.put(key, value);
521 }
522 }
523 }
524 }
525
526 protected void insertHelperUtility(
527 VelocityContext velocityContext, String[] restrictedVariables,
528 String key, Object value) {
529
530 if (!ArrayUtil.contains(restrictedVariables, key)) {
531 velocityContext.put(key, value);
532 }
533 }
534
535 protected void insertTilesVariables(
536 VelocityContext velocityContext, HttpServletRequest request) {
537
538 ComponentContext componentContext =
539 (ComponentContext)request.getAttribute(
540 ComponentConstants.COMPONENT_CONTEXT);
541
542 if (componentContext == null) {
543 return;
544 }
545
546 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
547 WebKeys.THEME_DISPLAY);
548
549 String tilesTitle = (String)componentContext.getAttribute("title");
550
551 themeDisplay.setTilesTitle(tilesTitle);
552
553 velocityContext.put("tilesTitle", tilesTitle);
554
555 String tilesContent = (String)componentContext.getAttribute("content");
556
557 themeDisplay.setTilesContent(tilesContent);
558
559 velocityContext.put("tilesContent", tilesContent);
560
561 boolean tilesSelectable = GetterUtil.getBoolean(
562 (String)componentContext.getAttribute("selectable"));
563
564 themeDisplay.setTilesSelectable(tilesSelectable);
565
566 velocityContext.put("tilesSelectable", tilesSelectable);
567 }
568
569 }