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