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