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