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
298
300 freeMarkerContext.put("request", request);
301
302
304 PortletConfigImpl portletConfigImpl =
305 (PortletConfigImpl)request.getAttribute(
306 JavaConstants.JAVAX_PORTLET_CONFIG);
307
308 if (portletConfigImpl != null) {
309 freeMarkerContext.put("portletConfig", portletConfigImpl);
310 }
311
312
314 PortletRequest portletRequest = (PortletRequest)request.getAttribute(
315 JavaConstants.JAVAX_PORTLET_REQUEST);
316
317 if (portletRequest != null) {
318 if (portletRequest instanceof RenderRequest) {
319 freeMarkerContext.put("renderRequest", portletRequest);
320 }
321 }
322
323
325 PortletResponse portletResponse = (PortletResponse)request.getAttribute(
326 JavaConstants.JAVAX_PORTLET_RESPONSE);
327
328 if (portletResponse != null) {
329 if (portletResponse instanceof RenderResponse) {
330 freeMarkerContext.put("renderResponse", portletResponse);
331 }
332 }
333
334
336 if ((portletRequest != null) && (portletResponse != null)) {
337 String xmlRequest = PortletRequestUtil.toXML(
338 portletRequest, portletResponse);
339
340 freeMarkerContext.put("xmlRequest", xmlRequest);
341 }
342
343
345 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
346 WebKeys.THEME_DISPLAY);
347
348 if (themeDisplay != null) {
349 Theme theme = themeDisplay.getTheme();
350
351 Layout layout = themeDisplay.getLayout();
352 List<Layout> layouts = themeDisplay.getLayouts();
353
354 freeMarkerContext.put("themeDisplay", themeDisplay);
355 freeMarkerContext.put("company", themeDisplay.getCompany());
356 freeMarkerContext.put("user", themeDisplay.getUser());
357 freeMarkerContext.put("realUser", themeDisplay.getRealUser());
358 freeMarkerContext.put("layout", layout);
359 freeMarkerContext.put("layouts", layouts);
360 freeMarkerContext.put(
361 "plid", String.valueOf(themeDisplay.getPlid()));
362 freeMarkerContext.put(
363 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
364 freeMarkerContext.put(
365 "scopeGroupId", new Long(themeDisplay.getScopeGroupId()));
366 freeMarkerContext.put(
367 "permissionChecker", themeDisplay.getPermissionChecker());
368 freeMarkerContext.put("locale", themeDisplay.getLocale());
369 freeMarkerContext.put("timeZone", themeDisplay.getTimeZone());
370 freeMarkerContext.put("theme", theme);
371 freeMarkerContext.put("colorScheme", themeDisplay.getColorScheme());
372 freeMarkerContext.put(
373 "portletDisplay", themeDisplay.getPortletDisplay());
374
375
377 if (layout != null) {
378 RequestVars requestVars = new RequestVars(
379 request, themeDisplay, layout.getAncestorPlid(),
380 layout.getAncestorLayoutId());
381
382 List<NavItem> navItems = NavItem.fromLayouts(
383 requestVars, layouts);
384
385 freeMarkerContext.put("navItems", navItems);
386 }
387
388
390 String servletContextName = GetterUtil.getString(
391 theme.getServletContextName());
392
393 freeMarkerContext.put(
394 "fullCssPath",
395 StringPool.SLASH + servletContextName +
396 theme.getFreeMarkerTemplateLoader() + theme.getCssPath());
397
398 freeMarkerContext.put(
399 "fullTemplatesPath",
400 StringPool.SLASH + servletContextName +
401 theme.getFreeMarkerTemplateLoader() +
402 theme.getTemplatesPath());
403
404
406 freeMarkerContext.put(
407 "init",
408 StringPool.SLASH + themeDisplay.getPathContext() +
409 FreeMarkerTemplateLoader.SERVLET_SEPARATOR +
410 "/html/themes/_unstyled/templates/init.ftl");
411
412
414 freeMarkerContext.put(
415 "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
416 }
417
418
420 String tilesTitle = _insertTilesVariables(
421 freeMarkerContext, request, "tilesTitle", "title");
422 String tilesContent = _insertTilesVariables(
423 freeMarkerContext, request, "tilesContent", "content");
424 boolean tilesSelectable = GetterUtil.getBoolean(_insertTilesVariables(
425 freeMarkerContext, request, "tilesSelectable", "selectable"));
426
427 if (themeDisplay != null) {
428 themeDisplay.setTilesTitle(tilesTitle);
429 themeDisplay.setTilesContent(tilesContent);
430 themeDisplay.setTilesSelectable(tilesSelectable);
431 }
432
433
435 if (request.getAttribute(WebKeys.PAGE_TITLE) != null) {
436 freeMarkerContext.put(
437 "pageTitle", request.getAttribute(WebKeys.PAGE_TITLE));
438 }
439
440 if (request.getAttribute(WebKeys.PAGE_SUBTITLE) != null) {
441 freeMarkerContext.put(
442 "pageSubtitle", request.getAttribute(WebKeys.PAGE_SUBTITLE));
443 }
444
445
447 Map<String, Object> ftlVariables =
448 (Map<String, Object>)request.getAttribute(WebKeys.FTL_VARIABLES);
449
450 if (ftlVariables != null) {
451 for (Map.Entry<String, Object> entry : ftlVariables.entrySet()) {
452 String key = entry.getKey();
453 Object value = entry.getValue();
454
455 if (Validator.isNotNull(key)) {
456 freeMarkerContext.put(key, value);
457 }
458 }
459 }
460 }
461
462 private static void _insertHelperUtility(
463 FreeMarkerContext freeMarkerContext, String[] restrictedVariables,
464 String key, Object value) {
465
466 if (!ArrayUtil.contains(restrictedVariables, key)) {
467 freeMarkerContext.put(key, value);
468 }
469 }
470
471 private static String _insertTilesVariables(
472 FreeMarkerContext freeMarkerContext, HttpServletRequest request,
473 String attributeId, String attributeName) {
474
475 ComponentContext componentContext =
476 (ComponentContext)request.getAttribute(
477 ComponentConstants.COMPONENT_CONTEXT);
478
479 String value = null;
480
481 if (componentContext != null) {
482 value = (String)componentContext.getAttribute(attributeName);
483
484 if (value != null) {
485 freeMarkerContext.put(attributeId, value);
486 }
487 }
488
489 return value;
490 }
491
492 }