1
14
15 package com.liferay.portal.freemarker;
16
17 import com.liferay.portal.kernel.freemarker.FreeMarkerContext;
18 import com.liferay.portal.kernel.language.LanguageUtil;
19 import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
20 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
21 import com.liferay.portal.kernel.servlet.ImageServletTokenUtil;
22 import com.liferay.portal.kernel.util.ArrayUtil;
23 import com.liferay.portal.kernel.util.ArrayUtil_IW;
24 import com.liferay.portal.kernel.util.DateUtil_IW;
25 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
26 import com.liferay.portal.kernel.util.GetterUtil;
27 import com.liferay.portal.kernel.util.GetterUtil_IW;
28 import com.liferay.portal.kernel.util.HtmlUtil;
29 import com.liferay.portal.kernel.util.HttpUtil;
30 import com.liferay.portal.kernel.util.JavaConstants;
31 import com.liferay.portal.kernel.util.LocaleUtil;
32 import com.liferay.portal.kernel.util.ParamUtil_IW;
33 import com.liferay.portal.kernel.util.Randomizer_IW;
34 import com.liferay.portal.kernel.util.StaticFieldGetter;
35 import com.liferay.portal.kernel.util.StringPool;
36 import com.liferay.portal.kernel.util.StringUtil_IW;
37 import com.liferay.portal.kernel.util.TimeZoneUtil_IW;
38 import com.liferay.portal.kernel.util.UnicodeFormatter_IW;
39 import com.liferay.portal.kernel.util.Validator;
40 import com.liferay.portal.kernel.util.Validator_IW;
41 import com.liferay.portal.kernel.xml.SAXReaderUtil;
42 import com.liferay.portal.model.Layout;
43 import com.liferay.portal.model.Theme;
44 import com.liferay.portal.service.permission.AccountPermissionUtil;
45 import com.liferay.portal.service.permission.CommonPermissionUtil;
46 import com.liferay.portal.service.permission.GroupPermissionUtil;
47 import com.liferay.portal.service.permission.LayoutPermissionUtil;
48 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
49 import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
50 import com.liferay.portal.service.permission.PortalPermissionUtil;
51 import com.liferay.portal.service.permission.PortletPermissionUtil;
52 import com.liferay.portal.service.permission.RolePermissionUtil;
53 import com.liferay.portal.service.permission.UserGroupPermissionUtil;
54 import com.liferay.portal.service.permission.UserPermissionUtil;
55 import com.liferay.portal.theme.NavItem;
56 import com.liferay.portal.theme.RequestVars;
57 import com.liferay.portal.theme.ThemeDisplay;
58 import com.liferay.portal.util.PortalUtil;
59 import com.liferay.portal.util.PrefsPropsUtil_IW;
60 import com.liferay.portal.util.PropsUtil_IW;
61 import com.liferay.portal.util.SessionClicks_IW;
62 import com.liferay.portal.util.WebKeys;
63 import com.liferay.portal.velocity.ServiceLocator;
64 import com.liferay.portal.velocity.UtilLocator;
65 import com.liferay.portal.velocity.VelocityPortletPreferences;
66 import com.liferay.portlet.PortletConfigImpl;
67 import com.liferay.portlet.PortletURLFactoryUtil;
68 import com.liferay.portlet.expando.service.ExpandoColumnLocalService;
69 import com.liferay.portlet.expando.service.ExpandoRowLocalService;
70 import com.liferay.portlet.expando.service.ExpandoTableLocalService;
71 import com.liferay.portlet.expando.service.ExpandoValueLocalService;
72 import com.liferay.portlet.journalcontent.util.JournalContentUtil;
73 import com.liferay.util.portlet.PortletRequestUtil;
74
75 import java.util.List;
76 import java.util.Map;
77
78 import javax.portlet.PortletRequest;
79 import javax.portlet.PortletResponse;
80 import javax.portlet.RenderRequest;
81 import javax.portlet.RenderResponse;
82
83 import javax.servlet.http.HttpServletRequest;
84
85 import org.apache.struts.taglib.tiles.ComponentConstants;
86 import org.apache.struts.tiles.ComponentContext;
87
88
93 public class FreeMarkerVariables {
94
95 public static void insertHelperUtilities(
96 FreeMarkerContext freeMarkerContext, String[] restrictedVariables) {
97
98
100 freeMarkerContext.put("arrayUtil", ArrayUtil_IW.getInstance());
101
102
104 freeMarkerContext.put(
105 "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
106
107
109 freeMarkerContext.put(
110 "dateFormatFactory",
111 FastDateFormatFactoryUtil.getFastDateFormatFactory());
112
113
115 freeMarkerContext.put("dateUtil", DateUtil_IW.getInstance());
116
117
119 ServiceLocator serviceLocator = ServiceLocator.getInstance();
120
121 freeMarkerContext.put(
122 "expandoColumnLocalService",
123 serviceLocator.findService(
124 ExpandoColumnLocalService.class.getName()));
125
126
128 freeMarkerContext.put(
129 "expandoRowLocalService",
130 serviceLocator.findService(ExpandoRowLocalService.class.getName()));
131
132
134 freeMarkerContext.put(
135 "expandoTableLocalService",
136 serviceLocator.findService(
137 ExpandoTableLocalService.class.getName()));
138
139
141 freeMarkerContext.put(
142 "expandoValueLocalService",
143 serviceLocator.findService(
144 ExpandoValueLocalService.class.getName()));
145
146
148 freeMarkerContext.put("getterUtil", GetterUtil_IW.getInstance());
149
150
152 freeMarkerContext.put("htmlUtil", HtmlUtil.getHtml());
153
154
156 freeMarkerContext.put("httpUtil", HttpUtil.getHttp());
157
158
160 freeMarkerContext.put(
161 "imageToken", ImageServletTokenUtil.getImageServletToken());
162
163
165 freeMarkerContext.put(
166 "journalContentUtil", JournalContentUtil.getJournalContent());
167
168
170 freeMarkerContext.put("languageUtil", LanguageUtil.getLanguage());
171 freeMarkerContext.put(
172 "unicodeLanguageUtil", UnicodeLanguageUtil.getUnicodeLanguage());
173
174
176 freeMarkerContext.put("localeUtil", LocaleUtil.getInstance());
177
178
180 freeMarkerContext.put("paramUtil", ParamUtil_IW.getInstance());
181
182
184 _insertHelperUtility(
185 freeMarkerContext, restrictedVariables, "portalUtil",
186 PortalUtil.getPortal());
187 _insertHelperUtility(
188 freeMarkerContext, restrictedVariables, "portal",
189 PortalUtil.getPortal());
190
191
193 _insertHelperUtility(
194 freeMarkerContext, restrictedVariables, "prefsPropsUtil",
195 PrefsPropsUtil_IW.getInstance());
196
197
199 _insertHelperUtility(
200 freeMarkerContext, restrictedVariables, "propsUtil",
201 PropsUtil_IW.getInstance());
202
203
205 freeMarkerContext.put(
206 "portletURLFactory", PortletURLFactoryUtil.getPortletURLFactory());
207
208
210 _insertHelperUtility(
211 freeMarkerContext, restrictedVariables,
212 "freeMarkerPortletPreferences", new VelocityPortletPreferences());
213
214
216 freeMarkerContext.put(
217 "randomizer", Randomizer_IW.getInstance().getWrappedInstance());
218
219
221 UtilLocator utilLocator = UtilLocator.getInstance();
222
223 freeMarkerContext.put(
224 "saxReaderUtil",
225 utilLocator.findUtil(SAXReaderUtil.class.getName()));
226
227
229 _insertHelperUtility(
230 freeMarkerContext, restrictedVariables, "serviceLocator",
231 serviceLocator);
232
233
235 _insertHelperUtility(
236 freeMarkerContext, restrictedVariables, "sessionClicks",
237 SessionClicks_IW.getInstance());
238
239
241 freeMarkerContext.put(
242 "staticFieldGetter", StaticFieldGetter.getInstance());
243
244
246 freeMarkerContext.put("stringUtil", StringUtil_IW.getInstance());
247
248
250 freeMarkerContext.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
251
252
254 _insertHelperUtility(
255 freeMarkerContext, restrictedVariables, "utilLocator", utilLocator);
256
257
259 freeMarkerContext.put(
260 "unicodeFormatter", UnicodeFormatter_IW.getInstance());
261
262
264 freeMarkerContext.put("validator", Validator_IW.getInstance());
265
266
268 freeMarkerContext.put(
269 "accountPermission", AccountPermissionUtil.getAccountPermission());
270 freeMarkerContext.put(
271 "commonPermission", CommonPermissionUtil.getCommonPermission());
272 freeMarkerContext.put(
273 "groupPermission", GroupPermissionUtil.getGroupPermission());
274 freeMarkerContext.put(
275 "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
276 freeMarkerContext.put(
277 "organizationPermission",
278 OrganizationPermissionUtil.getOrganizationPermission());
279 freeMarkerContext.put(
280 "passwordPolicyPermission",
281 PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
282 freeMarkerContext.put(
283 "portalPermission", PortalPermissionUtil.getPortalPermission());
284 freeMarkerContext.put(
285 "portletPermission", PortletPermissionUtil.getPortletPermission());
286 freeMarkerContext.put(
287 "rolePermission", RolePermissionUtil.getRolePermission());
288 freeMarkerContext.put(
289 "userGroupPermission",
290 UserGroupPermissionUtil.getUserGroupPermission());
291 freeMarkerContext.put(
292 "userPermission", UserPermissionUtil.getUserPermission());
293 }
294
295 public static void insertVariables(
296 FreeMarkerContext freeMarkerContext, HttpServletRequest request)
297 throws Exception {
298
299
301 freeMarkerContext.put("request", request);
302
303
305 PortletConfigImpl portletConfigImpl =
306 (PortletConfigImpl)request.getAttribute(
307 JavaConstants.JAVAX_PORTLET_CONFIG);
308
309 if (portletConfigImpl != null) {
310 freeMarkerContext.put("portletConfig", portletConfigImpl);
311 }
312
313
315 final PortletRequest portletRequest =
316 (PortletRequest)request.getAttribute(
317 JavaConstants.JAVAX_PORTLET_REQUEST);
318
319 if (portletRequest != null) {
320 if (portletRequest instanceof RenderRequest) {
321 freeMarkerContext.put("renderRequest", portletRequest);
322 }
323 }
324
325
327 final PortletResponse portletResponse =
328 (PortletResponse)request.getAttribute(
329 JavaConstants.JAVAX_PORTLET_RESPONSE);
330
331 if (portletResponse != null) {
332 if (portletResponse instanceof RenderResponse) {
333 freeMarkerContext.put("renderResponse", portletResponse);
334 }
335 }
336
337
339 if ((portletRequest != null) && (portletResponse != null)) {
340 freeMarkerContext.put(
341 "xmlRequest",
342 new Object() {
343
344 public String toString() {
345 return PortletRequestUtil.toXML(
346 portletRequest, portletResponse);
347 }
348
349 }
350 );
351 }
352
353
355 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
356 WebKeys.THEME_DISPLAY);
357
358 if (themeDisplay != null) {
359 Theme theme = themeDisplay.getTheme();
360
361 Layout layout = themeDisplay.getLayout();
362 List<Layout> layouts = themeDisplay.getLayouts();
363
364 freeMarkerContext.put("themeDisplay", themeDisplay);
365 freeMarkerContext.put("company", themeDisplay.getCompany());
366 freeMarkerContext.put("user", themeDisplay.getUser());
367 freeMarkerContext.put("realUser", themeDisplay.getRealUser());
368 freeMarkerContext.put("layout", layout);
369 freeMarkerContext.put("layouts", layouts);
370 freeMarkerContext.put(
371 "plid", String.valueOf(themeDisplay.getPlid()));
372 freeMarkerContext.put(
373 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
374 freeMarkerContext.put(
375 "scopeGroupId", new Long(themeDisplay.getScopeGroupId()));
376 freeMarkerContext.put(
377 "permissionChecker", themeDisplay.getPermissionChecker());
378 freeMarkerContext.put("locale", themeDisplay.getLocale());
379 freeMarkerContext.put("timeZone", themeDisplay.getTimeZone());
380 freeMarkerContext.put("theme", theme);
381 freeMarkerContext.put("colorScheme", themeDisplay.getColorScheme());
382 freeMarkerContext.put(
383 "portletDisplay", themeDisplay.getPortletDisplay());
384
385
387 if (layout != null) {
388 RequestVars requestVars = new RequestVars(
389 request, themeDisplay, layout.getAncestorPlid(),
390 layout.getAncestorLayoutId());
391
392 List<NavItem> navItems = NavItem.fromLayouts(
393 requestVars, layouts);
394
395 freeMarkerContext.put("navItems", navItems);
396 }
397
398
400 String servletContextName = GetterUtil.getString(
401 theme.getServletContextName());
402
403 freeMarkerContext.put(
404 "fullCssPath",
405 StringPool.SLASH + servletContextName +
406 theme.getFreeMarkerTemplateLoader() + theme.getCssPath());
407
408 freeMarkerContext.put(
409 "fullTemplatesPath",
410 StringPool.SLASH + servletContextName +
411 theme.getFreeMarkerTemplateLoader() +
412 theme.getTemplatesPath());
413
414
416 freeMarkerContext.put(
417 "init",
418 StringPool.SLASH + themeDisplay.getPathContext() +
419 FreeMarkerTemplateLoader.SERVLET_SEPARATOR +
420 "/html/themes/_unstyled/templates/init.ftl");
421
422
424 freeMarkerContext.put(
425 "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
426 }
427
428
430 _insertTilesVariables(
431 freeMarkerContext, request, "tilesTitle", "title");
432 _insertTilesVariables(
433 freeMarkerContext, request, "tilesContent", "content");
434 _insertTilesVariables(
435 freeMarkerContext, request, "tilesSelectable", "selectable");
436
437
439 if (request.getAttribute(WebKeys.PAGE_TITLE) != null) {
440 freeMarkerContext.put(
441 "pageTitle", request.getAttribute(WebKeys.PAGE_TITLE));
442 }
443
444 if (request.getAttribute(WebKeys.PAGE_SUBTITLE) != null) {
445 freeMarkerContext.put(
446 "pageSubtitle", request.getAttribute(WebKeys.PAGE_SUBTITLE));
447 }
448
449
451 Map<String, Object> ftlVariables =
452 (Map<String, Object>)request.getAttribute(WebKeys.FTL_VARIABLES);
453
454 if (ftlVariables != null) {
455 for (Map.Entry<String, Object> entry : ftlVariables.entrySet()) {
456 String key = entry.getKey();
457 Object value = entry.getValue();
458
459 if (Validator.isNotNull(key)) {
460 freeMarkerContext.put(key, value);
461 }
462 }
463 }
464 }
465
466 private static void _insertHelperUtility(
467 FreeMarkerContext freeMarkerContext, String[] restrictedVariables,
468 String key, Object value) {
469
470 if (!ArrayUtil.contains(restrictedVariables, key)) {
471 freeMarkerContext.put(key, value);
472 }
473 }
474
475 private static void _insertTilesVariables(
476 FreeMarkerContext freeMarkerContext, HttpServletRequest request,
477 String attributeId, String attributeName) {
478
479 ComponentContext componentContext =
480 (ComponentContext)request.getAttribute(
481 ComponentConstants.COMPONENT_CONTEXT);
482
483 if (componentContext != null) {
484 String value = (String)componentContext.getAttribute(attributeName);
485
486 if (value != null) {
487 freeMarkerContext.put(attributeId, value);
488 }
489 }
490 }
491
492 }