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