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