2 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
\r
4 * This library is free software; you can redistribute it and/or modify it under
\r
5 * the terms of the GNU Lesser General Public License as published by the Free
\r
6 * Software Foundation; either version 2.1 of the License, or (at your option)
\r
9 * This library is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
\r
15 package com.liferay.portal.util;
\r
17 import java.io.IOException;
\r
18 import java.io.Serializable;
\r
19 import java.lang.reflect.Method;
\r
20 import java.net.InetAddress;
\r
21 import java.net.UnknownHostException;
\r
22 import java.util.ArrayList;
\r
23 import java.util.Arrays;
\r
24 import java.util.Calendar;
\r
25 import java.util.Collection;
\r
26 import java.util.Collections;
\r
27 import java.util.Date;
\r
28 import java.util.Enumeration;
\r
29 import java.util.HashMap;
\r
30 import java.util.HashSet;
\r
31 import java.util.Iterator;
\r
32 import java.util.List;
\r
33 import java.util.Locale;
\r
34 import java.util.Map;
\r
35 import java.util.Properties;
\r
36 import java.util.ResourceBundle;
\r
37 import java.util.Set;
\r
38 import java.util.TimeZone;
\r
39 import java.util.TreeSet;
\r
40 import java.util.concurrent.ConcurrentHashMap;
\r
41 import java.util.concurrent.atomic.AtomicInteger;
\r
42 import java.util.regex.Matcher;
\r
43 import java.util.regex.Pattern;
\r
45 import javax.portlet.ActionRequest;
\r
46 import javax.portlet.ActionResponse;
\r
47 import javax.portlet.PortletConfig;
\r
48 import javax.portlet.PortletMode;
\r
49 import javax.portlet.PortletPreferences;
\r
50 import javax.portlet.PortletRequest;
\r
51 import javax.portlet.PortletResponse;
\r
52 import javax.portlet.PortletURL;
\r
53 import javax.portlet.PreferencesValidator;
\r
54 import javax.portlet.RenderRequest;
\r
55 import javax.portlet.RenderResponse;
\r
56 import javax.portlet.ValidatorException;
\r
57 import javax.portlet.WindowState;
\r
58 import javax.servlet.RequestDispatcher;
\r
59 import javax.servlet.ServletContext;
\r
60 import javax.servlet.ServletException;
\r
61 import javax.servlet.http.HttpServletRequest;
\r
62 import javax.servlet.http.HttpServletRequestWrapper;
\r
63 import javax.servlet.http.HttpServletResponse;
\r
64 import javax.servlet.http.HttpSession;
\r
65 import javax.servlet.jsp.PageContext;
\r
67 import org.apache.struts.Globals;
\r
69 import com.liferay.portal.NoSuchCompanyException;
\r
70 import com.liferay.portal.NoSuchImageException;
\r
71 import com.liferay.portal.NoSuchLayoutException;
\r
72 import com.liferay.portal.NoSuchResourceException;
\r
73 import com.liferay.portal.NoSuchUserException;
\r
74 import com.liferay.portal.cluster.ClusterInvokeThreadLocal;
\r
75 import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
\r
76 import com.liferay.portal.kernel.cluster.ClusterExecutorUtil;
\r
77 import com.liferay.portal.kernel.cluster.ClusterRequest;
\r
78 import com.liferay.portal.kernel.dao.db.DB;
\r
79 import com.liferay.portal.kernel.dao.db.DBFactoryUtil;
\r
80 import com.liferay.portal.kernel.exception.PortalException;
\r
81 import com.liferay.portal.kernel.exception.SystemException;
\r
82 import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
\r
83 import com.liferay.portal.kernel.language.LanguageUtil;
\r
84 import com.liferay.portal.kernel.log.Log;
\r
85 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
86 import com.liferay.portal.kernel.portlet.FriendlyURLMapper;
\r
87 import com.liferay.portal.kernel.portlet.FriendlyURLMapperThreadLocal;
\r
88 import com.liferay.portal.kernel.portlet.LiferayPortletMode;
\r
89 import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
\r
90 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
\r
91 import com.liferay.portal.kernel.portlet.LiferayWindowState;
\r
92 import com.liferay.portal.kernel.portlet.PortletBag;
\r
93 import com.liferay.portal.kernel.portlet.PortletBagPool;
\r
94 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
\r
95 import com.liferay.portal.kernel.servlet.DirectRequestDispatcherFactoryUtil;
\r
96 import com.liferay.portal.kernel.servlet.DynamicServletRequest;
\r
97 import com.liferay.portal.kernel.servlet.FileTimestampUtil;
\r
98 import com.liferay.portal.kernel.servlet.HttpHeaders;
\r
99 import com.liferay.portal.kernel.servlet.HttpMethods;
\r
100 import com.liferay.portal.kernel.servlet.NonSerializableObjectRequestWrapper;
\r
101 import com.liferay.portal.kernel.servlet.PipingServletResponse;
\r
102 import com.liferay.portal.kernel.servlet.SessionErrors;
\r
103 import com.liferay.portal.kernel.servlet.StringServletResponse;
\r
104 import com.liferay.portal.kernel.servlet.taglib.ui.BreadcrumbEntry;
\r
105 import com.liferay.portal.kernel.upload.UploadPortletRequest;
\r
106 import com.liferay.portal.kernel.upload.UploadServletRequest;
\r
107 import com.liferay.portal.kernel.util.ArrayUtil;
\r
108 import com.liferay.portal.kernel.util.Base64;
\r
109 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
\r
110 import com.liferay.portal.kernel.util.CharPool;
\r
111 import com.liferay.portal.kernel.util.ContentTypes;
\r
112 import com.liferay.portal.kernel.util.ContextPathUtil;
\r
113 import com.liferay.portal.kernel.util.DeterminateKeyGenerator;
\r
114 import com.liferay.portal.kernel.util.GetterUtil;
\r
115 import com.liferay.portal.kernel.util.HtmlUtil;
\r
116 import com.liferay.portal.kernel.util.Http;
\r
117 import com.liferay.portal.kernel.util.HttpUtil;
\r
118 import com.liferay.portal.kernel.util.InheritableMap;
\r
119 import com.liferay.portal.kernel.util.JavaConstants;
\r
120 import com.liferay.portal.kernel.util.ListUtil;
\r
121 import com.liferay.portal.kernel.util.LocaleUtil;
\r
122 import com.liferay.portal.kernel.util.MethodHandler;
\r
123 import com.liferay.portal.kernel.util.MethodKey;
\r
124 import com.liferay.portal.kernel.util.ParamUtil;
\r
125 import com.liferay.portal.kernel.util.PropsKeys;
\r
126 import com.liferay.portal.kernel.util.ReleaseInfo;
\r
127 import com.liferay.portal.kernel.util.ServerDetector;
\r
128 import com.liferay.portal.kernel.util.SetUtil;
\r
129 import com.liferay.portal.kernel.util.StringBundler;
\r
130 import com.liferay.portal.kernel.util.StringComparator;
\r
131 import com.liferay.portal.kernel.util.StringPool;
\r
132 import com.liferay.portal.kernel.util.StringUtil;
\r
133 import com.liferay.portal.kernel.util.Time;
\r
134 import com.liferay.portal.kernel.util.UnicodeProperties;
\r
135 import com.liferay.portal.kernel.util.UniqueList;
\r
136 import com.liferay.portal.kernel.util.Validator;
\r
137 import com.liferay.portal.kernel.xml.QName;
\r
138 import com.liferay.portal.model.BaseModel;
\r
139 import com.liferay.portal.model.ClassName;
\r
140 import com.liferay.portal.model.ColorScheme;
\r
141 import com.liferay.portal.model.Company;
\r
142 import com.liferay.portal.model.Group;
\r
143 import com.liferay.portal.model.GroupConstants;
\r
144 import com.liferay.portal.model.Layout;
\r
145 import com.liferay.portal.model.LayoutConstants;
\r
146 import com.liferay.portal.model.LayoutSet;
\r
147 import com.liferay.portal.model.LayoutType;
\r
148 import com.liferay.portal.model.LayoutTypePortlet;
\r
149 import com.liferay.portal.model.LayoutTypePortletConstants;
\r
150 import com.liferay.portal.model.Organization;
\r
151 import com.liferay.portal.model.Portlet;
\r
152 import com.liferay.portal.model.PublicRenderParameter;
\r
153 import com.liferay.portal.model.Resource;
\r
154 import com.liferay.portal.model.ResourceCode;
\r
155 import com.liferay.portal.model.ResourceConstants;
\r
156 import com.liferay.portal.model.ResourcePermission;
\r
157 import com.liferay.portal.model.Role;
\r
158 import com.liferay.portal.model.RoleConstants;
\r
159 import com.liferay.portal.model.Theme;
\r
160 import com.liferay.portal.model.Ticket;
\r
161 import com.liferay.portal.model.TicketConstants;
\r
162 import com.liferay.portal.model.User;
\r
163 import com.liferay.portal.model.UserGroup;
\r
164 import com.liferay.portal.model.VirtualLayoutConstants;
\r
165 import com.liferay.portal.model.impl.LayoutTypePortletImpl;
\r
166 import com.liferay.portal.model.impl.VirtualLayout;
\r
167 import com.liferay.portal.plugin.PluginPackageUtil;
\r
168 import com.liferay.portal.security.auth.AuthException;
\r
169 import com.liferay.portal.security.auth.AuthTokenUtil;
\r
170 import com.liferay.portal.security.auth.CompanyThreadLocal;
\r
171 import com.liferay.portal.security.auth.PrincipalException;
\r
172 import com.liferay.portal.security.permission.ActionKeys;
\r
173 import com.liferay.portal.security.permission.PermissionChecker;
\r
174 import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
\r
175 import com.liferay.portal.security.permission.ResourceActionsUtil;
\r
176 import com.liferay.portal.service.ClassNameLocalServiceUtil;
\r
177 import com.liferay.portal.service.CompanyLocalServiceUtil;
\r
178 import com.liferay.portal.service.GroupLocalServiceUtil;
\r
179 import com.liferay.portal.service.GroupServiceUtil;
\r
180 import com.liferay.portal.service.LayoutLocalServiceUtil;
\r
181 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
\r
182 import com.liferay.portal.service.PortletLocalServiceUtil;
\r
183 import com.liferay.portal.service.ResourceCodeLocalServiceUtil;
\r
184 import com.liferay.portal.service.ResourceLocalServiceUtil;
\r
185 import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
\r
186 import com.liferay.portal.service.TicketLocalServiceUtil;
\r
187 import com.liferay.portal.service.UserLocalServiceUtil;
\r
188 import com.liferay.portal.service.UserServiceUtil;
\r
189 import com.liferay.portal.service.permission.GroupPermissionUtil;
\r
190 import com.liferay.portal.service.permission.LayoutPermissionUtil;
\r
191 import com.liferay.portal.service.permission.LayoutPrototypePermissionUtil;
\r
192 import com.liferay.portal.service.permission.LayoutSetPrototypePermissionUtil;
\r
193 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
\r
194 import com.liferay.portal.service.permission.PortletPermissionUtil;
\r
195 import com.liferay.portal.service.permission.UserPermissionUtil;
\r
196 import com.liferay.portal.servlet.filters.i18n.I18nFilter;
\r
197 import com.liferay.portal.servlet.filters.secure.NonceUtil;
\r
198 import com.liferay.portal.struts.StrutsUtil;
\r
199 import com.liferay.portal.theme.ThemeDisplay;
\r
200 import com.liferay.portal.upload.UploadPortletRequestImpl;
\r
201 import com.liferay.portal.upload.UploadServletRequestImpl;
\r
202 import com.liferay.portal.util.comparator.PortletControlPanelWeightComparator;
\r
203 import com.liferay.portal.webserver.WebServerServlet;
\r
204 import com.liferay.portlet.ActionResponseImpl;
\r
205 import com.liferay.portlet.ControlPanelEntry;
\r
206 import com.liferay.portlet.DefaultControlPanelEntryFactory;
\r
207 import com.liferay.portlet.PortletConfigFactoryUtil;
\r
208 import com.liferay.portlet.PortletConfigImpl;
\r
209 import com.liferay.portlet.PortletContextImpl;
\r
210 import com.liferay.portlet.PortletPreferencesFactoryUtil;
\r
211 import com.liferay.portlet.PortletPreferencesImpl;
\r
212 import com.liferay.portlet.PortletPreferencesThreadLocal;
\r
213 import com.liferay.portlet.PortletPreferencesWrapper;
\r
214 import com.liferay.portlet.PortletQNameUtil;
\r
215 import com.liferay.portlet.PortletRequestImpl;
\r
216 import com.liferay.portlet.PortletResponseImpl;
\r
217 import com.liferay.portlet.PortletURLFactoryUtil;
\r
218 import com.liferay.portlet.PortletURLImpl;
\r
219 import com.liferay.portlet.RenderRequestImpl;
\r
220 import com.liferay.portlet.RenderResponseImpl;
\r
221 import com.liferay.portlet.StateAwareResponseImpl;
\r
222 import com.liferay.portlet.UserAttributes;
\r
223 import com.liferay.portlet.admin.util.OmniadminUtil;
\r
224 import com.liferay.portlet.asset.model.AssetTag;
\r
225 import com.liferay.portlet.asset.service.AssetTagLocalServiceUtil;
\r
226 import com.liferay.portlet.blogs.model.BlogsEntry;
\r
227 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
\r
228 import com.liferay.portlet.calendar.model.CalEvent;
\r
229 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
\r
230 import com.liferay.portlet.expando.ValueDataException;
\r
231 import com.liferay.portlet.expando.model.ExpandoBridge;
\r
232 import com.liferay.portlet.expando.model.ExpandoColumnConstants;
\r
233 import com.liferay.portlet.journal.asset.JournalArticleAssetRendererFactory;
\r
234 import com.liferay.portlet.journal.model.JournalArticle;
\r
235 import com.liferay.portlet.journal.model.JournalArticleConstants;
\r
236 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
\r
237 import com.liferay.portlet.login.util.LoginUtil;
\r
238 import com.liferay.portlet.messageboards.model.MBMessage;
\r
239 import com.liferay.portlet.messageboards.model.MBThread;
\r
240 import com.liferay.portlet.social.model.SocialRelationConstants;
\r
241 import com.liferay.portlet.social.util.FacebookUtil;
\r
242 import com.liferay.portlet.wiki.model.WikiPage;
\r
243 import com.liferay.util.CookieUtil;
\r
244 import com.liferay.util.Encryptor;
\r
245 import com.liferay.util.JS;
\r
246 import com.liferay.util.PwdGenerator;
\r
247 import com.pentila.entSavoie.userProperties.service.UserMatchingLocalServiceUtil;
\r
250 * @author Brian Wing Shun Chan
\r
251 * @author Brian Myunghun Kim
\r
252 * @author Jorge Ferrer
\r
253 * @author Raymond Augé
\r
254 * @author Eduardo Lundgren
\r
255 * @author Wesley Gong
\r
256 * @author Hugo Huijser
\r
257 * @author Juan Fernández
\r
259 public class PortalImpl implements Portal {
\r
261 public PortalImpl() {
\r
265 _computerName = System.getProperty("env.COMPUTERNAME");
\r
267 if (Validator.isNull(_computerName)) {
\r
268 _computerName = System.getProperty("env.HOST");
\r
271 if (Validator.isNull(_computerName)) {
\r
272 _computerName = System.getProperty("env.HOSTNAME");
\r
275 if (Validator.isNull(_computerName)) {
\r
277 _computerName = InetAddress.getLocalHost().getHostName();
\r
279 catch (UnknownHostException uhe) {
\r
284 _computerAddress = InetAddress.getByName(
\r
285 _computerName).getHostAddress();
\r
287 catch (UnknownHostException uhe) {
\r
290 if (Validator.isNull(_computerAddress)) {
\r
292 _computerAddress = InetAddress.getLocalHost().getHostAddress();
\r
294 catch (UnknownHostException uhe) {
\r
300 _pathProxy = PropsValues.PORTAL_PROXY_PATH;
\r
302 _pathContext = ContextPathUtil.getContextPath(PropsValues.PORTAL_CTX);
\r
303 _pathContext = _pathProxy.concat(_pathContext);
\r
305 _pathFriendlyURLPrivateGroup =
\r
306 _pathContext + _PRIVATE_GROUP_SERVLET_MAPPING;
\r
307 _pathFriendlyURLPrivateUser =
\r
308 _pathContext + _PRIVATE_USER_SERVLET_MAPPING;
\r
309 _pathFriendlyURLPublic = _pathContext + _PUBLIC_GROUP_SERVLET_MAPPING;
\r
310 _pathImage = _pathContext + PATH_IMAGE;
\r
311 _pathMain = _pathContext + PATH_MAIN;
\r
315 String[] customSystemGroups = PropsUtil.getArray(
\r
316 PropsKeys.SYSTEM_GROUPS);
\r
318 if ((customSystemGroups == null) || (customSystemGroups.length == 0)) {
\r
319 _allSystemGroups = GroupConstants.SYSTEM_GROUPS;
\r
322 _allSystemGroups = ArrayUtil.append(
\r
323 GroupConstants.SYSTEM_GROUPS, customSystemGroups);
\r
326 _sortedSystemGroups = new String[_allSystemGroups.length];
\r
329 _allSystemGroups, 0, _sortedSystemGroups, 0,
\r
330 _allSystemGroups.length);
\r
332 Arrays.sort(_sortedSystemGroups, new StringComparator());
\r
336 String[] customSystemRoles = PropsUtil.getArray(PropsKeys.SYSTEM_ROLES);
\r
338 if ((customSystemRoles == null) || (customSystemRoles.length == 0)) {
\r
339 _allSystemRoles = RoleConstants.SYSTEM_ROLES;
\r
342 _allSystemRoles = ArrayUtil.append(
\r
343 RoleConstants.SYSTEM_ROLES, customSystemRoles);
\r
346 _sortedSystemRoles = new String[_allSystemRoles.length];
\r
349 _allSystemRoles, 0, _sortedSystemRoles, 0, _allSystemRoles.length);
\r
351 Arrays.sort(_sortedSystemRoles, new StringComparator());
\r
353 // Organization roles
\r
355 String[] customSystemOrganizationRoles = PropsUtil.getArray(
\r
356 PropsKeys.SYSTEM_ORGANIZATION_ROLES);
\r
358 if ((customSystemOrganizationRoles == null) ||
\r
359 (customSystemOrganizationRoles.length == 0)) {
\r
361 _allSystemOrganizationRoles =
\r
362 RoleConstants.SYSTEM_ORGANIZATION_ROLES;
\r
365 _allSystemOrganizationRoles = ArrayUtil.append(
\r
366 RoleConstants.SYSTEM_ORGANIZATION_ROLES,
\r
367 customSystemOrganizationRoles);
\r
370 _sortedSystemOrganizationRoles =
\r
371 new String[_allSystemOrganizationRoles.length];
\r
374 _allSystemOrganizationRoles, 0, _sortedSystemOrganizationRoles, 0,
\r
375 _allSystemOrganizationRoles.length);
\r
377 Arrays.sort(_sortedSystemOrganizationRoles, new StringComparator());
\r
381 String[] customSystemSiteRoles = PropsUtil.getArray(
\r
382 PropsKeys.SYSTEM_SITE_ROLES);
\r
384 if ((customSystemSiteRoles == null) ||
\r
385 (customSystemSiteRoles.length == 0)) {
\r
387 _allSystemSiteRoles = RoleConstants.SYSTEM_SITE_ROLES;
\r
390 _allSystemSiteRoles = ArrayUtil.append(
\r
391 RoleConstants.SYSTEM_SITE_ROLES, customSystemSiteRoles);
\r
394 _sortedSystemSiteRoles = new String[_allSystemSiteRoles.length];
\r
397 _allSystemSiteRoles, 0, _sortedSystemSiteRoles, 0,
\r
398 _allSystemSiteRoles.length);
\r
400 Arrays.sort(_sortedSystemSiteRoles, new StringComparator());
\r
402 // Authentication token ignore actions and tokens
\r
404 _authTokenIgnoreActions = SetUtil.fromArray(
\r
405 PropsValues.AUTH_TOKEN_IGNORE_ACTIONS);
\r
406 _authTokenIgnorePortlets = SetUtil.fromArray(
\r
407 PropsValues.AUTH_TOKEN_IGNORE_PORTLETS);
\r
409 // Portlet add default resource check white list
\r
411 resetPortletAddDefaultResourceCheckWhitelist();
\r
412 resetPortletAddDefaultResourceCheckWhitelistActions();
\r
414 // Reserved parameter names
\r
416 _reservedParams = new HashSet<String>();
\r
418 // Portal authentication
\r
420 _reservedParams.add("p_auth");
\r
421 _reservedParams.add("p_auth_secret");
\r
425 _reservedParams.add("p_l_id");
\r
426 _reservedParams.add("p_l_reset");
\r
430 _reservedParams.add("p_p_auth");
\r
431 _reservedParams.add("p_p_id");
\r
432 _reservedParams.add("p_p_i_id");
\r
433 _reservedParams.add("p_p_lifecycle");
\r
434 _reservedParams.add("p_p_url_type");
\r
435 _reservedParams.add("p_p_state");
\r
436 _reservedParams.add("p_p_state_rcv"); // LPS-14144
\r
437 _reservedParams.add("p_p_mode");
\r
438 _reservedParams.add("p_p_resource_id");
\r
439 _reservedParams.add("p_p_cacheability");
\r
440 _reservedParams.add("p_p_width");
\r
441 _reservedParams.add("p_p_col_id");
\r
442 _reservedParams.add("p_p_col_pos");
\r
443 _reservedParams.add("p_p_col_count");
\r
444 _reservedParams.add("p_p_static");
\r
445 _reservedParams.add("p_p_isolated");
\r
449 _reservedParams.add("p_t_lifecycle"); // LPS-14383
\r
451 // Portal virtual layout
\r
453 _reservedParams.add("p_v_l_s_g_id"); // LPS-23010
\r
455 // Portal outer portlet
\r
457 _reservedParams.add("p_o_p_id"); // LPS-12097
\r
461 _reservedParams.add("p_f_id");
\r
463 // Portal journal article
\r
465 _reservedParams.add("p_j_a_id"); // LPS-16418
\r
469 _reservedParams.add("saveLastPath");
\r
470 _reservedParams.add("scroll");
\r
473 public void addPageDescription(
\r
474 String description, HttpServletRequest request) {
\r
476 String requestDescription = (String)request.getAttribute(
\r
477 WebKeys.PAGE_DESCRIPTION);
\r
479 if (requestDescription != null) {
\r
480 description = requestDescription + StringPool.SPACE + description;
\r
483 request.setAttribute(WebKeys.PAGE_DESCRIPTION, description);
\r
486 public void addPageKeywords(String keywords, HttpServletRequest request) {
\r
487 List<String> requestKeywords = (List<String>)request.getAttribute(
\r
488 WebKeys.PAGE_KEYWORDS);
\r
490 if (requestKeywords == null) {
\r
491 requestKeywords = new UniqueList<String>();
\r
494 String[] keywordsArray = StringUtil.split(keywords);
\r
496 for (String keyword : keywordsArray) {
\r
497 if (!requestKeywords.contains(keyword.toLowerCase())) {
\r
498 requestKeywords.add(keyword.toLowerCase());
\r
502 request.setAttribute(WebKeys.PAGE_KEYWORDS, requestKeywords);
\r
505 public void addPageSubtitle(String subtitle, HttpServletRequest request) {
\r
506 String requestSubtitle = (String)request.getAttribute(
\r
507 WebKeys.PAGE_SUBTITLE);
\r
509 if (requestSubtitle != null) {
\r
510 subtitle = requestSubtitle + StringPool.SPACE + subtitle;
\r
513 request.setAttribute(WebKeys.PAGE_SUBTITLE, subtitle);
\r
516 public void addPageTitle(String title, HttpServletRequest request) {
\r
517 String requestTitle = (String)request.getAttribute(WebKeys.PAGE_TITLE);
\r
519 if (requestTitle != null) {
\r
520 title = requestTitle + StringPool.SPACE + title;
\r
523 request.setAttribute(WebKeys.PAGE_TITLE, title);
\r
526 public void addPortalPortEventListener(
\r
527 PortalPortEventListener portalPortEventListener) {
\r
529 if (!_portalPortEventListeners.contains(portalPortEventListener)) {
\r
530 _portalPortEventListeners.add(portalPortEventListener);
\r
534 public void addPortletBreadcrumbEntry(
\r
535 HttpServletRequest request, String title, String url) {
\r
537 addPortletBreadcrumbEntry(request, title, url, null);
\r
540 public void addPortletBreadcrumbEntry(
\r
541 HttpServletRequest request, String title, String url,
\r
542 Map<String, Object> data) {
\r
544 List<BreadcrumbEntry> breadcrumbEntries =
\r
545 (List<BreadcrumbEntry>)request.getAttribute(
\r
546 WebKeys.PORTLET_BREADCRUMBS);
\r
548 if (breadcrumbEntries == null) {
\r
549 breadcrumbEntries = new ArrayList<BreadcrumbEntry>();
\r
551 request.setAttribute(
\r
552 WebKeys.PORTLET_BREADCRUMBS, breadcrumbEntries);
\r
555 BreadcrumbEntry breadcrumbEntry = new BreadcrumbEntry();
\r
557 breadcrumbEntry.setData(data);
\r
558 breadcrumbEntry.setTitle(title);
\r
559 breadcrumbEntry.setURL(url);
\r
561 breadcrumbEntries.add(breadcrumbEntry);
\r
564 public void addPortletDefaultResource(
\r
565 HttpServletRequest request, Portlet portlet)
\r
566 throws PortalException, SystemException {
\r
568 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
569 WebKeys.THEME_DISPLAY);
\r
571 Layout layout = themeDisplay.getLayout();
\r
575 if (layout.isTypeControlPanel()) {
\r
576 groupId = themeDisplay.getScopeGroupId();
\r
579 groupId = getScopeGroupId(layout, portlet.getPortletId());
\r
582 addDefaultResource(
\r
583 themeDisplay.getCompanyId(), groupId, layout, portlet, true);
\r
584 addDefaultResource(
\r
585 themeDisplay.getCompanyId(), groupId, layout, portlet, false);
\r
588 public void addPortletDefaultResource(
\r
589 long companyId, Layout layout, Portlet portlet)
\r
590 throws PortalException, SystemException {
\r
592 addDefaultResource(companyId, layout, portlet, true);
\r
593 addDefaultResource(companyId, layout, portlet, false);
\r
596 public String addPreservedParameters(
\r
597 ThemeDisplay themeDisplay, Layout layout, String url,
\r
598 boolean doAsUser) {
\r
601 if (Validator.isNotNull(themeDisplay.getDoAsUserId())) {
\r
602 url = HttpUtil.addParameter(
\r
603 url, "doAsUserId", themeDisplay.getDoAsUserId());
\r
606 if (Validator.isNotNull(themeDisplay.getDoAsUserLanguageId())) {
\r
607 url = HttpUtil.addParameter(
\r
608 url, "doAsUserLanguageId",
\r
609 themeDisplay.getDoAsUserLanguageId());
\r
613 if (layout.isTypeControlPanel()) {
\r
614 if (themeDisplay.getDoAsGroupId() > 0) {
\r
615 url = HttpUtil.addParameter(
\r
616 url, "doAsGroupId", themeDisplay.getDoAsGroupId());
\r
619 if (themeDisplay.getRefererPlid() != LayoutConstants.DEFAULT_PLID) {
\r
620 url = HttpUtil.addParameter(
\r
621 url, "refererPlid", themeDisplay.getRefererPlid());
\r
624 if (Validator.isNotNull(themeDisplay.getControlPanelCategory())) {
\r
625 url = HttpUtil.addParameter(
\r
626 url, "controlPanelCategory",
\r
627 themeDisplay.getControlPanelCategory());
\r
634 public String addPreservedParameters(
\r
635 ThemeDisplay themeDisplay, String url) {
\r
637 return addPreservedParameters(
\r
638 themeDisplay, themeDisplay.getLayout(), url, true);
\r
641 public void clearRequestParameters(RenderRequest renderRequest) {
\r
642 RenderRequestImpl renderRequestImpl = (RenderRequestImpl)renderRequest;
\r
644 if (renderRequestImpl.isTriggeredByActionURL()) {
\r
645 Map<String, String[]> renderParameters =
\r
646 renderRequestImpl.getRenderParameters();
\r
648 renderParameters.clear();
\r
652 public void copyRequestParameters(
\r
653 ActionRequest actionRequest, ActionResponse actionResponse) {
\r
655 if (actionResponse instanceof StateAwareResponseImpl) {
\r
656 StateAwareResponseImpl stateAwareResponseImpl =
\r
657 (StateAwareResponseImpl)actionResponse;
\r
659 if (stateAwareResponseImpl.getRedirectLocation() != null) {
\r
660 if (_log.isDebugEnabled()) {
\r
662 "Cannot copy parameters on a redirected " +
\r
663 "StateAwareResponseImpl");
\r
670 ActionResponseImpl actionResponseImpl =
\r
671 (ActionResponseImpl)actionResponse;
\r
673 Map<String, String[]> renderParameters =
\r
674 actionResponseImpl.getRenderParameterMap();
\r
676 actionResponse.setRenderParameter("p_p_lifecycle", "1");
\r
678 Enumeration<String> enu = actionRequest.getParameterNames();
\r
680 while (enu.hasMoreElements()) {
\r
681 String param = enu.nextElement();
\r
682 String[] values = actionRequest.getParameterValues(param);
\r
684 if (renderParameters.get(
\r
685 actionResponseImpl.getNamespace() + param) == null) {
\r
687 actionResponse.setRenderParameter(param, values);
\r
692 public String escapeRedirect(String url) {
\r
693 if (Validator.isNull(url) || !HttpUtil.hasDomain(url)) {
\r
697 String domain = HttpUtil.getDomain(url);
\r
701 if ((pos = domain.indexOf(CharPool.COLON)) != -1) {
\r
702 domain = domain.substring(0, pos);
\r
706 Company company = CompanyLocalServiceUtil.fetchCompanyByVirtualHost(
\r
709 if (company != null) {
\r
713 catch (Exception e) {
\r
717 LayoutSet layoutSet = LayoutSetLocalServiceUtil.fetchLayoutSet(
\r
720 if (layoutSet != null) {
\r
724 catch (Exception e) {
\r
728 String securityMode = PropsValues.REDIRECT_URL_SECURITY_MODE;
\r
730 if (securityMode.equals("domain")) {
\r
731 String[] allowedDomains =
\r
732 PropsValues.REDIRECT_URL_DOMAINS_ALLOWED;
\r
734 if ((allowedDomains.length > 0) &&
\r
735 !ArrayUtil.contains(allowedDomains, domain)) {
\r
737 if (_log.isDebugEnabled()) {
\r
738 _log.debug("Redirect URL " + url + " is not allowed");
\r
744 else if (securityMode.equals("ip")) {
\r
745 String[] allowedIps = PropsValues.REDIRECT_URL_IPS_ALLOWED;
\r
747 InetAddress inetAddress = InetAddress.getByName(domain);
\r
749 if ((allowedIps.length > 0) &&
\r
750 !ArrayUtil.contains(
\r
751 allowedIps, inetAddress.getHostAddress())) {
\r
753 String serverIp = getComputerAddress();
\r
755 if (!serverIp.equals(inetAddress.getHostAddress()) ||
\r
756 !ArrayUtil.contains(allowedIps, "SERVER_IP")) {
\r
758 if (_log.isDebugEnabled()) {
\r
760 "Redirect URL " + url + " is not allowed");
\r
768 catch (UnknownHostException uhe) {
\r
769 if (_log.isDebugEnabled()) {
\r
770 _log.debug("Unable to determine IP for redirect URL " + url);
\r
779 public String generateRandomKey(HttpServletRequest request, String input) {
\r
780 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
781 WebKeys.THEME_DISPLAY);
\r
783 if (themeDisplay.isLifecycleResource() ||
\r
784 themeDisplay.isStateExclusive() || themeDisplay.isAjax()) {
\r
786 return PwdGenerator.getPassword(PwdGenerator.KEY3, 4);
\r
789 return DeterminateKeyGenerator.generate(input);
\r
793 public String getActualURL(
\r
794 long groupId, boolean privateLayout, String mainPath,
\r
795 String friendlyURL, Map<String, String[]> params,
\r
796 Map<String, Object> requestContext)
\r
797 throws PortalException, SystemException {
\r
799 String actualURL = null;
\r
801 if (friendlyURL != null) {
\r
802 if (friendlyURL.startsWith(
\r
803 JournalArticleConstants.CANONICAL_URL_SEPARATOR)) {
\r
806 actualURL = getJournalArticleActualURL(
\r
807 groupId, mainPath, friendlyURL, params, requestContext);
\r
809 catch (Exception e) {
\r
810 friendlyURL = null;
\r
813 else if (friendlyURL.startsWith(
\r
814 VirtualLayoutConstants.CANONICAL_URL_SEPARATOR)) {
\r
817 actualURL = getVirtualLayoutActualURL(
\r
818 groupId, privateLayout, mainPath, friendlyURL, params,
\r
821 catch (Exception e) {
\r
822 friendlyURL = null;
\r
827 if (actualURL == null) {
\r
828 actualURL = getLayoutActualURL(
\r
829 groupId, privateLayout, mainPath, friendlyURL, params,
\r
836 public Locale[] getAlternateLocales(HttpServletRequest request)
\r
837 throws PortalException, SystemException {
\r
839 Locale[] availableLocales = LanguageUtil.getAvailableLocales();
\r
841 long mainJournalArticleId = ParamUtil.getLong(request, "p_j_a_id");
\r
843 if (mainJournalArticleId > 0) {
\r
844 JournalArticle mainJournalArticle =
\r
845 JournalArticleLocalServiceUtil.getJournalArticle(
\r
846 mainJournalArticleId);
\r
848 if (mainJournalArticle != null) {
\r
849 String[] articleLocales =
\r
850 mainJournalArticle.getAvailableLocales();
\r
852 if (articleLocales.length > 1) {
\r
853 Locale[] alternateLocales = new Locale[
\r
854 availableLocales.length - articleLocales.length];
\r
858 for (Locale locale : availableLocales) {
\r
859 if (!ArrayUtil.contains(
\r
860 articleLocales, LocaleUtil.toLanguageId(locale))) {
\r
862 alternateLocales[i] = locale;
\r
868 return alternateLocales;
\r
873 return availableLocales;
\r
877 * @deprecated {@link #getAlternateURL(String, ThemeDisplay, Locale)}
\r
879 public String getAlternateURL(
\r
880 HttpServletRequest request, String canonicalURL, Locale locale) {
\r
882 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
883 WebKeys.THEME_DISPLAY);
\r
885 return getAlternateURL(canonicalURL, themeDisplay, locale);
\r
888 public String getAlternateURL(
\r
889 String canonicalURL, ThemeDisplay themeDisplay, Locale locale) {
\r
891 LayoutSet layoutSet = themeDisplay.getLayoutSet();
\r
893 String virtualHost = null;
\r
895 if (Validator.isNotNull(layoutSet.getVirtualHostname())) {
\r
896 virtualHost = layoutSet.getVirtualHostname();
\r
899 Company company = themeDisplay.getCompany();
\r
901 virtualHost = company.getVirtualHostname();
\r
904 String i18nPath = buildI18NPath(locale);
\r
906 if (Validator.isNull(virtualHost)) {
\r
907 return canonicalURL.replaceFirst(
\r
908 _PUBLIC_GROUP_SERVLET_MAPPING,
\r
909 i18nPath.concat(_PUBLIC_GROUP_SERVLET_MAPPING));
\r
912 // www.liferay.com:8080/page to www.liferay.com:8080/es/page
\r
914 int pos = canonicalURL.indexOf(virtualHost);
\r
917 pos += virtualHost.length();
\r
919 pos = canonicalURL.indexOf(CharPool.SLASH, pos);
\r
921 if ((pos > 0) && (pos < canonicalURL.length())) {
\r
922 return canonicalURL.substring(0, pos).concat(
\r
923 i18nPath).concat(canonicalURL.substring(pos));
\r
927 return canonicalURL.concat(i18nPath);
\r
930 public Set<String> getAuthTokenIgnoreActions() {
\r
931 return _authTokenIgnoreActions;
\r
934 public Set<String> getAuthTokenIgnorePortlets() {
\r
935 return _authTokenIgnorePortlets;
\r
938 public BaseModel<?> getBaseModel(Resource resource)
\r
939 throws PortalException, SystemException {
\r
941 ResourceCode resourceCode =
\r
942 ResourceCodeLocalServiceUtil.getResourceCode(resource.getCodeId());
\r
944 String modelName = resourceCode.getName();
\r
945 String primKey = resource.getPrimKey();
\r
947 return getBaseModel(modelName, primKey);
\r
950 public BaseModel<?> getBaseModel(ResourcePermission resourcePermission)
\r
951 throws PortalException, SystemException {
\r
953 String modelName = resourcePermission.getName();
\r
954 String primKey = resourcePermission.getPrimKey();
\r
956 return getBaseModel(modelName, primKey);
\r
959 public BaseModel<?> getBaseModel(String modelName, String primKey)
\r
960 throws PortalException, SystemException {
\r
962 if (!modelName.contains(".model.")) {
\r
966 String[] parts = StringUtil.split(modelName, CharPool.PERIOD);
\r
968 if ((parts.length <= 2) || !parts[parts.length - 2].equals("model")) {
\r
972 parts[parts.length - 2] = "service";
\r
974 String serviceName =
\r
975 StringUtil.merge(parts, StringPool.PERIOD) + "LocalServiceUtil";
\r
976 String methodName = "get" + parts[parts.length - 1];
\r
978 Method method = null;
\r
981 Class<?> serviceUtil = Class.forName(serviceName);
\r
983 if (Validator.isNumber(primKey)) {
\r
984 method = serviceUtil.getMethod(
\r
985 methodName, new Class[] {Long.TYPE});
\r
987 return (BaseModel<?>)method.invoke(null, new Long(primKey));
\r
990 method = serviceUtil.getMethod(
\r
991 methodName, new Class[] {String.class});
\r
993 return (BaseModel<?>)method.invoke(null, primKey);
\r
996 catch (Exception e) {
\r
997 Throwable cause = e.getCause();
\r
999 if (cause instanceof PortalException) {
\r
1000 throw (PortalException)cause;
\r
1002 else if (cause instanceof SystemException) {
\r
1003 throw (SystemException)cause;
\r
1006 throw new SystemException(cause);
\r
1011 public long getBasicAuthUserId(HttpServletRequest request)
\r
1012 throws PortalException, SystemException {
\r
1014 long companyId = PortalInstances.getCompanyId(request);
\r
1016 return getBasicAuthUserId(request, companyId);
\r
1019 public long getBasicAuthUserId(HttpServletRequest request, long companyId)
\r
1020 throws PortalException, SystemException {
\r
1024 String authorizationHeader = request.getHeader(
\r
1025 HttpHeaders.AUTHORIZATION);
\r
1027 if (Validator.isNull(authorizationHeader)) {
\r
1031 String[] authorizationArray = authorizationHeader.split("\\s+");
\r
1033 String authorization = authorizationArray[0];
\r
1034 String credentials = new String(Base64.decode(authorizationArray[1]));
\r
1036 if (!authorization.equalsIgnoreCase(HttpServletRequest.BASIC_AUTH)) {
\r
1040 String[] loginAndPassword = StringUtil.split(
\r
1041 credentials, CharPool.COLON);
\r
1043 String login = HttpUtil.decodeURL(loginAndPassword[0].trim());
\r
1045 String password = null;
\r
1047 if (loginAndPassword.length > 1) {
\r
1048 password = loginAndPassword[1].trim();
\r
1051 // Strip @uid and @sn for backwards compatibility
\r
1053 if (login.endsWith("@uid")) {
\r
1054 int pos = login.indexOf("@uid");
\r
1056 login = login.substring(0, pos);
\r
1058 else if (login.endsWith("@sn")) {
\r
1059 int pos = login.indexOf("@sn");
\r
1061 login = login.substring(0, pos);
\r
1065 userId = LoginUtil.getAuthenticatedUserId(
\r
1066 request, login, password, null);
\r
1068 catch (AuthException ae) {
\r
1075 * @deprecated {@link #getCanonicalURL(String, ThemeDisplay, Layout)}
\r
1077 public String getCanonicalURL(String completeURL, ThemeDisplay themeDisplay)
\r
1078 throws PortalException, SystemException {
\r
1080 Layout layout = themeDisplay.getLayout();
\r
1082 return getCanonicalURL(completeURL, themeDisplay, layout);
\r
1085 public String getCanonicalURL(
\r
1086 String completeURL, ThemeDisplay themeDisplay, Layout layout)
\r
1087 throws PortalException, SystemException {
\r
1089 completeURL = removeRedirectParameter(completeURL);
\r
1091 String parametersURL = StringPool.BLANK;
\r
1093 int pos = completeURL.indexOf(Portal.FRIENDLY_URL_SEPARATOR);
\r
1096 pos = completeURL.indexOf(StringPool.QUESTION);
\r
1099 String groupFriendlyURL = completeURL;
\r
1102 groupFriendlyURL = completeURL.substring(0, pos);
\r
1104 parametersURL = completeURL.substring(pos);
\r
1107 if (layout == null) {
\r
1108 layout = themeDisplay.getLayout();
\r
1111 String layoutFriendlyURL = StringPool.BLANK;
\r
1113 if ((groupFriendlyURL.contains(layout.getFriendlyURL()) ||
\r
1114 groupFriendlyURL.contains(
\r
1115 StringPool.SLASH + layout.getLayoutId())) &&
\r
1116 (!layout.isFirstParent() || Validator.isNotNull(parametersURL))) {
\r
1118 layoutFriendlyURL = layout.getFriendlyURL();
\r
1121 Group group = layout.getGroup();
\r
1123 groupFriendlyURL = getGroupFriendlyURL(
\r
1124 group, layout.isPrivateLayout(), themeDisplay, true);
\r
1126 return groupFriendlyURL.concat(layoutFriendlyURL).concat(parametersURL);
\r
1130 * @deprecated {@link #getCDNHost(boolean)}
\r
1132 public String getCDNHost() {
\r
1133 long companyId = CompanyThreadLocal.getCompanyId();
\r
1135 return getCDNHostHttp(companyId);
\r
1138 public String getCDNHost(boolean secure) {
\r
1139 long companyId = CompanyThreadLocal.getCompanyId();
\r
1142 return getCDNHostHttps(companyId);
\r
1145 return getCDNHostHttp(companyId);
\r
1149 public String getCDNHost(HttpServletRequest request)
\r
1150 throws PortalException, SystemException {
\r
1152 String cdnHost = null;
\r
1154 Company company = getCompany(request);
\r
1156 if (request.isSecure()) {
\r
1157 cdnHost = getCDNHostHttps(company.getCompanyId());
\r
1160 cdnHost = getCDNHostHttp(company.getCompanyId());
\r
1163 cdnHost = ParamUtil.getString(request, "cdn_host", cdnHost);
\r
1165 if (Validator.isUrl(cdnHost)) {
\r
1169 return StringPool.BLANK;
\r
1172 public String getCDNHostHttp(long companyId) {
\r
1173 String cdnHostHttp = _cdnHostHttpMap.get(companyId);
\r
1175 if (cdnHostHttp != null) {
\r
1176 return cdnHostHttp;
\r
1180 cdnHostHttp = PrefsPropsUtil.getString(
\r
1181 companyId, PropsKeys.CDN_HOST_HTTP, PropsValues.CDN_HOST_HTTP);
\r
1183 catch (Exception e) {
\r
1186 if ((cdnHostHttp == null) || cdnHostHttp.startsWith("${") ||
\r
1187 !Validator.isUrl(cdnHostHttp)) {
\r
1189 cdnHostHttp = StringPool.BLANK;
\r
1192 _cdnHostHttpMap.put(companyId, cdnHostHttp);
\r
1194 return cdnHostHttp;
\r
1197 public String getCDNHostHttps(long companyId) {
\r
1198 String cdnHostHttps = _cdnHostHttpsMap.get(companyId);
\r
1200 if (cdnHostHttps != null) {
\r
1201 return cdnHostHttps;
\r
1205 cdnHostHttps = PrefsPropsUtil.getString(
\r
1206 companyId, PropsKeys.CDN_HOST_HTTPS,
\r
1207 PropsValues.CDN_HOST_HTTPS);
\r
1209 catch (SystemException se) {
\r
1212 if ((cdnHostHttps == null) || cdnHostHttps.startsWith("${") ||
\r
1213 !Validator.isUrl(cdnHostHttps)) {
\r
1215 cdnHostHttps = StringPool.BLANK;
\r
1218 _cdnHostHttpsMap.put(companyId, cdnHostHttps);
\r
1220 return cdnHostHttps;
\r
1223 public String getClassName(long classNameId) {
\r
1225 ClassName className = ClassNameLocalServiceUtil.getClassName(
\r
1228 return className.getValue();
\r
1230 catch (Exception e) {
\r
1231 throw new RuntimeException(
\r
1232 "Unable to get class name from id " + classNameId);
\r
1236 public long getClassNameId(Class<?> clazz) {
\r
1237 return ClassNameLocalServiceUtil.getClassNameId(clazz);
\r
1240 public long getClassNameId(String value) {
\r
1241 return ClassNameLocalServiceUtil.getClassNameId(value);
\r
1244 public String getClassNamePortletId(String className) {
\r
1245 String portletId = StringPool.BLANK;
\r
1247 if (className.startsWith("com.liferay.portlet.blogs")) {
\r
1248 portletId = PortletKeys.BLOGS;
\r
1250 else if (className.startsWith("com.liferay.portlet.bookmarks")) {
\r
1251 portletId = PortletKeys.BOOKMARKS;
\r
1253 else if (className.startsWith("com.liferay.portlet.calendar")) {
\r
1254 portletId = PortletKeys.CALENDAR;
\r
1256 else if (className.startsWith("com.liferay.portlet.documentlibrary")) {
\r
1257 portletId = PortletKeys.DOCUMENT_LIBRARY;
\r
1259 else if (className.startsWith("com.liferay.portlet.imagegallery")) {
\r
1260 portletId = PortletKeys.MEDIA_GALLERY_DISPLAY;
\r
1262 else if (className.startsWith("com.liferay.portlet.journal")) {
\r
1263 portletId = PortletKeys.JOURNAL;
\r
1265 else if (className.startsWith("com.liferay.portlet.messageboards")) {
\r
1266 portletId = PortletKeys.MESSAGE_BOARDS;
\r
1268 else if (className.startsWith("com.liferay.portlet.wiki")) {
\r
1269 portletId = PortletKeys.WIKI;
\r
1275 public Company getCompany(HttpServletRequest request)
\r
1276 throws PortalException, SystemException {
\r
1278 long companyId = getCompanyId(request);
\r
1280 if (companyId <= 0) {
\r
1284 Company company = (Company)request.getAttribute(WebKeys.COMPANY);
\r
1286 if (company == null) {
\r
1291 company = CompanyLocalServiceUtil.getCompanyById(companyId);
\r
1293 catch (NoSuchCompanyException nsce) {
\r
1294 company = CompanyLocalServiceUtil.getCompanyById(
\r
1295 PortalInstances.getDefaultCompanyId());
\r
1298 request.setAttribute(WebKeys.COMPANY, company);
\r
1304 public Company getCompany(PortletRequest portletRequest)
\r
1305 throws PortalException, SystemException {
\r
1307 return getCompany(getHttpServletRequest(portletRequest));
\r
1310 public long getCompanyId(HttpServletRequest request) {
\r
1311 return PortalInstances.getCompanyId(request);
\r
1314 public long getCompanyId(PortletRequest portletRequest) {
\r
1315 return getCompanyId(getHttpServletRequest(portletRequest));
\r
1318 public long[] getCompanyIds() {
\r
1319 return PortalInstances.getCompanyIds();
\r
1322 public String getComputerAddress() {
\r
1323 return _computerAddress;
\r
1326 public String getComputerName() {
\r
1327 return _computerName;
\r
1330 public String getControlPanelCategory(
\r
1331 String portletId, ThemeDisplay themeDisplay)
\r
1332 throws SystemException {
\r
1334 for (String category : PortletCategoryKeys.ALL) {
\r
1335 List<Portlet> portlets = getControlPanelPortlets(
\r
1336 category, themeDisplay);
\r
1338 for (Portlet portlet : portlets) {
\r
1339 if (portlet.getPortletId().equals(portletId)) {
\r
1345 return StringPool.BLANK;
\r
1348 public String getControlPanelFullURL(
\r
1349 long scopeGroupId, String ppid, Map<String, String[]> params)
\r
1350 throws PortalException, SystemException {
\r
1352 StringBundler sb = new StringBundler(6);
\r
1354 Group group = GroupLocalServiceUtil.getGroup(scopeGroupId);
\r
1356 Company company = CompanyLocalServiceUtil.getCompany(
\r
1357 group.getCompanyId());
\r
1361 company.getVirtualHostname(), getPortalPort(false), false));
\r
1362 sb.append(getPathFriendlyURLPrivateGroup());
\r
1363 sb.append(GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
\r
1364 sb.append(PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL);
\r
1366 if (params != null) {
\r
1367 params = new HashMap<String, String[]>(params);
\r
1370 params = new HashMap<String, String[]>();
\r
1373 params.put("p_p_id", new String[] {ppid});
\r
1374 params.put("p_p_lifecycle", new String[] {"0"});
\r
1376 "p_p_state", new String[] {WindowState.MAXIMIZED.toString()});
\r
1377 params.put("p_p_mode", new String[] {PortletMode.VIEW.toString()});
\r
1379 sb.append(HttpUtil.parameterMapToString(params, true));
\r
1381 return sb.toString();
\r
1384 public Set<Portlet> getControlPanelPortlets(long companyId, String category)
\r
1385 throws SystemException {
\r
1387 Set<Portlet> portletsSet = new TreeSet<Portlet>(
\r
1388 new PortletControlPanelWeightComparator());
\r
1390 List<Portlet> portletsList = PortletLocalServiceUtil.getPortlets(
\r
1393 for (Portlet portlet : portletsList) {
\r
1394 if (category.equals(portlet.getControlPanelEntryCategory())) {
\r
1395 portletsSet.add(portlet);
\r
1399 return portletsSet;
\r
1402 public List<Portlet> getControlPanelPortlets(
\r
1403 String category, ThemeDisplay themeDisplay)
\r
1404 throws SystemException {
\r
1406 Set<Portlet> portlets = getControlPanelPortlets(
\r
1407 themeDisplay.getCompanyId(), category);
\r
1409 return filterControlPanelPortlets(portlets, category, themeDisplay);
\r
1412 public String getCreateAccountURL(
\r
1413 HttpServletRequest request, ThemeDisplay themeDisplay)
\r
1414 throws Exception {
\r
1416 if (Validator.isNull(PropsValues.COMPANY_SECURITY_STRANGERS_URL)) {
\r
1417 PortletURL createAccountURL = PortletURLFactoryUtil.create(
\r
1418 request, PortletKeys.LOGIN, themeDisplay.getPlid(),
\r
1419 PortletRequest.RENDER_PHASE);
\r
1421 createAccountURL.setWindowState(WindowState.MAXIMIZED);
\r
1422 createAccountURL.setPortletMode(PortletMode.VIEW);
\r
1424 createAccountURL.setParameter("saveLastPath", "0");
\r
1425 createAccountURL.setParameter(
\r
1426 "struts_action", "/login/create_account");
\r
1428 return createAccountURL.toString();
\r
1432 Layout layout = LayoutLocalServiceUtil.getFriendlyURLLayout(
\r
1433 themeDisplay.getScopeGroupId(), false,
\r
1434 PropsValues.COMPANY_SECURITY_STRANGERS_URL);
\r
1436 return getLayoutURL(layout, themeDisplay);
\r
1438 catch (NoSuchLayoutException nsle) {
\r
1441 return StringPool.BLANK;
\r
1444 public String getCurrentCompleteURL(HttpServletRequest request) {
\r
1445 String currentCompleteURL = (String)request.getAttribute(
\r
1446 WebKeys.CURRENT_COMPLETE_URL);
\r
1448 if (currentCompleteURL == null) {
\r
1449 currentCompleteURL = HttpUtil.getCompleteURL(request);
\r
1451 request.setAttribute(
\r
1452 WebKeys.CURRENT_COMPLETE_URL, currentCompleteURL);
\r
1455 return currentCompleteURL;
\r
1458 public String getCurrentURL(HttpServletRequest request) {
\r
1459 String currentURL = (String)request.getAttribute(WebKeys.CURRENT_URL);
\r
1461 if (currentURL != null) {
\r
1462 return currentURL;
\r
1465 currentURL = ParamUtil.getString(request, "currentURL");
\r
1467 if (Validator.isNull(currentURL)) {
\r
1468 currentURL = HttpUtil.getCompleteURL(request);
\r
1470 if (Validator.isNotNull(currentURL) &&
\r
1471 (currentURL.indexOf(_J_SECURITY_CHECK) == -1)) {
\r
1473 currentURL = currentURL.substring(
\r
1474 currentURL.indexOf(Http.PROTOCOL_DELIMITER) +
\r
1475 Http.PROTOCOL_DELIMITER.length());
\r
1477 currentURL = currentURL.substring(
\r
1478 currentURL.indexOf(CharPool.SLASH));
\r
1481 if (Validator.isNotNull(currentURL) &&
\r
1482 FacebookUtil.isFacebook(currentURL)) {
\r
1484 String[] facebookData = FacebookUtil.getFacebookData(request);
\r
1486 if (facebookData != null) {
\r
1488 FacebookUtil.FACEBOOK_APPS_URL + facebookData[0] +
\r
1494 if (Validator.isNull(currentURL)) {
\r
1495 currentURL = getPathMain();
\r
1498 request.setAttribute(WebKeys.CURRENT_URL, currentURL);
\r
1500 return currentURL;
\r
1503 public String getCurrentURL(PortletRequest portletRequest) {
\r
1504 return (String)portletRequest.getAttribute(WebKeys.CURRENT_URL);
\r
1507 public String getCustomSQLFunctionIsNotNull() {
\r
1508 return PropsValues.CUSTOM_SQL_FUNCTION_ISNOTNULL;
\r
1511 public String getCustomSQLFunctionIsNull() {
\r
1512 return PropsValues.CUSTOM_SQL_FUNCTION_ISNULL;
\r
1515 public Date getDate(int month, int day, int year) {
\r
1518 month, day, year, (Class<? extends PortalException>)null);
\r
1520 catch (PortalException pe) {
\r
1521 throw new RuntimeException();
\r
1525 public Date getDate(
\r
1526 int month, int day, int year,
\r
1527 Class<? extends PortalException> clazz)
\r
1528 throws PortalException {
\r
1530 return getDate(month, day, year, null, clazz);
\r
1533 public Date getDate(
\r
1534 int month, int day, int year, int hour, int min,
\r
1535 Class<? extends PortalException> clazz)
\r
1536 throws PortalException {
\r
1538 return getDate(month, day, year, hour, min, null, clazz);
\r
1542 * @deprecated {@link #getDate(int, int, int, int, int, Class)}
\r
1544 public Date getDate(
\r
1545 int month, int day, int year, int hour, int min, PortalException pe)
\r
1546 throws PortalException {
\r
1548 return getDate(month, day, year, hour, min, null, pe);
\r
1551 public Date getDate(
\r
1552 int month, int day, int year, int hour, int min, TimeZone timeZone,
\r
1553 Class<? extends PortalException> clazz)
\r
1554 throws PortalException {
\r
1556 if (!Validator.isGregorianDate(month, day, year)) {
\r
1557 if (clazz != null) {
\r
1559 throw clazz.newInstance();
\r
1561 catch (Exception e) {
\r
1562 throw new PortalException(e);
\r
1570 Calendar cal = null;
\r
1572 if (timeZone == null) {
\r
1573 cal = CalendarFactoryUtil.getCalendar();
\r
1576 cal = CalendarFactoryUtil.getCalendar(timeZone);
\r
1579 if ((hour == -1) || (min == -1)) {
\r
1580 cal.set(year, month, day, 0, 0, 0);
\r
1583 cal.set(year, month, day, hour, min, 0);
\r
1586 cal.set(Calendar.MILLISECOND, 0);
\r
1588 Date date = cal.getTime();
\r
1590 /*if ((timeZone != null) &&
\r
1591 cal.before(CalendarFactoryUtil.getCalendar(timeZone))) {
\r
1601 * @deprecated {@link #getDate(int, int, int, int, int, TimeZone, Class)}
\r
1603 public Date getDate(
\r
1604 int month, int day, int year, int hour, int min, TimeZone timeZone,
\r
1605 PortalException pe)
\r
1606 throws PortalException {
\r
1608 if (!Validator.isGregorianDate(month, day, year)) {
\r
1617 Calendar cal = null;
\r
1619 if (timeZone == null) {
\r
1620 cal = CalendarFactoryUtil.getCalendar();
\r
1623 cal = CalendarFactoryUtil.getCalendar(timeZone);
\r
1626 if ((hour == -1) || (min == -1)) {
\r
1627 cal.set(year, month, day, 0, 0, 0);
\r
1630 cal.set(year, month, day, hour, min, 0);
\r
1633 cal.set(Calendar.MILLISECOND, 0);
\r
1635 Date date = cal.getTime();
\r
1637 /*if ((timeZone != null) &&
\r
1638 cal.before(CalendarFactoryUtil.getCalendar(timeZone))) {
\r
1648 * @deprecated {@link #getDate(int, int, int, Class)}
\r
1650 public Date getDate(int month, int day, int year, PortalException pe)
\r
1651 throws PortalException {
\r
1653 return getDate(month, day, year, null, pe);
\r
1656 public Date getDate(
\r
1657 int month, int day, int year, TimeZone timeZone,
\r
1658 Class<? extends PortalException> clazz)
\r
1659 throws PortalException {
\r
1661 return getDate(month, day, year, -1, -1, timeZone, clazz);
\r
1665 * @deprecated {@link #getDate(int, int, int, TimeZone, Class)}
\r
1667 public Date getDate(
\r
1668 int month, int day, int year, TimeZone timeZone, PortalException pe)
\r
1669 throws PortalException {
\r
1671 return getDate(month, day, year, -1, -1, timeZone, pe);
\r
1674 public long getDefaultCompanyId() {
\r
1675 return PortalInstances.getDefaultCompanyId();
\r
1678 public long getDigestAuthUserId(HttpServletRequest request)
\r
1679 throws PortalException, SystemException {
\r
1683 String authorizationHeader = request.getHeader(
\r
1684 HttpHeaders.AUTHORIZATION);
\r
1686 if (Validator.isNull(authorizationHeader) ||
\r
1687 !authorizationHeader.startsWith("Digest ")) {
\r
1692 authorizationHeader = authorizationHeader.substring("Digest ".length());
\r
1693 authorizationHeader = StringUtil.replace(
\r
1694 authorizationHeader, CharPool.COMMA, CharPool.NEW_LINE);
\r
1696 UnicodeProperties authorizationProperties = new UnicodeProperties();
\r
1698 authorizationProperties.fastLoad(authorizationHeader);
\r
1700 String username = StringUtil.unquote(
\r
1701 authorizationProperties.getProperty("username"));
\r
1702 String realm = StringUtil.unquote(
\r
1703 authorizationProperties.getProperty("realm"));
\r
1704 String nonce = StringUtil.unquote(
\r
1705 authorizationProperties.getProperty("nonce"));
\r
1706 String uri = StringUtil.unquote(
\r
1707 authorizationProperties.getProperty("uri"));
\r
1708 String response = StringUtil.unquote(
\r
1709 authorizationProperties.getProperty("response"));
\r
1711 if (Validator.isNull(username) || Validator.isNull(realm) ||
\r
1712 Validator.isNull(nonce) || Validator.isNull(uri) ||
\r
1713 Validator.isNull(response)) {
\r
1718 if (!realm.equals(PORTAL_REALM) ||
\r
1719 !uri.equals(request.getRequestURI())) {
\r
1724 if (!NonceUtil.verify(nonce)) {
\r
1728 long companyId = PortalInstances.getCompanyId(request);
\r
1730 userId = UserLocalServiceUtil.authenticateForDigest(
\r
1731 companyId, username, realm, nonce, request.getMethod(), uri,
\r
1737 public String getEmailFromAddress(
\r
1738 PortletPreferences preferences, long companyId, String defaultValue)
\r
1739 throws SystemException {
\r
1741 if (Validator.isNull(defaultValue)) {
\r
1742 defaultValue = PrefsPropsUtil.getString(
\r
1743 companyId, PropsKeys.ADMIN_EMAIL_FROM_ADDRESS);
\r
1746 return preferences.getValue("emailFromAddress", defaultValue);
\r
1749 public String getEmailFromName(
\r
1750 PortletPreferences preferences, long companyId, String defaultValue)
\r
1751 throws SystemException {
\r
1753 if (Validator.isNull(defaultValue)) {
\r
1754 defaultValue = PrefsPropsUtil.getString(
\r
1755 companyId, PropsKeys.ADMIN_EMAIL_FROM_NAME);
\r
1758 return preferences.getValue("emailFromName", defaultValue);
\r
1761 public Map<String, Serializable> getExpandoBridgeAttributes(
\r
1762 ExpandoBridge expandoBridge, PortletRequest portletRequest)
\r
1763 throws PortalException, SystemException {
\r
1765 Map<String, Serializable> attributes =
\r
1766 new HashMap<String, Serializable>();
\r
1768 List<String> names = new ArrayList<String>();
\r
1770 Enumeration<String> enu = portletRequest.getParameterNames();
\r
1772 while (enu.hasMoreElements()) {
\r
1773 String param = enu.nextElement();
\r
1775 if (param.indexOf("ExpandoAttributeName--") != -1) {
\r
1776 String name = ParamUtil.getString(portletRequest, param);
\r
1782 for (String name : names) {
\r
1783 int type = expandoBridge.getAttributeType(name);
\r
1785 UnicodeProperties properties = expandoBridge.getAttributeProperties(
\r
1788 String displayType = GetterUtil.getString(
\r
1789 properties.getProperty(
\r
1790 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE),
\r
1791 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX);
\r
1793 Serializable value = getExpandoValue(
\r
1794 portletRequest, "ExpandoAttribute--" + name + "--", type,
\r
1797 attributes.put(name, value);
\r
1800 return attributes;
\r
1803 public Map<String, Serializable> getExpandoBridgeAttributes(
\r
1804 ExpandoBridge expandoBridge,
\r
1805 UploadPortletRequest uploadPortletRequest)
\r
1806 throws PortalException, SystemException {
\r
1808 Map<String, Serializable> attributes =
\r
1809 new HashMap<String, Serializable>();
\r
1811 List<String> names = new ArrayList<String>();
\r
1813 Enumeration<String> enu = uploadPortletRequest.getParameterNames();
\r
1815 while (enu.hasMoreElements()) {
\r
1816 String param = enu.nextElement();
\r
1818 if (param.indexOf("ExpandoAttributeName--") != -1) {
\r
1819 String name = ParamUtil.getString(uploadPortletRequest, param);
\r
1825 for (String name : names) {
\r
1826 int type = expandoBridge.getAttributeType(name);
\r
1828 UnicodeProperties properties = expandoBridge.getAttributeProperties(
\r
1831 String displayType = GetterUtil.getString(
\r
1832 properties.getProperty(
\r
1833 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE),
\r
1834 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX);
\r
1836 Serializable value = getExpandoValue(
\r
1837 uploadPortletRequest, "ExpandoAttribute--" + name + "--", type,
\r
1840 attributes.put(name, value);
\r
1843 return attributes;
\r
1846 public Serializable getExpandoValue(
\r
1847 PortletRequest portletRequest, String name, int type,
\r
1848 String displayType)
\r
1849 throws PortalException, SystemException {
\r
1851 Serializable value = null;
\r
1853 if (type == ExpandoColumnConstants.BOOLEAN) {
\r
1854 value = ParamUtil.getBoolean(portletRequest, name);
\r
1856 else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
\r
1858 else if (type == ExpandoColumnConstants.DATE) {
\r
1859 int valueDateMonth = ParamUtil.getInteger(
\r
1860 portletRequest, name + "Month");
\r
1861 int valueDateDay = ParamUtil.getInteger(
\r
1862 portletRequest, name + "Day");
\r
1863 int valueDateYear = ParamUtil.getInteger(
\r
1864 portletRequest, name + "Year");
\r
1865 int valueDateHour = ParamUtil.getInteger(
\r
1866 portletRequest, name + "Hour");
\r
1867 int valueDateMinute = ParamUtil.getInteger(
\r
1868 portletRequest, name + "Minute");
\r
1869 int valueDateAmPm = ParamUtil.getInteger(
\r
1870 portletRequest, name + "AmPm");
\r
1872 if (valueDateAmPm == Calendar.PM) {
\r
1873 valueDateHour += 12;
\r
1876 TimeZone timeZone = null;
\r
1878 User user = getUser(portletRequest);
\r
1880 if (user != null) {
\r
1881 timeZone = user.getTimeZone();
\r
1885 valueDateMonth, valueDateDay, valueDateYear, valueDateHour,
\r
1886 valueDateMinute, timeZone, ValueDataException.class);
\r
1888 else if (type == ExpandoColumnConstants.DATE_ARRAY) {
\r
1890 else if (type == ExpandoColumnConstants.DOUBLE) {
\r
1891 value = ParamUtil.getDouble(portletRequest, name);
\r
1893 else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
\r
1894 String[] values = portletRequest.getParameterValues(name);
\r
1896 if (displayType.equals(
\r
1897 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
1899 values = StringUtil.splitLines(values[0]);
\r
1902 value = GetterUtil.getDoubleValues(values);
\r
1904 else if (type == ExpandoColumnConstants.FLOAT) {
\r
1905 value = ParamUtil.getFloat(portletRequest, name);
\r
1907 else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
\r
1908 String[] values = portletRequest.getParameterValues(name);
\r
1910 if (displayType.equals(
\r
1911 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
1913 values = StringUtil.splitLines(values[0]);
\r
1916 value = GetterUtil.getFloatValues(values);
\r
1918 else if (type == ExpandoColumnConstants.INTEGER) {
\r
1919 value = ParamUtil.getInteger(portletRequest, name);
\r
1921 else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
\r
1922 String[] values = portletRequest.getParameterValues(name);
\r
1924 if (displayType.equals(
\r
1925 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
1927 values = StringUtil.splitLines(values[0]);
\r
1930 value = GetterUtil.getIntegerValues(values);
\r
1932 else if (type == ExpandoColumnConstants.LONG) {
\r
1933 value = ParamUtil.getLong(portletRequest, name);
\r
1935 else if (type == ExpandoColumnConstants.LONG_ARRAY) {
\r
1936 String[] values = portletRequest.getParameterValues(name);
\r
1938 if (displayType.equals(
\r
1939 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
1941 values = StringUtil.splitLines(values[0]);
\r
1944 value = GetterUtil.getLongValues(values);
\r
1946 else if (type == ExpandoColumnConstants.NUMBER) {
\r
1947 value = ParamUtil.getNumber(portletRequest, name);
\r
1949 else if (type == ExpandoColumnConstants.NUMBER_ARRAY) {
\r
1950 String[] values = portletRequest.getParameterValues(name);
\r
1952 if (displayType.equals(
\r
1953 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
1955 values = StringUtil.splitLines(values[0]);
\r
1958 value = GetterUtil.getNumberValues(values);
\r
1960 else if (type == ExpandoColumnConstants.SHORT) {
\r
1961 value = ParamUtil.getShort(portletRequest, name);
\r
1963 else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
\r
1964 String[] values = portletRequest.getParameterValues(name);
\r
1966 if (displayType.equals(
\r
1967 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
1969 values = StringUtil.splitLines(values[0]);
\r
1972 value = GetterUtil.getShortValues(values);
\r
1974 else if (type == ExpandoColumnConstants.STRING_ARRAY) {
\r
1975 value = portletRequest.getParameterValues(name);
\r
1978 value = ParamUtil.getString(portletRequest, name);
\r
1984 public Serializable getExpandoValue(
\r
1985 UploadPortletRequest uploadPortletRequest, String name, int type,
\r
1986 String displayType)
\r
1987 throws PortalException, SystemException {
\r
1989 Serializable value = null;
\r
1991 if (type == ExpandoColumnConstants.BOOLEAN) {
\r
1992 value = ParamUtil.getBoolean(uploadPortletRequest, name);
\r
1994 else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
\r
1996 else if (type == ExpandoColumnConstants.DATE) {
\r
1997 int valueDateMonth = ParamUtil.getInteger(
\r
1998 uploadPortletRequest, name + "Month");
\r
1999 int valueDateDay = ParamUtil.getInteger(
\r
2000 uploadPortletRequest, name + "Day");
\r
2001 int valueDateYear = ParamUtil.getInteger(
\r
2002 uploadPortletRequest, name + "Year");
\r
2003 int valueDateHour = ParamUtil.getInteger(
\r
2004 uploadPortletRequest, name + "Hour");
\r
2005 int valueDateMinute = ParamUtil.getInteger(
\r
2006 uploadPortletRequest, name + "Minute");
\r
2007 int valueDateAmPm = ParamUtil.getInteger(
\r
2008 uploadPortletRequest, name + "AmPm");
\r
2010 if (valueDateAmPm == Calendar.PM) {
\r
2011 valueDateHour += 12;
\r
2014 TimeZone timeZone = null;
\r
2016 User user = getUser(uploadPortletRequest);
\r
2018 if (user != null) {
\r
2019 timeZone = user.getTimeZone();
\r
2023 valueDateMonth, valueDateDay, valueDateYear, valueDateHour,
\r
2024 valueDateMinute, timeZone, ValueDataException.class);
\r
2026 else if (type == ExpandoColumnConstants.DATE_ARRAY) {
\r
2028 else if (type == ExpandoColumnConstants.DOUBLE) {
\r
2029 value = ParamUtil.getDouble(uploadPortletRequest, name);
\r
2031 else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
\r
2032 String[] values = uploadPortletRequest.getParameterValues(name);
\r
2034 if (displayType.equals(
\r
2035 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
2037 values = StringUtil.splitLines(values[0]);
\r
2040 value = GetterUtil.getDoubleValues(values);
\r
2042 else if (type == ExpandoColumnConstants.FLOAT) {
\r
2043 value = ParamUtil.getFloat(uploadPortletRequest, name);
\r
2045 else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
\r
2046 String[] values = uploadPortletRequest.getParameterValues(name);
\r
2048 if (displayType.equals(
\r
2049 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
2051 values = StringUtil.splitLines(values[0]);
\r
2054 value = GetterUtil.getFloatValues(values);
\r
2056 else if (type == ExpandoColumnConstants.INTEGER) {
\r
2057 value = ParamUtil.getInteger(uploadPortletRequest, name);
\r
2059 else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
\r
2060 String[] values = uploadPortletRequest.getParameterValues(name);
\r
2062 if (displayType.equals(
\r
2063 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
2065 values = StringUtil.splitLines(values[0]);
\r
2068 value = GetterUtil.getIntegerValues(values);
\r
2070 else if (type == ExpandoColumnConstants.LONG) {
\r
2071 value = ParamUtil.getLong(uploadPortletRequest, name);
\r
2073 else if (type == ExpandoColumnConstants.LONG_ARRAY) {
\r
2074 String[] values = uploadPortletRequest.getParameterValues(name);
\r
2076 if (displayType.equals(
\r
2077 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
2079 values = StringUtil.splitLines(values[0]);
\r
2082 value = GetterUtil.getLongValues(values);
\r
2084 else if (type == ExpandoColumnConstants.SHORT) {
\r
2085 value = ParamUtil.getShort(uploadPortletRequest, name);
\r
2087 else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
\r
2088 String[] values = uploadPortletRequest.getParameterValues(name);
\r
2090 if (displayType.equals(
\r
2091 ExpandoColumnConstants.PROPERTY_DISPLAY_TYPE_TEXT_BOX)) {
\r
2093 values = StringUtil.splitLines(values[0]);
\r
2096 value = GetterUtil.getShortValues(values);
\r
2098 else if (type == ExpandoColumnConstants.STRING_ARRAY) {
\r
2099 value = uploadPortletRequest.getParameterValues(name);
\r
2102 value = ParamUtil.getString(uploadPortletRequest, name);
\r
2108 public String getFacebookURL(
\r
2109 Portlet portlet, String facebookCanvasPageURL,
\r
2110 ThemeDisplay themeDisplay)
\r
2111 throws PortalException, SystemException {
\r
2113 String facebookURL = getServletURL(
\r
2114 portlet, FacebookUtil.FACEBOOK_SERVLET_PATH + facebookCanvasPageURL,
\r
2117 if (!facebookURL.endsWith(StringPool.SLASH)) {
\r
2118 facebookURL += StringPool.SLASH;
\r
2121 return facebookURL;
\r
2124 public String getFirstPageLayoutTypes(PageContext pageContext) {
\r
2125 StringBundler sb = new StringBundler();
\r
2127 for (String type : PropsValues.LAYOUT_TYPES) {
\r
2128 if (isLayoutFirstPageable(type)) {
\r
2130 LanguageUtil.get(pageContext, "layout.types." + type));
\r
2131 sb.append(StringPool.COMMA);
\r
2132 sb.append(StringPool.SPACE);
\r
2136 if (sb.index() >= 2) {
\r
2137 sb.setIndex(sb.index() - 2);
\r
2140 return sb.toString();
\r
2143 public String getGlobalLibDir() {
\r
2144 return PropsValues.LIFERAY_LIB_GLOBAL_DIR;
\r
2147 public String getGoogleGadgetURL(Portlet portlet, ThemeDisplay themeDisplay)
\r
2148 throws PortalException, SystemException {
\r
2150 return getServletURL(
\r
2151 portlet, PropsValues.GOOGLE_GADGET_SERVLET_MAPPING, themeDisplay);
\r
2154 public String getGroupFriendlyURL(
\r
2155 Group group, boolean privateLayoutSet, ThemeDisplay themeDisplay)
\r
2156 throws PortalException, SystemException {
\r
2158 return getGroupFriendlyURL(
\r
2159 group, privateLayoutSet, themeDisplay, false);
\r
2162 public String[] getGroupPermissions(HttpServletRequest request) {
\r
2163 return request.getParameterValues("groupPermissions");
\r
2166 public String[] getGroupPermissions(PortletRequest portletRequest) {
\r
2167 return portletRequest.getParameterValues("groupPermissions");
\r
2170 public String[] getGuestPermissions(HttpServletRequest request) {
\r
2171 return request.getParameterValues("guestPermissions");
\r
2174 public String[] getGuestPermissions(PortletRequest portletRequest) {
\r
2175 return portletRequest.getParameterValues("guestPermissions");
\r
2178 public String getHomeURL(HttpServletRequest request)
\r
2179 throws PortalException, SystemException {
\r
2181 String portalURL = getPortalURL(request);
\r
2183 return portalURL + _pathContext + getRelativeHomeURL(request);
\r
2186 public String getHost(HttpServletRequest request) {
\r
2187 request = getOriginalServletRequest(request);
\r
2189 String host = request.getHeader("Host");
\r
2191 if (host != null) {
\r
2192 host = host.trim().toLowerCase();
\r
2194 int pos = host.indexOf(':');
\r
2197 host = host.substring(0, pos);
\r
2207 public String getHost(PortletRequest portletRequest) {
\r
2208 return getHost(getHttpServletRequest(portletRequest));
\r
2211 public HttpServletRequest getHttpServletRequest(
\r
2212 PortletRequest portletRequest) {
\r
2214 PortletRequestImpl portletRequestImpl =
\r
2215 PortletRequestImpl.getPortletRequestImpl(portletRequest);
\r
2217 return portletRequestImpl.getHttpServletRequest();
\r
2220 public HttpServletResponse getHttpServletResponse(
\r
2221 PortletResponse portletResponse) {
\r
2223 PortletResponseImpl portletResponseImpl =
\r
2224 PortletResponseImpl.getPortletResponseImpl(portletResponse);
\r
2226 return portletResponseImpl.getHttpServletResponse();
\r
2229 public String getJournalArticleActualURL(
\r
2230 long groupId, String mainPath, String friendlyURL,
\r
2231 Map<String, String[]> params, Map<String, Object> requestContext)
\r
2232 throws PortalException, SystemException {
\r
2234 String articleUrlTitle = friendlyURL.substring(
\r
2235 JournalArticleConstants.CANONICAL_URL_SEPARATOR.length());
\r
2237 JournalArticle journalArticle =
\r
2238 JournalArticleLocalServiceUtil.getArticleByUrlTitle(
\r
2239 groupId, articleUrlTitle);
\r
2241 Layout layout = LayoutLocalServiceUtil.getLayoutByUuidAndGroupId(
\r
2242 journalArticle.getLayoutUuid(), groupId);
\r
2244 String layoutActualURL = getLayoutActualURL(layout, mainPath);
\r
2246 InheritableMap<String, String[]> actualParams =
\r
2247 new InheritableMap<String, String[]>();
\r
2249 if (params != null) {
\r
2250 actualParams.setParentMap(params);
\r
2253 UnicodeProperties typeSettingsProperties =
\r
2254 layout.getTypeSettingsProperties();
\r
2256 String defaultAssetPublisherPortletId = typeSettingsProperties.get(
\r
2257 LayoutTypePortletConstants.DEFAULT_ASSET_PUBLISHER_PORTLET_ID);
\r
2259 String currentDefaultAssetPublisherPortletId =
\r
2260 defaultAssetPublisherPortletId;
\r
2262 if (Validator.isNull(defaultAssetPublisherPortletId)) {
\r
2263 defaultAssetPublisherPortletId =
\r
2264 PortletKeys.ASSET_PUBLISHER +
\r
2265 LayoutTypePortletImpl.getFullInstanceSeparator();
\r
2268 HttpServletRequest request =
\r
2269 (HttpServletRequest)requestContext.get("request");
\r
2271 if (Validator.isNull(currentDefaultAssetPublisherPortletId)) {
\r
2272 String actualPortletAuthenticationToken = AuthTokenUtil.getToken(
\r
2273 request, layout.getPlid(), defaultAssetPublisherPortletId);
\r
2276 "p_p_auth", new String[] {actualPortletAuthenticationToken});
\r
2280 "p_p_id", new String[] {defaultAssetPublisherPortletId});
\r
2281 actualParams.put("p_p_lifecycle", new String[] {"0"});
\r
2283 if (Validator.isNull(currentDefaultAssetPublisherPortletId)) {
\r
2285 "p_p_state", new String[] {WindowState.MAXIMIZED.toString()});
\r
2288 actualParams.put("p_p_mode", new String[] {"view"});
\r
2290 "p_j_a_id", new String[] {String.valueOf(journalArticle.getId())});
\r
2292 String namespace = getPortletNamespace(defaultAssetPublisherPortletId);
\r
2295 namespace + "struts_action",
\r
2296 new String[] {"/asset_publisher/view_content"});
\r
2298 namespace + "type",
\r
2299 new String[] {JournalArticleAssetRendererFactory.TYPE});
\r
2301 namespace + "urlTitle",
\r
2302 new String[] {journalArticle.getUrlTitle()});
\r
2304 String queryString = HttpUtil.parameterMapToString(actualParams, false);
\r
2306 if (layoutActualURL.contains(StringPool.QUESTION)) {
\r
2308 layoutActualURL + StringPool.AMPERSAND + queryString;
\r
2312 layoutActualURL + StringPool.QUESTION + queryString;
\r
2315 Locale locale = getLocale(request);
\r
2317 addPageSubtitle(journalArticle.getTitle(locale), request);
\r
2318 addPageDescription(journalArticle.getDescription(locale), request);
\r
2320 List<AssetTag> assetTags = AssetTagLocalServiceUtil.getTags(
\r
2321 JournalArticle.class.getName(), journalArticle.getPrimaryKey());
\r
2323 if (!assetTags.isEmpty()) {
\r
2325 ListUtil.toString(assetTags, AssetTag.NAME_ACCESSOR), request);
\r
2328 return layoutActualURL;
\r
2331 public String getJsSafePortletId(String portletId) {
\r
2332 return JS.getSafeName(portletId);
\r
2335 public String getLayoutActualURL(Layout layout) {
\r
2336 return getLayoutActualURL(layout, getPathMain());
\r
2339 public String getLayoutActualURL(Layout layout, String mainPath) {
\r
2340 Map<String, String> variables = new HashMap<String, String>();
\r
2342 variables.put("liferay:groupId", String.valueOf(layout.getGroupId()));
\r
2343 variables.put("liferay:mainPath", mainPath);
\r
2344 variables.put("liferay:plid", String.valueOf(layout.getPlid()));
\r
2346 if (layout instanceof VirtualLayout) {
\r
2348 "liferay:pvlsgid", String.valueOf(layout.getGroupId()));
\r
2351 variables.put("liferay:pvlsgid", "0");
\r
2354 LayoutType layoutType = layout.getLayoutType();
\r
2356 UnicodeProperties typeSettingsProperties =
\r
2357 layoutType.getTypeSettingsProperties();
\r
2359 variables.putAll(typeSettingsProperties);
\r
2361 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
\r
2363 return layoutSettings.getURL(variables);
\r
2366 public String getLayoutActualURL(
\r
2367 long groupId, boolean privateLayout, String mainPath,
\r
2368 String friendlyURL)
\r
2369 throws PortalException, SystemException {
\r
2371 return getLayoutActualURL(
\r
2372 groupId, privateLayout, mainPath, friendlyURL, null, null);
\r
2375 public String getLayoutActualURL(
\r
2376 long groupId, boolean privateLayout, String mainPath,
\r
2377 String friendlyURL, Map<String, String[]> params,
\r
2378 Map<String, Object> requestContext)
\r
2379 throws PortalException, SystemException {
\r
2381 Layout layout = null;
\r
2382 String queryString = StringPool.BLANK;
\r
2384 if (Validator.isNull(friendlyURL)) {
\r
2385 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
\r
2386 groupId, privateLayout,
\r
2387 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
\r
2389 if (!layouts.isEmpty()) {
\r
2390 layout = layouts.get(0);
\r
2393 throw new NoSuchLayoutException(
\r
2394 "{groupId=" + groupId + ",privateLayout=" + privateLayout +
\r
2395 "} does not have any layouts");
\r
2399 Object[] friendlyURLMapper = getPortletFriendlyURLMapper(
\r
2400 groupId, privateLayout, friendlyURL, params, requestContext);
\r
2402 layout = (Layout)friendlyURLMapper[0];
\r
2403 queryString = (String)friendlyURLMapper[1];
\r
2406 String layoutActualURL = getLayoutActualURL(layout, mainPath);
\r
2408 if (Validator.isNotNull(queryString)) {
\r
2409 layoutActualURL = layoutActualURL.concat(queryString);
\r
2411 else if (params.isEmpty()) {
\r
2412 LayoutType layoutType = layout.getLayoutType();
\r
2414 UnicodeProperties typeSettingsProperties =
\r
2415 layoutType.getTypeSettingsProperties();
\r
2417 queryString = typeSettingsProperties.getProperty("query-string");
\r
2419 if (Validator.isNotNull(queryString) &&
\r
2420 layoutActualURL.contains(StringPool.QUESTION)) {
\r
2422 layoutActualURL = layoutActualURL.concat(
\r
2423 StringPool.AMPERSAND).concat(queryString);
\r
2427 return layoutActualURL;
\r
2430 public String getLayoutEditPage(Layout layout) {
\r
2431 LayoutSettings layoutSettings = LayoutSettings.getInstance(
\r
2432 layout.getType());
\r
2434 return layoutSettings.getEditPage();
\r
2437 public String getLayoutEditPage(String type) {
\r
2438 LayoutSettings layoutSettings = LayoutSettings.getInstance(type);
\r
2440 return layoutSettings.getEditPage();
\r
2443 public String getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)
\r
2444 throws PortalException, SystemException {
\r
2446 if (!isLayoutFriendliable(layout)) {
\r
2450 String groupFriendlyURL = getGroupFriendlyURL(
\r
2451 layout.getGroup(), layout.isPrivateLayout(), themeDisplay);
\r
2453 return groupFriendlyURL.concat(layout.getFriendlyURL());
\r
2456 public String getLayoutFriendlyURL(
\r
2457 Layout layout, ThemeDisplay themeDisplay, Locale locale)
\r
2458 throws PortalException, SystemException {
\r
2460 String i18nLanguageId = themeDisplay.getI18nLanguageId();
\r
2461 String i18nPath = themeDisplay.getI18nPath();
\r
2464 String tempI18nLanguageId = null;
\r
2465 String tempI18nPath = null;
\r
2467 if ((I18nFilter.getLanguageIds().contains(locale.toString()) &&
\r
2468 ((PropsValues.LOCALE_PREPEND_FRIENDLY_URL_STYLE == 1) &&
\r
2469 !locale.equals(LocaleUtil.getDefault()))) ||
\r
2470 (PropsValues.LOCALE_PREPEND_FRIENDLY_URL_STYLE == 2)) {
\r
2472 tempI18nLanguageId = locale.toString();
\r
2473 tempI18nPath = buildI18NPath(locale);
\r
2476 themeDisplay.setI18nLanguageId(tempI18nLanguageId);
\r
2477 themeDisplay.setI18nPath(tempI18nPath);
\r
2479 return getLayoutFriendlyURL(layout, themeDisplay);
\r
2482 themeDisplay.setI18nLanguageId(i18nLanguageId);
\r
2483 themeDisplay.setI18nPath(i18nPath);
\r
2487 public String getLayoutFullURL(Layout layout, ThemeDisplay themeDisplay)
\r
2488 throws PortalException, SystemException {
\r
2490 return getLayoutFullURL(layout, themeDisplay, true);
\r
2493 public String getLayoutFullURL(
\r
2494 Layout layout, ThemeDisplay themeDisplay, boolean doAsUser)
\r
2495 throws PortalException, SystemException {
\r
2497 String layoutURL = getLayoutURL(layout, themeDisplay, doAsUser);
\r
2498 String portalURL = getPortalURL(layout, themeDisplay);
\r
2500 if (StringUtil.startsWith(layoutURL, portalURL)) {
\r
2504 return portalURL + layoutURL;
\r
2508 public String getLayoutFullURL(long groupId, String portletId)
\r
2509 throws PortalException, SystemException {
\r
2511 return getLayoutFullURL(groupId, portletId, false);
\r
2514 public String getLayoutFullURL(
\r
2515 long groupId, String portletId, boolean secure)
\r
2516 throws PortalException, SystemException {
\r
2518 long plid = getPlidFromPortletId(groupId, portletId);
\r
2520 if (plid == LayoutConstants.DEFAULT_PLID) {
\r
2524 StringBundler sb = new StringBundler(4);
\r
2526 Layout layout = LayoutLocalServiceUtil.getLayout(plid);
\r
2528 Group group = GroupLocalServiceUtil.getGroup(groupId);
\r
2530 if (group.isLayout()) {
\r
2531 long parentGroupId = group.getParentGroupId();
\r
2533 if (parentGroupId > 0) {
\r
2534 group = GroupLocalServiceUtil.getGroup(parentGroupId);
\r
2538 String virtualHostname = null;
\r
2540 LayoutSet layoutSet = layout.getLayoutSet();
\r
2542 if (Validator.isNotNull(layoutSet.getVirtualHostname())) {
\r
2543 virtualHostname = layoutSet.getVirtualHostname();
\r
2546 Company company = CompanyLocalServiceUtil.getCompany(
\r
2547 layout.getCompanyId());
\r
2549 virtualHostname = company.getVirtualHostname();
\r
2552 String portalURL = getPortalURL(
\r
2553 virtualHostname, getPortalPort(secure), secure);
\r
2555 sb.append(portalURL);
\r
2557 if (layout.isPrivateLayout()) {
\r
2558 if (group.isUser()) {
\r
2559 sb.append(getPathFriendlyURLPrivateUser());
\r
2562 sb.append(getPathFriendlyURLPrivateGroup());
\r
2566 sb.append(getPathFriendlyURLPublic());
\r
2569 sb.append(group.getFriendlyURL());
\r
2570 sb.append(layout.getFriendlyURL());
\r
2572 return sb.toString();
\r
2575 public String getLayoutFullURL(ThemeDisplay themeDisplay)
\r
2576 throws PortalException, SystemException {
\r
2578 return getLayoutFullURL(themeDisplay.getLayout(), themeDisplay);
\r
2581 public String getLayoutSetFriendlyURL(
\r
2582 LayoutSet layoutSet, ThemeDisplay themeDisplay)
\r
2583 throws PortalException, SystemException {
\r
2585 String virtualHostname = layoutSet.getVirtualHostname();
\r
2587 if (Validator.isNull(virtualHostname) &&
\r
2588 Validator.isNotNull(PropsValues.VIRTUAL_HOSTS_DEFAULT_SITE_NAME) &&
\r
2589 !layoutSet.isPrivateLayout()) {
\r
2592 Group group = GroupLocalServiceUtil.getGroup(
\r
2593 themeDisplay.getCompanyId(),
\r
2594 PropsValues.VIRTUAL_HOSTS_DEFAULT_SITE_NAME);
\r
2596 if (layoutSet.getGroupId() == group.getGroupId()) {
\r
2597 Company company = themeDisplay.getCompany();
\r
2599 virtualHostname = company.getVirtualHostname();
\r
2602 catch (Exception e) {
\r
2607 if (Validator.isNotNull(virtualHostname)) {
\r
2608 String portalURL = getPortalURL(
\r
2609 virtualHostname, themeDisplay.getServerPort(),
\r
2610 themeDisplay.isSecure());
\r
2612 // Use the layout set's virtual host setting only if the layout set
\r
2613 // is already used for the current request
\r
2615 long curLayoutSetId =
\r
2616 themeDisplay.getLayout().getLayoutSet().getLayoutSetId();
\r
2618 if ((layoutSet.getLayoutSetId() != curLayoutSetId) ||
\r
2619 portalURL.startsWith(themeDisplay.getURLPortal())) {
\r
2621 String layoutSetFriendlyURL = StringPool.BLANK;
\r
2623 if (themeDisplay.isI18n()) {
\r
2624 layoutSetFriendlyURL = themeDisplay.getI18nPath();
\r
2627 return portalURL + _pathContext + layoutSetFriendlyURL;
\r
2631 Group group = GroupLocalServiceUtil.getGroup(layoutSet.getGroupId());
\r
2633 String friendlyURL = null;
\r
2635 if (layoutSet.isPrivateLayout()) {
\r
2636 if (group.isUser()) {
\r
2637 friendlyURL = _PRIVATE_USER_SERVLET_MAPPING;
\r
2640 friendlyURL = _PRIVATE_GROUP_SERVLET_MAPPING;
\r
2644 friendlyURL = _PUBLIC_GROUP_SERVLET_MAPPING;
\r
2647 if (themeDisplay.isI18n()) {
\r
2648 friendlyURL = themeDisplay.getI18nPath() + friendlyURL;
\r
2651 return _pathContext + friendlyURL + group.getFriendlyURL();
\r
2654 public String getLayoutTarget(Layout layout) {
\r
2655 UnicodeProperties typeSettingsProps =
\r
2656 layout.getTypeSettingsProperties();
\r
2658 String target = typeSettingsProps.getProperty("target");
\r
2660 if (Validator.isNull(target)) {
\r
2661 target = StringPool.BLANK;
\r
2664 target = "target=\"" + HtmlUtil.escapeAttribute(target) + "\"";
\r
2670 public String getLayoutURL(Layout layout, ThemeDisplay themeDisplay)
\r
2671 throws PortalException, SystemException {
\r
2673 return getLayoutURL(layout, themeDisplay, true);
\r
2676 public String getLayoutURL(
\r
2677 Layout layout, ThemeDisplay themeDisplay, boolean doAsUser)
\r
2678 throws PortalException, SystemException {
\r
2680 if (layout == null) {
\r
2681 return themeDisplay.getPathMain() + PATH_PORTAL_LAYOUT;
\r
2684 if (!layout.isTypeURL()) {
\r
2685 String layoutFriendlyURL = getLayoutFriendlyURL(
\r
2686 layout, themeDisplay);
\r
2688 if (Validator.isNotNull(layoutFriendlyURL)) {
\r
2689 layoutFriendlyURL = addPreservedParameters(
\r
2690 themeDisplay, layout, layoutFriendlyURL, doAsUser);
\r
2692 return layoutFriendlyURL;
\r
2696 String layoutURL = getLayoutActualURL(layout);
\r
2698 layoutURL = addPreservedParameters(
\r
2699 themeDisplay, layout, layoutURL, doAsUser);
\r
2704 public String getLayoutURL(ThemeDisplay themeDisplay)
\r
2705 throws PortalException, SystemException {
\r
2707 return getLayoutURL(themeDisplay.getLayout(), themeDisplay);
\r
2710 public String getLayoutViewPage(Layout layout) {
\r
2711 LayoutSettings layoutSettings = LayoutSettings.getInstance(
\r
2712 layout.getType());
\r
2714 return layoutSettings.getViewPage();
\r
2717 public String getLayoutViewPage(String type) {
\r
2718 LayoutSettings layoutSettings = LayoutSettings.getInstance(type);
\r
2720 return layoutSettings.getViewPage();
\r
2723 public LiferayPortletRequest getLiferayPortletRequest(
\r
2724 PortletRequest portletRequest) {
\r
2726 PortletRequestImpl portletRequestImpl =
\r
2727 PortletRequestImpl.getPortletRequestImpl(portletRequest);
\r
2729 return portletRequestImpl;
\r
2732 public LiferayPortletResponse getLiferayPortletResponse(
\r
2733 PortletResponse portletResponse) {
\r
2735 PortletResponseImpl portletResponseImpl =
\r
2736 PortletResponseImpl.getPortletResponseImpl(portletResponse);
\r
2738 return portletResponseImpl;
\r
2741 public Locale getLocale(HttpServletRequest request) {
\r
2742 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
2743 WebKeys.THEME_DISPLAY);
\r
2745 if (themeDisplay != null) {
\r
2746 return themeDisplay.getLocale();
\r
2749 HttpSession session = request.getSession();
\r
2751 return (Locale)session.getAttribute(Globals.LOCALE_KEY);
\r
2755 public Locale getLocale(RenderRequest renderRequest) {
\r
2756 return getLocale(getHttpServletRequest(renderRequest));
\r
2759 public String getMailId(String mx, String popPortletPrefix, Object... ids) {
\r
2760 StringBundler sb = new StringBundler(ids.length * 2 + 7);
\r
2762 sb.append(StringPool.LESS_THAN);
\r
2763 sb.append(popPortletPrefix);
\r
2765 if (!popPortletPrefix.endsWith(StringPool.PERIOD)) {
\r
2766 sb.append(StringPool.PERIOD);
\r
2769 for (int i = 0; i < ids.length; i++) {
\r
2770 Object id = ids[i];
\r
2773 sb.append(StringPool.PERIOD);
\r
2779 sb.append(StringPool.AT);
\r
2781 if (Validator.isNotNull(PropsValues.POP_SERVER_SUBDOMAIN)) {
\r
2782 sb.append(PropsValues.POP_SERVER_SUBDOMAIN);
\r
2783 sb.append(StringPool.PERIOD);
\r
2787 sb.append(StringPool.GREATER_THAN);
\r
2789 return sb.toString();
\r
2792 public String getNetvibesURL(Portlet portlet, ThemeDisplay themeDisplay)
\r
2793 throws PortalException, SystemException {
\r
2795 return getServletURL(
\r
2796 portlet, PropsValues.NETVIBES_SERVLET_MAPPING, themeDisplay);
\r
2799 public String getNewPortletTitle(
\r
2800 String portletTitle, String oldScopeName, String newScopeName) {
\r
2802 if (portletTitle.endsWith(" (" + oldScopeName + ")")) {
\r
2803 int pos = portletTitle.lastIndexOf(" (" + oldScopeName + ")");
\r
2805 portletTitle = portletTitle.substring(0, pos);
\r
2808 if (Validator.isNull(newScopeName)) {
\r
2809 return portletTitle;
\r
2812 StringBundler sb = new StringBundler(5);
\r
2814 sb.append(portletTitle);
\r
2815 sb.append(StringPool.SPACE);
\r
2816 sb.append(StringPool.OPEN_PARENTHESIS);
\r
2817 sb.append(newScopeName);
\r
2818 sb.append(StringPool.CLOSE_PARENTHESIS);
\r
2820 return sb.toString();
\r
2823 public HttpServletRequest getOriginalServletRequest(
\r
2824 HttpServletRequest request) {
\r
2826 HttpServletRequest originalRequest = request;
\r
2828 while (originalRequest.getClass().getName().startsWith(
\r
2829 "com.liferay.")) {
\r
2831 // Get original request so that portlets inside portlets render
\r
2834 originalRequest = (HttpServletRequest)
\r
2835 ((HttpServletRequestWrapper)originalRequest).getRequest();
\r
2838 if (ServerDetector.isWebLogic()) {
\r
2839 originalRequest = new NonSerializableObjectRequestWrapper(
\r
2843 return originalRequest;
\r
2846 public String getOuterPortletId(HttpServletRequest request) {
\r
2847 String outerPortletId = (String)request.getAttribute(
\r
2848 WebKeys.OUTER_PORTLET_ID);
\r
2850 if (outerPortletId == null) {
\r
2851 outerPortletId = request.getParameter("p_o_p_id");
\r
2854 return outerPortletId;
\r
2857 public long getParentGroupId(long groupId)
\r
2858 throws PortalException, SystemException {
\r
2860 if (groupId <= 0) {
\r
2864 Group group = GroupLocalServiceUtil.getGroup(groupId);
\r
2866 long parentGroupId = groupId;
\r
2868 if (group.isLayout()) {
\r
2869 parentGroupId = group.getParentGroupId();
\r
2872 return parentGroupId;
\r
2875 public String getPathContext() {
\r
2876 return _pathContext;
\r
2879 public String getPathFriendlyURLPrivateGroup() {
\r
2880 return _pathFriendlyURLPrivateGroup;
\r
2883 public String getPathFriendlyURLPrivateUser() {
\r
2884 return _pathFriendlyURLPrivateUser;
\r
2887 public String getPathFriendlyURLPublic() {
\r
2888 return _pathFriendlyURLPublic;
\r
2891 public String getPathImage() {
\r
2892 return _pathImage;
\r
2895 public String getPathMain() {
\r
2899 public String getPathProxy() {
\r
2900 return _pathProxy;
\r
2903 public long getPlidFromFriendlyURL(long companyId, String friendlyURL) {
\r
2904 if (Validator.isNull(friendlyURL)) {
\r
2905 return LayoutConstants.DEFAULT_PLID;
\r
2908 String[] urlParts = friendlyURL.split("\\/", 4);
\r
2910 if ((friendlyURL.charAt(0) != CharPool.SLASH) &&
\r
2911 (urlParts.length != 4)) {
\r
2913 return LayoutConstants.DEFAULT_PLID;
\r
2916 boolean privateLayout = true;
\r
2918 String urlPrefix = StringPool.SLASH + urlParts[1];
\r
2920 if (_PUBLIC_GROUP_SERVLET_MAPPING.equals(urlPrefix)) {
\r
2921 privateLayout = false;
\r
2923 else if (_PRIVATE_GROUP_SERVLET_MAPPING.equals(urlPrefix) ||
\r
2924 _PRIVATE_USER_SERVLET_MAPPING.equals(urlPrefix)) {
\r
2926 privateLayout = true;
\r
2929 return LayoutConstants.DEFAULT_PLID;
\r
2932 Group group = null;
\r
2935 group = GroupLocalServiceUtil.getFriendlyURLGroup(
\r
2936 companyId, StringPool.SLASH + urlParts[2]);
\r
2938 catch (Exception e) {
\r
2941 if (group != null) {
\r
2942 Layout layout = null;
\r
2945 String layoutFriendlyURL = null;
\r
2947 if (urlParts.length == 4) {
\r
2948 layoutFriendlyURL = StringPool.SLASH + urlParts[3];
\r
2950 layout = LayoutLocalServiceUtil.getFriendlyURLLayout(
\r
2951 group.getGroupId(), privateLayout, layoutFriendlyURL);
\r
2954 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
\r
2955 group.getGroupId(), privateLayout,
\r
2956 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, true, 0, 1);
\r
2958 if (!layouts.isEmpty()) {
\r
2959 layout = layouts.get(0);
\r
2962 return LayoutConstants.DEFAULT_PLID;
\r
2966 return layout.getPlid();
\r
2968 catch (Exception e) {
\r
2972 return LayoutConstants.DEFAULT_PLID;
\r
2975 public long getPlidFromPortletId(
\r
2976 long groupId, boolean privateLayout, String portletId)
\r
2977 throws PortalException, SystemException {
\r
2979 long plid = LayoutConstants.DEFAULT_PLID;
\r
2981 StringBundler sb = new StringBundler(5);
\r
2983 sb.append(groupId);
\r
2984 sb.append(StringPool.SPACE);
\r
2985 sb.append(privateLayout);
\r
2986 sb.append(StringPool.SPACE);
\r
2987 sb.append(portletId);
\r
2989 String key = sb.toString();
\r
2991 Long plidObj = _plidToPortletIdMap.get(key);
\r
2993 if (plidObj == null) {
\r
2994 plid = doGetPlidFromPortletId(groupId, privateLayout, portletId);
\r
2996 if (plid != LayoutConstants.DEFAULT_PLID) {
\r
2997 _plidToPortletIdMap.put(key, plid);
\r
3001 plid = plidObj.longValue();
\r
3003 boolean validPlid = false;
\r
3006 Layout layout = LayoutLocalServiceUtil.getLayout(plid);
\r
3008 LayoutTypePortlet layoutTypePortlet =
\r
3009 (LayoutTypePortlet)layout.getLayoutType();
\r
3011 if (layoutTypePortlet.hasDefaultScopePortletId(
\r
3012 groupId, portletId)) {
\r
3017 catch (Exception e) {
\r
3021 _plidToPortletIdMap.remove(key);
\r
3023 plid = doGetPlidFromPortletId(
\r
3024 groupId, privateLayout, portletId);
\r
3026 if (plid != LayoutConstants.DEFAULT_PLID) {
\r
3027 _plidToPortletIdMap.put(key, plid);
\r
3035 public long getPlidFromPortletId(long groupId, String portletId)
\r
3036 throws PortalException, SystemException {
\r
3038 long plid = getPlidFromPortletId(groupId, false, portletId);
\r
3040 if (plid == LayoutConstants.DEFAULT_PLID) {
\r
3041 plid = getPlidFromPortletId(groupId, true, portletId);
\r
3044 if (plid == LayoutConstants.DEFAULT_PLID) {
\r
3045 if (_log.isDebugEnabled()) {
\r
3047 "Portlet " + portletId +
\r
3048 " does not exist on a page in group " + groupId);
\r
3055 public String getPortalLibDir() {
\r
3056 return PropsValues.LIFERAY_LIB_PORTAL_DIR;
\r
3060 * @deprecated {@link #getPortalPort(boolean)}
\r
3062 public int getPortalPort() {
\r
3063 return _portalPort.get();
\r
3066 public int getPortalPort(boolean secure) {
\r
3068 return _securePortalPort.get();
\r
3071 return _portalPort.get();
\r
3075 public Properties getPortalProperties() {
\r
3076 return PropsUtil.getProperties();
\r
3079 public String getPortalURL(HttpServletRequest request) {
\r
3080 return getPortalURL(request, isSecure(request));
\r
3083 public String getPortalURL(HttpServletRequest request, boolean secure) {
\r
3084 return getPortalURL(
\r
3085 request.getServerName(), request.getServerPort(), secure);
\r
3088 public String getPortalURL(Layout layout, ThemeDisplay themeDisplay)
\r
3089 throws PortalException, SystemException {
\r
3091 String serverName = themeDisplay.getServerName();
\r
3093 if (layout == null) {
\r
3094 layout = themeDisplay.getLayout();
\r
3097 if (layout != null) {
\r
3098 LayoutSet layoutSet = layout.getLayoutSet();
\r
3100 String virtualHostname = layoutSet.getVirtualHostname();
\r
3102 if (Validator.isNotNull(virtualHostname)) {
\r
3103 serverName = virtualHostname;
\r
3107 return getPortalURL(
\r
3108 serverName, themeDisplay.getServerPort(), themeDisplay.isSecure());
\r
3111 public String getPortalURL(PortletRequest portletRequest) {
\r
3112 return getPortalURL(portletRequest, portletRequest.isSecure());
\r
3115 public String getPortalURL(PortletRequest portletRequest, boolean secure) {
\r
3116 return getPortalURL(
\r
3117 portletRequest.getServerName(), portletRequest.getServerPort(),
\r
3121 public String getPortalURL(
\r
3122 String serverName, int serverPort, boolean secure) {
\r
3124 StringBundler sb = new StringBundler();
\r
3126 if (secure || Http.HTTPS.equals(PropsValues.WEB_SERVER_PROTOCOL)) {
\r
3127 sb.append(Http.HTTPS_WITH_SLASH);
\r
3130 sb.append(Http.HTTP_WITH_SLASH);
\r
3133 if (Validator.isNull(PropsValues.WEB_SERVER_HOST)) {
\r
3134 sb.append(serverName);
\r
3137 sb.append(PropsValues.WEB_SERVER_HOST);
\r
3141 if (PropsValues.WEB_SERVER_HTTP_PORT == -1) {
\r
3142 if ((serverPort != Http.HTTP_PORT) &&
\r
3143 (serverPort != Http.HTTPS_PORT)) {
\r
3145 sb.append(StringPool.COLON);
\r
3146 sb.append(serverPort);
\r
3150 if (PropsValues.WEB_SERVER_HTTP_PORT != Http.HTTP_PORT) {
\r
3151 sb.append(StringPool.COLON);
\r
3152 sb.append(PropsValues.WEB_SERVER_HTTP_PORT);
\r
3158 if (PropsValues.WEB_SERVER_HTTPS_PORT == -1) {
\r
3159 if ((serverPort != Http.HTTP_PORT) &&
\r
3160 (serverPort != Http.HTTPS_PORT)) {
\r
3162 sb.append(StringPool.COLON);
\r
3163 sb.append(serverPort);
\r
3167 if (PropsValues.WEB_SERVER_HTTPS_PORT != Http.HTTPS_PORT) {
\r
3168 sb.append(StringPool.COLON);
\r
3169 sb.append(PropsValues.WEB_SERVER_HTTPS_PORT);
\r
3174 return sb.toString();
\r
3177 public String getPortalURL(ThemeDisplay themeDisplay)
\r
3178 throws PortalException, SystemException {
\r
3180 return getPortalURL(null, themeDisplay);
\r
3183 public String getPortalWebDir() {
\r
3184 return PropsValues.LIFERAY_WEB_PORTAL_DIR;
\r
3187 public Set<String> getPortletAddDefaultResourceCheckWhitelist() {
\r
3188 return _portletAddDefaultResourceCheckWhitelist;
\r
3191 public Set<String> getPortletAddDefaultResourceCheckWhitelistActions() {
\r
3192 return _portletAddDefaultResourceCheckWhitelistActions;
\r
3196 * @deprecated {@link #getPortletBreadcrumbs(HttpServletRequest)}
\r
3198 public List<BreadcrumbEntry> getPortletBreadcrumbList(
\r
3199 HttpServletRequest request) {
\r
3201 return getPortletBreadcrumbs(request);
\r
3204 public List<BreadcrumbEntry> getPortletBreadcrumbs(
\r
3205 HttpServletRequest request) {
\r
3207 return (List<BreadcrumbEntry>)request.getAttribute(
\r
3208 WebKeys.PORTLET_BREADCRUMBS);
\r
3211 public String getPortletDescription(
\r
3212 Portlet portlet, ServletContext servletContext, Locale locale) {
\r
3214 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
\r
3215 portlet, servletContext);
\r
3217 ResourceBundle resourceBundle = portletConfig.getResourceBundle(locale);
\r
3219 return resourceBundle.getString(
\r
3220 JavaConstants.JAVAX_PORTLET_DESCRIPTION);
\r
3223 public String getPortletDescription(Portlet portlet, User user) {
\r
3224 return getPortletDescription(portlet.getPortletId(), user);
\r
3227 public String getPortletDescription(String portletId, Locale locale) {
\r
3228 return LanguageUtil.get(
\r
3230 JavaConstants.JAVAX_PORTLET_DESCRIPTION.concat(
\r
3231 StringPool.PERIOD).concat(portletId));
\r
3234 public String getPortletDescription(String portletId, String languageId) {
\r
3235 Locale locale = LocaleUtil.fromLanguageId(languageId);
\r
3237 return getPortletDescription(portletId, locale);
\r
3240 public String getPortletDescription(String portletId, User user) {
\r
3241 return LanguageUtil.get(
\r
3243 JavaConstants.JAVAX_PORTLET_DESCRIPTION.concat(
\r
3244 StringPool.PERIOD).concat(portletId));
\r
3247 public Object[] getPortletFriendlyURLMapper(
\r
3248 long groupId, boolean privateLayout, String url,
\r
3249 Map<String, String[]> params, Map<String, Object> requestContext)
\r
3250 throws PortalException, SystemException {
\r
3252 boolean foundFriendlyURLMapper = false;
\r
3254 String friendlyURL = url;
\r
3255 String queryString = StringPool.BLANK;
\r
3257 List<Portlet> portlets =
\r
3258 PortletLocalServiceUtil.getFriendlyURLMapperPortlets();
\r
3260 Iterator<Portlet> itr = portlets.iterator();
\r
3262 while (itr.hasNext()) {
\r
3263 Portlet portlet = itr.next();
\r
3265 FriendlyURLMapper friendlyURLMapper =
\r
3266 portlet.getFriendlyURLMapperInstance();
\r
3269 StringPool.SLASH + friendlyURLMapper.getMapping())) {
\r
3271 url += StringPool.SLASH;
\r
3276 if (friendlyURLMapper.isCheckMappingWithPrefix()) {
\r
3277 pos = url.indexOf(
\r
3278 FRIENDLY_URL_SEPARATOR + friendlyURLMapper.getMapping() +
\r
3279 StringPool.SLASH);
\r
3282 pos = url.indexOf(
\r
3283 StringPool.SLASH + friendlyURLMapper.getMapping() +
\r
3284 StringPool.SLASH);
\r
3288 foundFriendlyURLMapper = true;
\r
3290 friendlyURL = url.substring(0, pos);
\r
3292 InheritableMap<String, String[]> actualParams =
\r
3293 new InheritableMap<String, String[]>();
\r
3295 if (params != null) {
\r
3296 actualParams.setParentMap(params);
\r
3299 Map<String, String> prpIdentifiers =
\r
3300 new HashMap<String, String>();
\r
3302 Set<PublicRenderParameter> publicRenderParameters =
\r
3303 portlet.getPublicRenderParameters();
\r
3305 for (PublicRenderParameter publicRenderParameter :
\r
3306 publicRenderParameters) {
\r
3308 QName qName = publicRenderParameter.getQName();
\r
3310 String publicRenderParameterIdentifier =
\r
3311 qName.getLocalPart();
\r
3312 String publicRenderParameterName =
\r
3313 PortletQNameUtil.getPublicRenderParameterName(qName);
\r
3315 prpIdentifiers.put(
\r
3316 publicRenderParameterIdentifier,
\r
3317 publicRenderParameterName);
\r
3320 FriendlyURLMapperThreadLocal.setPRPIdentifiers(prpIdentifiers);
\r
3322 if (friendlyURLMapper.isCheckMappingWithPrefix()) {
\r
3323 friendlyURLMapper.populateParams(
\r
3324 url.substring(pos + 2), actualParams, requestContext);
\r
3327 friendlyURLMapper.populateParams(
\r
3328 url.substring(pos), actualParams, requestContext);
\r
3332 StringPool.AMPERSAND +
\r
3333 HttpUtil.parameterMapToString(actualParams, false);
\r
3339 if (!foundFriendlyURLMapper) {
\r
3340 int x = url.indexOf(FRIENDLY_URL_SEPARATOR);
\r
3343 int y = url.indexOf(CharPool.SLASH, x + 3);
\r
3349 String ppid = url.substring(x + 3, y);
\r
3351 if (Validator.isNotNull(ppid)) {
\r
3352 friendlyURL = url.substring(0, x);
\r
3354 Map<String, String[]> actualParams = null;
\r
3356 if (params != null) {
\r
3357 actualParams = new HashMap<String, String[]>(params);
\r
3360 actualParams = new HashMap<String, String[]>();
\r
3363 actualParams.put("p_p_id", new String[] {ppid});
\r
3364 actualParams.put("p_p_lifecycle", new String[] {"0"});
\r
3367 new String[] {WindowState.MAXIMIZED.toString()});
\r
3369 "p_p_mode", new String[] {PortletMode.VIEW.toString()});
\r
3372 StringPool.AMPERSAND +
\r
3373 HttpUtil.parameterMapToString(actualParams, false);
\r
3378 friendlyURL = StringUtil.replace(
\r
3379 friendlyURL, StringPool.DOUBLE_SLASH, StringPool.SLASH);
\r
3381 if (friendlyURL.endsWith(StringPool.SLASH)) {
\r
3382 friendlyURL = friendlyURL.substring(0, friendlyURL.length() - 1);
\r
3385 Layout layout = LayoutLocalServiceUtil.getFriendlyURLLayout(
\r
3386 groupId, privateLayout, friendlyURL);
\r
3388 return new Object[] {layout, queryString};
\r
3391 public String getPortletId(HttpServletRequest request) {
\r
3392 PortletConfigImpl portletConfigImpl =
\r
3393 (PortletConfigImpl)request.getAttribute(
\r
3394 JavaConstants.JAVAX_PORTLET_CONFIG);
\r
3396 if (portletConfigImpl != null) {
\r
3397 return portletConfigImpl.getPortletId();
\r
3404 public String getPortletId(PortletRequest portletRequest) {
\r
3405 PortletConfigImpl portletConfigImpl =
\r
3406 (PortletConfigImpl)portletRequest.getAttribute(
\r
3407 JavaConstants.JAVAX_PORTLET_CONFIG);
\r
3409 if (portletConfigImpl != null) {
\r
3410 return portletConfigImpl.getPortletId();
\r
3417 public String getPortletLongTitle(Portlet portlet, Locale locale) {
\r
3418 return getPortletLongTitle(portlet.getPortletId(), locale);
\r
3421 public String getPortletLongTitle(
\r
3422 Portlet portlet, ServletContext servletContext, Locale locale) {
\r
3424 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
\r
3425 portlet, servletContext);
\r
3427 ResourceBundle resourceBundle = portletConfig.getResourceBundle(locale);
\r
3430 String portletLongTitle = resourceBundle.getString(
\r
3431 JavaConstants.JAVAX_PORTLET_LONG_TITLE);
\r
3433 if (portletLongTitle.startsWith(
\r
3434 JavaConstants.JAVAX_PORTLET_LONG_TITLE)) {
\r
3436 portletLongTitle = getPortletTitle(
\r
3437 portlet, servletContext, locale);
\r
3440 return portletLongTitle;
\r
3442 catch (Exception e) {
\r
3443 return getPortletTitle(portlet, servletContext, locale);
\r
3447 public String getPortletLongTitle(Portlet portlet, String languageId) {
\r
3448 return getPortletLongTitle(portlet.getPortletId(), languageId);
\r
3451 public String getPortletLongTitle(Portlet portlet, User user) {
\r
3452 return getPortletLongTitle(portlet.getPortletId(), user);
\r
3455 public String getPortletLongTitle(String portletId, Locale locale) {
\r
3456 String portletLongTitle = LanguageUtil.get(
\r
3458 JavaConstants.JAVAX_PORTLET_LONG_TITLE.concat(
\r
3459 StringPool.PERIOD).concat(portletId),
\r
3460 StringPool.BLANK);
\r
3462 if (Validator.isNull(portletLongTitle)) {
\r
3463 portletLongTitle = getPortletTitle(portletId, locale);
\r
3466 return portletLongTitle;
\r
3469 public String getPortletLongTitle(String portletId, String languageId) {
\r
3470 Locale locale = LocaleUtil.fromLanguageId(languageId);
\r
3472 return getPortletLongTitle(portletId, locale);
\r
3475 public String getPortletLongTitle(String portletId, User user) {
\r
3476 return getPortletLongTitle(portletId, user.getLocale());
\r
3479 public String getPortletNamespace(String portletId) {
\r
3480 return StringPool.UNDERLINE.concat(portletId).concat(
\r
3481 StringPool.UNDERLINE);
\r
3484 public String getPortletTitle(Portlet portlet, Locale locale) {
\r
3485 return getPortletTitle(portlet.getPortletId(), locale);
\r
3488 public String getPortletTitle(
\r
3489 Portlet portlet, ServletContext servletContext, Locale locale) {
\r
3491 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
\r
3492 portlet, servletContext);
\r
3494 ResourceBundle resourceBundle = portletConfig.getResourceBundle(locale);
\r
3496 return resourceBundle.getString(JavaConstants.JAVAX_PORTLET_TITLE);
\r
3499 public String getPortletTitle(Portlet portlet, String languageId) {
\r
3500 return getPortletTitle(portlet.getPortletId(), languageId);
\r
3503 public String getPortletTitle(Portlet portlet, User user) {
\r
3504 return getPortletTitle(portlet.getPortletId(), user);
\r
3507 public String getPortletTitle(RenderResponse renderResponse) {
\r
3508 PortletResponseImpl portletResponseImpl =
\r
3509 PortletResponseImpl.getPortletResponseImpl(renderResponse);
\r
3511 return ((RenderResponseImpl)portletResponseImpl).getTitle();
\r
3514 public String getPortletTitle(String portletId, Locale locale) {
\r
3515 return LanguageUtil.get(
\r
3517 JavaConstants.JAVAX_PORTLET_TITLE.concat(StringPool.PERIOD).concat(
\r
3521 public String getPortletTitle(String portletId, String languageId) {
\r
3522 Locale locale = LocaleUtil.fromLanguageId(languageId);
\r
3524 return getPortletTitle(portletId, locale);
\r
3527 public String getPortletTitle(String portletId, User user) {
\r
3528 return LanguageUtil.get(
\r
3530 JavaConstants.JAVAX_PORTLET_TITLE.concat(StringPool.PERIOD).concat(
\r
3534 public String getPortletXmlFileName() throws SystemException {
\r
3535 if (PrefsPropsUtil.getBoolean(
\r
3536 PropsKeys.AUTO_DEPLOY_CUSTOM_PORTLET_XML,
\r
3537 PropsValues.AUTO_DEPLOY_CUSTOM_PORTLET_XML)) {
\r
3539 return PORTLET_XML_FILE_NAME_CUSTOM;
\r
3542 return PORTLET_XML_FILE_NAME_STANDARD;
\r
3546 public PortletPreferences getPreferences(HttpServletRequest request) {
\r
3547 RenderRequest renderRequest = (RenderRequest)request.getAttribute(
\r
3548 JavaConstants.JAVAX_PORTLET_REQUEST);
\r
3550 PortletPreferences portletPreferences = null;
\r
3552 if (renderRequest != null) {
\r
3553 PortletPreferencesWrapper portletPreferencesWrapper =
\r
3554 (PortletPreferencesWrapper)renderRequest.getPreferences();
\r
3556 portletPreferences =
\r
3557 portletPreferencesWrapper.getPortletPreferencesImpl();
\r
3560 return portletPreferences;
\r
3563 public PreferencesValidator getPreferencesValidator(Portlet portlet) {
\r
3564 PortletBag portletBag = PortletBagPool.get(portlet.getRootPortletId());
\r
3566 return portletBag.getPreferencesValidatorInstance();
\r
3569 public String getRelativeHomeURL(HttpServletRequest request)
\r
3570 throws PortalException, SystemException {
\r
3572 Company company = getCompany(request);
\r
3574 String homeURL = company.getHomeURL();
\r
3576 if (Validator.isNull(homeURL)) {
\r
3577 homeURL = PropsValues.COMPANY_DEFAULT_HOME_URL;
\r
3583 public long getScopeGroupId(HttpServletRequest request)
\r
3584 throws PortalException, SystemException {
\r
3586 String portletId = getPortletId(request);
\r
3588 return getScopeGroupId(request, portletId);
\r
3591 public long getScopeGroupId(HttpServletRequest request, String portletId)
\r
3592 throws PortalException, SystemException {
\r
3594 return getScopeGroupId(request, portletId, false);
\r
3597 public long getScopeGroupId(
\r
3598 HttpServletRequest request, String portletId,
\r
3599 boolean checkStagingGroup)
\r
3600 throws PortalException, SystemException {
\r
3602 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
\r
3604 long scopeGroupId = 0;
\r
3606 if (layout != null) {
\r
3607 Group group = layout.getGroup();
\r
3609 if (group.isControlPanel()) {
\r
3610 long doAsGroupId = ParamUtil.getLong(request, "doAsGroupId");
\r
3612 Group doAsGroup = GroupLocalServiceUtil.fetchGroup(doAsGroupId);
\r
3614 if ((doAsGroupId <= 0) || (doAsGroup == null)) {
\r
3615 doAsGroupId = getDefaultScopeGroupId(group.getCompanyId());
\r
3618 if (doAsGroupId > 0) {
\r
3619 scopeGroupId = doAsGroupId;
\r
3622 group = GroupLocalServiceUtil.fetchGroup(scopeGroupId);
\r
3624 if ((group != null) && group.hasStagingGroup()) {
\r
3626 Group stagingGroup = group.getStagingGroup();
\r
3628 scopeGroupId = stagingGroup.getGroupId();
\r
3630 catch (Exception e) {
\r
3635 if ((portletId != null) &&
\r
3636 (group.isStaged() || group.isStagingGroup())) {
\r
3638 Group liveGroup = group;
\r
3640 if (group.isStagingGroup()) {
\r
3641 liveGroup = group.getLiveGroup();
\r
3644 if (liveGroup.isStaged() &&
\r
3645 !liveGroup.isStagedPortlet(portletId)) {
\r
3647 Layout liveGroupLayout =
\r
3648 LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
\r
3649 layout.getUuid(), liveGroup.getGroupId());
\r
3651 if ((liveGroupLayout != null) &&
\r
3652 liveGroupLayout.hasScopeGroup()) {
\r
3654 scopeGroupId = getScopeGroupId(
\r
3655 liveGroupLayout, portletId);
\r
3657 else if (checkStagingGroup &&
\r
3658 !liveGroup.isStagedRemotely()) {
\r
3660 Group stagingGroup = liveGroup.getStagingGroup();
\r
3662 scopeGroupId = stagingGroup.getGroupId();
\r
3665 scopeGroupId = liveGroup.getGroupId();
\r
3671 if (scopeGroupId <= 0) {
\r
3672 scopeGroupId = getScopeGroupId(layout, portletId);
\r
3675 return scopeGroupId;
\r
3678 public long getScopeGroupId(Layout layout) {
\r
3679 if (layout == null) {
\r
3683 return layout.getGroupId();
\r
3687 public long getScopeGroupId(Layout layout, String portletId) {
\r
3688 if (layout == null) {
\r
3692 if (Validator.isNull(portletId)) {
\r
3693 return layout.getGroupId();
\r
3696 boolean strict = PortletPreferencesThreadLocal.isStrict();
\r
3698 PortletPreferencesThreadLocal.setStrict(true);
\r
3701 PortletPreferences portletSetup =
\r
3702 PortletPreferencesFactoryUtil.getLayoutPortletSetup(
\r
3703 layout, portletId);
\r
3705 String scopeType = GetterUtil.getString(
\r
3706 portletSetup.getValue("lfrScopeType", null));
\r
3708 if (Validator.isNull(scopeType)) {
\r
3709 return layout.getGroupId();
\r
3712 if (scopeType.equals("company")) {
\r
3713 Group companyGroup = GroupLocalServiceUtil.getCompanyGroup(
\r
3714 layout.getCompanyId());
\r
3716 return companyGroup.getGroupId();
\r
3719 String scopeLayoutUuid = GetterUtil.getString(
\r
3720 portletSetup.getValue("lfrScopeLayoutUuid", null));
\r
3722 Layout scopeLayout =
\r
3723 LayoutLocalServiceUtil.getLayoutByUuidAndGroupId(
\r
3724 scopeLayoutUuid, layout.getGroupId());
\r
3726 Group scopeGroup = scopeLayout.getScopeGroup();
\r
3728 return scopeGroup.getGroupId();
\r
3731 catch (Exception e) {
\r
3732 return layout.getGroupId();
\r
3735 PortletPreferencesThreadLocal.setStrict(strict);
\r
3739 public long getScopeGroupId(long plid) {
\r
3740 Layout layout = null;
\r
3743 layout = LayoutLocalServiceUtil.getLayout(plid);
\r
3745 catch (Exception e) {
\r
3748 return getScopeGroupId(layout);
\r
3751 public long getScopeGroupId(PortletRequest portletRequest)
\r
3752 throws PortalException, SystemException {
\r
3754 return getScopeGroupId(getHttpServletRequest(portletRequest));
\r
3757 public User getSelectedUser(HttpServletRequest request)
\r
3758 throws PortalException, SystemException {
\r
3760 return getSelectedUser(request, true);
\r
3763 public User getSelectedUser(
\r
3764 HttpServletRequest request, boolean checkPermission)
\r
3765 throws PortalException, SystemException {
\r
3767 long userId = ParamUtil.getLong(request, "p_u_i_d");
\r
3772 if (checkPermission) {
\r
3773 user = UserServiceUtil.getUserById(userId);
\r
3776 user = UserLocalServiceUtil.getUserById(userId);
\r
3779 catch (NoSuchUserException nsue) {
\r
3785 public User getSelectedUser(PortletRequest portletRequest)
\r
3786 throws PortalException, SystemException {
\r
3788 return getSelectedUser(portletRequest, true);
\r
3791 public User getSelectedUser(
\r
3792 PortletRequest portletRequest, boolean checkPermission)
\r
3793 throws PortalException, SystemException {
\r
3795 return getSelectedUser(
\r
3796 getHttpServletRequest(portletRequest), checkPermission);
\r
3799 public ServletContext getServletContext(
\r
3800 Portlet portlet, ServletContext servletContext) {
\r
3802 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
\r
3803 portlet, servletContext);
\r
3805 PortletContextImpl portletContextImpl =
\r
3806 (PortletContextImpl)portletConfig.getPortletContext();
\r
3808 return portletContextImpl.getServletContext();
\r
3811 public String getSiteLoginURL(ThemeDisplay themeDisplay)
\r
3812 throws PortalException, SystemException {
\r
3814 if (Validator.isNull(PropsValues.AUTH_LOGIN_SITE_URL)) {
\r
3818 List<Layout> layouts = themeDisplay.getUnfilteredLayouts();
\r
3820 if (layouts == null) {
\r
3824 for (Layout layout : layouts) {
\r
3825 String friendlyURL = layout.getFriendlyURL();
\r
3827 if (friendlyURL.equals(PropsValues.AUTH_LOGIN_SITE_URL)) {
\r
3828 if (themeDisplay.getLayout() == null) {
\r
3832 String layoutSetFriendlyURL = getLayoutSetFriendlyURL(
\r
3833 layout.getLayoutSet(), themeDisplay);
\r
3835 return layoutSetFriendlyURL + PropsValues.AUTH_LOGIN_SITE_URL;
\r
3842 public String getStaticResourceURL(HttpServletRequest request, String uri) {
\r
3843 return getStaticResourceURL(request, uri, null, 0);
\r
3846 public String getStaticResourceURL(
\r
3847 HttpServletRequest request, String uri, long timestamp) {
\r
3849 return getStaticResourceURL(request, uri, null, timestamp);
\r
3852 public String getStaticResourceURL(
\r
3853 HttpServletRequest request, String uri, String queryString) {
\r
3855 return getStaticResourceURL(request, uri, queryString, 0);
\r
3858 public String getStaticResourceURL(
\r
3859 HttpServletRequest request, String uri, String queryString,
\r
3862 if (uri.indexOf(CharPool.QUESTION) != -1) {
\r
3866 if (uri.startsWith(StringPool.DOUBLE_SLASH)) {
\r
3867 uri = uri.substring(1);
\r
3870 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
3871 WebKeys.THEME_DISPLAY);
\r
3873 Theme theme = themeDisplay.getTheme();
\r
3874 ColorScheme colorScheme = themeDisplay.getColorScheme();
\r
3876 Map<String, String[]> parameterMap = null;
\r
3878 if (Validator.isNotNull(queryString)) {
\r
3879 parameterMap = HttpUtil.getParameterMap(queryString);
\r
3882 StringBundler sb = new StringBundler();
\r
3887 sb.append(StringPool.QUESTION);
\r
3891 if ((parameterMap == null) || !parameterMap.containsKey("browserId")) {
\r
3892 sb.append("&browserId=");
\r
3893 sb.append(BrowserSnifferUtil.getBrowserId(request));
\r
3896 // Theme and color scheme
\r
3898 if ((uri.endsWith(".css") || uri.endsWith(".jsp")) &&
\r
3899 ((parameterMap == null) || !parameterMap.containsKey("themeId"))) {
\r
3901 sb.append("&themeId=");
\r
3902 sb.append(theme.getThemeId());
\r
3905 if (uri.endsWith(".jsp") &&
\r
3906 ((parameterMap == null) ||
\r
3907 !parameterMap.containsKey("colorSchemeId"))) {
\r
3909 sb.append("&colorSchemeId=");
\r
3910 sb.append(colorScheme.getColorSchemeId());
\r
3915 if ((parameterMap == null) ||
\r
3916 !parameterMap.containsKey("minifierType")) {
\r
3918 String minifierType = StringPool.BLANK;
\r
3920 if (uri.endsWith(".css") || uri.endsWith("css.jsp") ||
\r
3921 (uri.endsWith(".jsp") && uri.contains("/css/"))) {
\r
3923 if (themeDisplay.isThemeCssFastLoad()) {
\r
3924 minifierType = "css";
\r
3927 else if (themeDisplay.isThemeJsFastLoad()) {
\r
3928 minifierType = "js";
\r
3931 if (Validator.isNotNull(minifierType)) {
\r
3932 sb.append("&minifierType=");
\r
3933 sb.append(minifierType);
\r
3939 if (Validator.isNotNull(queryString)) {
\r
3940 if (!queryString.startsWith(StringPool.AMPERSAND)) {
\r
3941 sb.append(StringPool.AMPERSAND);
\r
3944 sb.append(queryString);
\r
3949 sb.append("&languageId=");
\r
3950 sb.append(themeDisplay.getLanguageId());
\r
3955 sb.append(ReleaseInfo.getBuildNumber());
\r
3959 if ((parameterMap == null) || !parameterMap.containsKey("t")) {
\r
3960 if ((timestamp == 0) && uri.startsWith(StrutsUtil.TEXT_HTML_DIR)) {
\r
3961 ServletContext servletContext =
\r
3962 (ServletContext)request.getAttribute(WebKeys.CTX);
\r
3964 timestamp = FileTimestampUtil.getTimestamp(servletContext, uri);
\r
3967 if (timestamp == 0) {
\r
3968 timestamp = theme.getTimestamp();
\r
3972 sb.append(timestamp);
\r
3975 String url = sb.toString();
\r
3977 url = StringUtil.replace(url, "?&", StringPool.QUESTION);
\r
3982 public String getStrutsAction(HttpServletRequest request) {
\r
3983 String strutsAction = ParamUtil.getString(request, "struts_action");
\r
3985 if (Validator.isNotNull(strutsAction)) {
\r
3987 // This method should only return a Struts action if you're dealing
\r
3988 // with a regular HTTP servlet request, not a portlet HTTP servlet
\r
3991 return StringPool.BLANK;
\r
3994 return getPortletParam(request, "struts_action");
\r
3997 public String[] getSystemGroups() {
\r
3998 return _allSystemGroups;
\r
4001 public String[] getSystemOrganizationRoles() {
\r
4002 return _allSystemOrganizationRoles;
\r
4005 public String[] getSystemRoles() {
\r
4006 return _allSystemRoles;
\r
4009 public String[] getSystemSiteRoles() {
\r
4010 return _allSystemSiteRoles;
\r
4013 public String getUniqueElementId(
\r
4014 HttpServletRequest request, String namespace, String elementId) {
\r
4016 String uniqueElementId = elementId;
\r
4018 Set<String> uniqueElementIds = (Set<String>)request.getAttribute(
\r
4019 WebKeys.UNIQUE_ELEMENT_IDS);
\r
4021 if (uniqueElementIds == null) {
\r
4022 uniqueElementIds = new HashSet<String>();
\r
4024 request.setAttribute(WebKeys.UNIQUE_ELEMENT_IDS, uniqueElementIds);
\r
4029 while (uniqueElementIds.contains(
\r
4030 namespace.concat(uniqueElementId))) {
\r
4032 uniqueElementId = elementId.concat(StringPool.UNDERLINE).concat(
\r
4033 String.valueOf(i));
\r
4039 uniqueElementIds.add(namespace.concat(uniqueElementId));
\r
4041 return uniqueElementId;
\r
4044 public String getUniqueElementId(
\r
4045 PortletRequest request, String namespace, String elementId) {
\r
4047 return getUniqueElementId(
\r
4048 getHttpServletRequest(request), namespace, elementId);
\r
4051 public UploadPortletRequest getUploadPortletRequest(
\r
4052 PortletRequest portletRequest) {
\r
4054 PortletRequestImpl portletRequestImpl =
\r
4055 (PortletRequestImpl)portletRequest;
\r
4057 DynamicServletRequest dynamicRequest =
\r
4058 (DynamicServletRequest)portletRequestImpl.getHttpServletRequest();
\r
4060 HttpServletRequestWrapper requestWrapper =
\r
4061 (HttpServletRequestWrapper)dynamicRequest.getRequest();
\r
4063 UploadServletRequest uploadServletRequest = getUploadServletRequest(
\r
4066 return new UploadPortletRequestImpl(
\r
4067 uploadServletRequest,
\r
4068 getPortletNamespace(portletRequestImpl.getPortletName()));
\r
4071 public UploadServletRequest getUploadServletRequest(
\r
4072 HttpServletRequest request) {
\r
4074 HttpServletRequestWrapper requestWrapper = null;
\r
4076 if (request instanceof HttpServletRequestWrapper) {
\r
4077 requestWrapper = (HttpServletRequestWrapper)request;
\r
4080 UploadServletRequest uploadServletRequest = null;
\r
4082 while (uploadServletRequest == null) {
\r
4084 // Find the underlying UploadServletRequest wrapper. For example,
\r
4085 // WebSphere wraps all requests with ProtectedServletRequest.
\r
4087 if (requestWrapper instanceof UploadServletRequest) {
\r
4088 uploadServletRequest = (UploadServletRequest)requestWrapper;
\r
4091 HttpServletRequest parentRequest =
\r
4092 (HttpServletRequest)requestWrapper.getRequest();
\r
4094 if (!(parentRequest instanceof HttpServletRequestWrapper)) {
\r
4096 // This block should never be reached unless this method is
\r
4097 // called from a hot deployable portlet. See LayoutAction.
\r
4099 uploadServletRequest = new UploadServletRequestImpl(
\r
4105 requestWrapper = (HttpServletRequestWrapper)parentRequest;
\r
4110 return uploadServletRequest;
\r
4113 public Date getUptime() {
\r
4117 public String getURLWithSessionId(String url, String sessionId) {
\r
4118 if (!PropsValues.SESSION_ENABLE_URL_WITH_SESSION_ID) {
\r
4122 if (Validator.isNull(url)) {
\r
4128 int x = url.indexOf(CharPool.SEMICOLON);
\r
4134 x = url.indexOf(CharPool.QUESTION);
\r
4137 StringBundler sb = new StringBundler(4);
\r
4139 sb.append(url.substring(0, x));
\r
4140 sb.append(_JSESSIONID);
\r
4141 sb.append(sessionId);
\r
4142 sb.append(url.substring(x));
\r
4144 return sb.toString();
\r
4147 // In IE6, http://www.abc.com;jsessionid=XYZ does not work, but
\r
4148 // http://www.abc.com/;jsessionid=XYZ does work.
\r
4150 x = url.indexOf(StringPool.DOUBLE_SLASH);
\r
4152 StringBundler sb = new StringBundler(4);
\r
4157 int y = url.lastIndexOf(CharPool.SLASH);
\r
4159 if ((x + 1) == y) {
\r
4160 sb.append(StringPool.SLASH);
\r
4164 sb.append(_JSESSIONID);
\r
4165 sb.append(sessionId);
\r
4167 return sb.toString();
\r
4170 public User getUser(HttpServletRequest request)
\r
4171 throws PortalException, SystemException {
\r
4173 User user = (User)request.getAttribute(WebKeys.USER);
\r
4175 if (user != null) {
\r
4179 long userId = getUserId(request);
\r
4181 if (userId <= 0) {
\r
4183 // Portlet WARs may have the correct remote user and not have the
\r
4184 // correct user id because the user id is saved in the session
\r
4185 // and may not be accessible by the portlet WAR's session. This
\r
4186 // behavior is inconsistent across different application servers.
\r
4188 String remoteUser = request.getRemoteUser();
\r
4190 if (remoteUser == null) {
\r
4194 userId = GetterUtil.getLong(remoteUser);
\r
4197 user = UserLocalServiceUtil.getUserById(userId);
\r
4199 request.setAttribute(WebKeys.USER, user);
\r
4204 public User getUser(PortletRequest portletRequest)
\r
4205 throws PortalException, SystemException {
\r
4207 return getUser(getHttpServletRequest(portletRequest));
\r
4210 public String getUserEmailAddress(long userId) throws SystemException {
\r
4212 User user = UserLocalServiceUtil.getUserById(userId);
\r
4214 return user.getEmailAddress();
\r
4216 catch (PortalException pe) {
\r
4217 return StringPool.BLANK;
\r
4221 public long getUserId(HttpServletRequest request) {
\r
4222 Long userIdObj = (Long)request.getAttribute(WebKeys.USER_ID);
\r
4224 if (userIdObj != null) {
\r
4225 return userIdObj.longValue();
\r
4228 String path = GetterUtil.getString(request.getPathInfo());
\r
4229 String strutsAction = getStrutsAction(request);
\r
4230 String actionName = getPortletParam(request, "actionName");
\r
4232 boolean alwaysAllowDoAsUser = false;
\r
4234 if (path.equals("/portal/session_click") ||
\r
4235 strutsAction.equals("/document_library/edit_file_entry") ||
\r
4236 strutsAction.equals("/document_library_display/edit_file_entry") ||
\r
4237 strutsAction.equals("/image_gallery_display/edit_file_entry") ||
\r
4238 strutsAction.equals("/image_gallery_display/edit_image") ||
\r
4239 strutsAction.equals("/wiki/edit_page_attachment") ||
\r
4240 strutsAction.equals("/wiki_admin/edit_page_attachment") ||
\r
4241 strutsAction.equals("/wiki_display/edit_page_attachment") ||
\r
4242 actionName.equals("addFile")) {
\r
4245 alwaysAllowDoAsUser = isAlwaysAllowDoAsUser(request);
\r
4247 catch (Exception e) {
\r
4252 HttpSession session = request.getSession();
\r
4253 userIdObj = (Long)session.getAttribute(WebKeys.USER_ID);
\r
4255 if ((!PropsValues.PORTAL_JAAS_ENABLE &&
\r
4256 PropsValues.PORTAL_IMPERSONATION_ENABLE) ||
\r
4257 alwaysAllowDoAsUser) {
\r
4259 String doAsUserIdString = ParamUtil.getString(
\r
4260 request, "doAsUserId", "");
\r
4263 // Usurpation de la personne via cookie
\r
4264 if(doAsUserIdString.equals("") && userIdObj != null){
\r
4265 doAsUserIdString = CookieUtil.get(request, "DO_AS_USER_ID_" + userIdObj);
\r
4267 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
4268 WebKeys.THEME_DISPLAY);
\r
4269 if (Validator.isNotNull(themeDisplay) && Validator.isNull(themeDisplay.getDoAsUserId())) {
\r
4270 themeDisplay.setDoAsUserId(doAsUserIdString);
\r
4274 // Obtention du doAsUserId
\r
4275 if(Validator.isNotNull(doAsUserIdString)){
\r
4276 long doAsUserId = getDoAsUserId(
\r
4277 request, doAsUserIdString, alwaysAllowDoAsUser);
\r
4279 if (doAsUserId > 0) {
\r
4280 if (_log.isDebugEnabled()) {
\r
4281 _log.debug("Impersonating user " + doAsUserId);
\r
4284 return doAsUserId;
\r
4288 catch (Exception e) {
\r
4289 _log.error("Unable to impersonate user " + doAsUserIdString, e);
\r
4293 String jRemoteUser = null;
\r
4295 if (PropsValues.PORTAL_JAAS_ENABLE) {
\r
4296 jRemoteUser = (String)session.getAttribute("j_remoteuser");
\r
4299 if (Validator.isNotNull(jRemoteUser)) {
\r
4300 userIdObj = GetterUtil.getLong(jRemoteUser);
\r
4303 userIdObj = (Long)session.getAttribute(WebKeys.USER_ID);
\r
4306 if (userIdObj != null) {
\r
4307 request.setAttribute(WebKeys.USER_ID, userIdObj);
\r
4309 return userIdObj.longValue();
\r
4316 public long getUserId(PortletRequest portletRequest) {
\r
4317 return getUserId(getHttpServletRequest(portletRequest));
\r
4320 public String getUserName(long userId, String defaultUserName) {
\r
4321 return getUserName(
\r
4322 userId, defaultUserName, UserAttributes.USER_NAME_FULL);
\r
4325 public String getUserName(
\r
4326 long userId, String defaultUserName, HttpServletRequest request) {
\r
4328 return getUserName(
\r
4329 userId, defaultUserName, UserAttributes.USER_NAME_FULL, request);
\r
4332 public String getUserName(
\r
4333 long userId, String defaultUserName, String userAttribute) {
\r
4335 return getUserName(userId, defaultUserName, userAttribute, null);
\r
4338 public String getUserName(
\r
4339 long userId, String defaultUserName, String userAttribute,
\r
4340 HttpServletRequest request) {
\r
4342 String userName = defaultUserName;
\r
4345 User user = UserLocalServiceUtil.getUserById(userId);
\r
4347 if (userAttribute.equals(UserAttributes.USER_NAME_FULL)) {
\r
4348 userName = user.getFullName();
\r
4351 userName = user.getScreenName();
\r
4354 if (request != null) {
\r
4355 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
\r
4357 PortletURL portletURL = new PortletURLImpl(
\r
4358 request, PortletKeys.DIRECTORY, layout.getPlid(),
\r
4359 PortletRequest.RENDER_PHASE);
\r
4361 portletURL.setWindowState(WindowState.MAXIMIZED);
\r
4362 portletURL.setPortletMode(PortletMode.VIEW);
\r
4364 portletURL.setParameter(
\r
4365 "struts_action", "/directory/view_user");
\r
4366 portletURL.setParameter(
\r
4367 "p_u_i_d", String.valueOf(user.getUserId()));
\r
4370 "<a href=\"" + portletURL.toString() + "\">" +
\r
4371 HtmlUtil.escape(userName) + "</a>";
\r
4374 catch (Exception e) {
\r
4380 public String getUserPassword(HttpServletRequest request) {
\r
4381 HttpSession session = request.getSession();
\r
4383 return getUserPassword(session);
\r
4386 public String getUserPassword(HttpSession session) {
\r
4387 return (String)session.getAttribute(WebKeys.USER_PASSWORD);
\r
4390 public String getUserPassword(PortletRequest portletRequest) {
\r
4391 return getUserPassword(getHttpServletRequest(portletRequest));
\r
4394 public String getUserValue(long userId, String param, String defaultValue)
\r
4395 throws SystemException {
\r
4397 if (Validator.isNotNull(defaultValue)) {
\r
4398 return defaultValue;
\r
4402 User user = UserLocalServiceUtil.getUserById(userId);
\r
4404 return BeanPropertiesUtil.getString(user, param, defaultValue);
\r
4406 catch (PortalException pe) {
\r
4407 return StringPool.BLANK;
\r
4412 public long getValidUserId(long companyId, long userId)
\r
4413 throws PortalException, SystemException {
\r
4416 User user = UserLocalServiceUtil.getUser(userId);
\r
4418 if (user.getCompanyId() == companyId) {
\r
4419 return user.getUserId();
\r
4425 catch (NoSuchUserException nsue) {
\r
4426 return UserLocalServiceUtil.getDefaultUserId(companyId);
\r
4430 public String getVirtualLayoutActualURL(
\r
4431 long groupId, boolean privateLayout, String mainPath,
\r
4432 String friendlyURL, Map<String, String[]> params,
\r
4433 Map<String, Object> requestContext)
\r
4434 throws PortalException, SystemException {
\r
4436 // Group friendly URL
\r
4438 String groupFriendlyURL = null;
\r
4440 int pos = friendlyURL.indexOf(CharPool.SLASH, 3);
\r
4443 groupFriendlyURL = friendlyURL.substring(2, pos);
\r
4446 if (Validator.isNull(groupFriendlyURL)) {
\r
4450 HttpServletRequest request = (HttpServletRequest)requestContext.get(
\r
4453 long companyId = PortalInstances.getCompanyId(request);
\r
4455 Group group = GroupLocalServiceUtil.fetchFriendlyURLGroup(
\r
4456 companyId, groupFriendlyURL);
\r
4458 if (group == null) {
\r
4462 // Layout friendly URL
\r
4464 String layoutFriendlyURL = null;
\r
4466 if ((pos != -1) && ((pos + 1) != friendlyURL.length())) {
\r
4467 layoutFriendlyURL = friendlyURL.substring(pos);
\r
4470 if (Validator.isNull(layoutFriendlyURL)) {
\r
4474 String actualURL = getActualURL(
\r
4475 group.getGroupId(), privateLayout, mainPath, layoutFriendlyURL,
\r
4476 params, requestContext);
\r
4478 return HttpUtil.addParameter(
\r
4479 HttpUtil.removeParameter(actualURL, "p_v_l_s_g_id"), "p_v_l_s_g_id",
\r
4483 public String getWidgetURL(Portlet portlet, ThemeDisplay themeDisplay)
\r
4484 throws PortalException, SystemException {
\r
4486 return getServletURL(
\r
4487 portlet, PropsValues.WIDGET_SERVLET_MAPPING, themeDisplay);
\r
4490 public void initCustomSQL() {
\r
4491 _customSqlKeys = new String[] {
\r
4492 "[$CLASS_NAME_ID_COM.LIFERAY.PORTAL.MODEL.GROUP$]",
\r
4493 "[$CLASS_NAME_ID_COM.LIFERAY.PORTAL.MODEL.LAYOUT$]",
\r
4494 "[$CLASS_NAME_ID_COM.LIFERAY.PORTAL.MODEL.ORGANIZATION$]",
\r
4495 "[$CLASS_NAME_ID_COM.LIFERAY.PORTAL.MODEL.ROLE$]",
\r
4496 "[$CLASS_NAME_ID_COM.LIFERAY.PORTAL.MODEL.USER$]",
\r
4497 "[$CLASS_NAME_ID_COM.LIFERAY.PORTAL.MODEL.USERGROUP$]",
\r
4498 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.BLOGS.MODEL.BLOGSENTRY$]",
\r
4499 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.BOOKMARKS.MODEL." +
\r
4500 "BOOKMARKSENTRY$]",
\r
4501 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.CALENDAR.MODEL.CALEVENT$]",
\r
4502 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.DOCUMENTLIBRARY.MODEL." +
\r
4504 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.MESSAGEBOARDS.MODEL." +
\r
4506 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.MESSAGEBOARDS.MODEL." +
\r
4508 "[$CLASS_NAME_ID_COM.LIFERAY.PORTLET.WIKI.MODEL.WIKIPAGE$]",
\r
4509 "[$RESOURCE_SCOPE_COMPANY$]", "[$RESOURCE_SCOPE_GROUP$]",
\r
4510 "[$RESOURCE_SCOPE_GROUP_TEMPLATE$]",
\r
4511 "[$RESOURCE_SCOPE_INDIVIDUAL$]",
\r
4512 "[$SOCIAL_RELATION_TYPE_BI_COWORKER$]",
\r
4513 "[$SOCIAL_RELATION_TYPE_BI_FRIEND$]",
\r
4514 "[$SOCIAL_RELATION_TYPE_BI_ROMANTIC_PARTNER$]",
\r
4515 "[$SOCIAL_RELATION_TYPE_BI_SIBLING$]",
\r
4516 "[$SOCIAL_RELATION_TYPE_BI_SPOUSE$]",
\r
4517 "[$SOCIAL_RELATION_TYPE_UNI_CHILD$]",
\r
4518 "[$SOCIAL_RELATION_TYPE_UNI_ENEMY$]",
\r
4519 "[$SOCIAL_RELATION_TYPE_UNI_FOLLOWER$]",
\r
4520 "[$SOCIAL_RELATION_TYPE_UNI_PARENT$]",
\r
4521 "[$SOCIAL_RELATION_TYPE_UNI_SUBORDINATE$]",
\r
4522 "[$SOCIAL_RELATION_TYPE_UNI_SUPERVISOR$]", "[$FALSE$]", "[$TRUE$]"
\r
4525 DB db = DBFactoryUtil.getDB();
\r
4527 Object[] customSqlValues = new Object[] {
\r
4528 getClassNameId(Group.class), getClassNameId(Layout.class),
\r
4529 getClassNameId(Organization.class), getClassNameId(Role.class),
\r
4530 getClassNameId(User.class), getClassNameId(UserGroup.class),
\r
4531 getClassNameId(BlogsEntry.class),
\r
4532 getClassNameId(BookmarksEntry.class),
\r
4533 getClassNameId(CalEvent.class), getClassNameId(DLFileEntry.class),
\r
4534 getClassNameId(MBMessage.class), getClassNameId(MBThread.class),
\r
4535 getClassNameId(WikiPage.class), ResourceConstants.SCOPE_COMPANY,
\r
4536 ResourceConstants.SCOPE_GROUP,
\r
4537 ResourceConstants.SCOPE_GROUP_TEMPLATE,
\r
4538 ResourceConstants.SCOPE_INDIVIDUAL,
\r
4539 SocialRelationConstants.TYPE_BI_COWORKER,
\r
4540 SocialRelationConstants.TYPE_BI_FRIEND,
\r
4541 SocialRelationConstants.TYPE_BI_ROMANTIC_PARTNER,
\r
4542 SocialRelationConstants.TYPE_BI_SIBLING,
\r
4543 SocialRelationConstants.TYPE_BI_SPOUSE,
\r
4544 SocialRelationConstants.TYPE_UNI_CHILD,
\r
4545 SocialRelationConstants.TYPE_UNI_ENEMY,
\r
4546 SocialRelationConstants.TYPE_UNI_FOLLOWER,
\r
4547 SocialRelationConstants.TYPE_UNI_PARENT,
\r
4548 SocialRelationConstants.TYPE_UNI_SUBORDINATE,
\r
4549 SocialRelationConstants.TYPE_UNI_SUPERVISOR, db.getTemplateFalse(),
\r
4550 db.getTemplateTrue()
\r
4553 _customSqlValues = ArrayUtil.toStringArray(customSqlValues);
\r
4556 public boolean isAllowAddPortletDefaultResource(
\r
4557 HttpServletRequest request, Portlet portlet)
\r
4558 throws PortalException, SystemException {
\r
4560 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
4561 WebKeys.THEME_DISPLAY);
\r
4563 Layout layout = themeDisplay.getLayout();
\r
4564 LayoutTypePortlet layoutTypePortlet =
\r
4565 themeDisplay.getLayoutTypePortlet();
\r
4567 String portletId = portlet.getPortletId();
\r
4569 Boolean renderPortletResource = (Boolean)request.getAttribute(
\r
4570 WebKeys.RENDER_PORTLET_RESOURCE);
\r
4572 if (renderPortletResource != null) {
\r
4573 boolean runtimePortlet = renderPortletResource.booleanValue();
\r
4575 if (runtimePortlet) {
\r
4580 if (layout.isTypePanel() &&
\r
4581 isPanelSelectedPortlet(themeDisplay, portletId)) {
\r
4586 if (layout.isTypeControlPanel() &&
\r
4587 isControlPanelPortlet(portletId, themeDisplay)) {
\r
4592 if (layout.isTypePortlet()) {
\r
4593 String checkPortletId = portletId;
\r
4595 String outerPortletId = getOuterPortletId(request);
\r
4597 if (outerPortletId != null) {
\r
4598 checkPortletId = outerPortletId;
\r
4601 if (layoutTypePortlet.hasPortletId(checkPortletId)) {
\r
4605 String resourcePrimKey = PortletPermissionUtil.getPrimaryKey(
\r
4606 themeDisplay.getPlid(), portletId);
\r
4608 if (ResourcePermissionLocalServiceUtil.getResourcePermissionsCount(
\r
4609 themeDisplay.getCompanyId(), portlet.getPortletName(),
\r
4610 ResourceConstants.SCOPE_INDIVIDUAL, resourcePrimKey) > 0) {
\r
4616 if (themeDisplay.isSignedIn() &&
\r
4617 (portletId.equals(PortletKeys.LAYOUT_CONFIGURATION) ||
\r
4618 portletId.equals(PortletKeys.LAYOUTS_ADMIN))) {
\r
4620 PermissionChecker permissionChecker =
\r
4621 themeDisplay.getPermissionChecker();
\r
4623 Group group = layout.getGroup();
\r
4625 if (group.isSite()) {
\r
4626 if (LayoutPermissionUtil.contains(
\r
4627 permissionChecker, layout, ActionKeys.CUSTOMIZE) ||
\r
4628 LayoutPermissionUtil.contains(
\r
4629 permissionChecker, layout, ActionKeys.UPDATE)) {
\r
4635 if (group.isCompany()) {
\r
4636 if (permissionChecker.isCompanyAdmin()) {
\r
4640 else if (group.isLayoutPrototype()) {
\r
4641 long layoutPrototypeId = group.getClassPK();
\r
4643 if (LayoutPrototypePermissionUtil.contains(
\r
4644 permissionChecker, layoutPrototypeId,
\r
4645 ActionKeys.UPDATE)) {
\r
4650 else if (group.isLayoutSetPrototype()) {
\r
4651 long layoutSetPrototypeId = group.getClassPK();
\r
4653 if (LayoutSetPrototypePermissionUtil.contains(
\r
4654 permissionChecker, layoutSetPrototypeId,
\r
4655 ActionKeys.UPDATE)) {
\r
4660 else if (group.isOrganization()) {
\r
4661 long organizationId = group.getOrganizationId();
\r
4663 if (OrganizationPermissionUtil.contains(
\r
4664 permissionChecker, organizationId, ActionKeys.UPDATE)) {
\r
4669 else if (group.isUserGroup()) {
\r
4670 long scopeGroupId = themeDisplay.getScopeGroupId();
\r
4672 if (GroupPermissionUtil.contains(
\r
4673 permissionChecker, scopeGroupId, ActionKeys.UPDATE)) {
\r
4678 else if (group.isUser()) {
\r
4683 if (!portlet.isAddDefaultResource()) {
\r
4687 if (!PropsValues.PORTLET_ADD_DEFAULT_RESOURCE_CHECK_ENABLED) {
\r
4691 if (_portletAddDefaultResourceCheckWhitelist.contains(portletId)) {
\r
4695 String namespace = getPortletNamespace(portletId);
\r
4697 String strutsAction = ParamUtil.getString(
\r
4698 request, namespace + "struts_action");
\r
4700 if (Validator.isNull(strutsAction)) {
\r
4701 strutsAction = ParamUtil.getString(request, "struts_action");
\r
4704 if (_portletAddDefaultResourceCheckWhitelistActions.contains(
\r
4710 String requestPortletAuthenticationToken = ParamUtil.getString(
\r
4711 request, "p_p_auth");
\r
4713 if (Validator.isNull(requestPortletAuthenticationToken)) {
\r
4714 HttpServletRequest originalRequest = getOriginalServletRequest(
\r
4717 requestPortletAuthenticationToken = ParamUtil.getString(
\r
4718 originalRequest, "p_p_auth");
\r
4721 if (Validator.isNotNull(requestPortletAuthenticationToken)) {
\r
4722 String actualPortletAuthenticationToken = AuthTokenUtil.getToken(
\r
4723 request, layout.getPlid(), portletId);
\r
4725 if (requestPortletAuthenticationToken.equals(
\r
4726 actualPortletAuthenticationToken)) {
\r
4735 public boolean isCDNDynamicResourcesEnabled(HttpServletRequest request)
\r
4736 throws PortalException, SystemException {
\r
4738 Company company = getCompany(request);
\r
4740 return isCDNDynamicResourcesEnabled(company.getCompanyId());
\r
4743 public boolean isCDNDynamicResourcesEnabled(long companyId) {
\r
4745 return PrefsPropsUtil.getBoolean(
\r
4746 companyId, PropsKeys.CDN_DYNAMIC_RESOURCES_ENABLED,
\r
4747 PropsValues.CDN_DYNAMIC_RESOURCES_ENABLED);
\r
4749 catch (SystemException se) {
\r
4752 return PropsValues.CDN_DYNAMIC_RESOURCES_ENABLED;
\r
4756 * @deprecated As of 6.1, renamed to {@link #isGroupAdmin(User, long)}
\r
4758 public boolean isCommunityAdmin(User user, long groupId) throws Exception {
\r
4759 return isGroupAdmin(user, groupId);
\r
4763 * @deprecated As of 6.1, renamed to {@link #isGroupOwner(User, long)}
\r
4765 public boolean isCommunityOwner(User user, long groupId) throws Exception {
\r
4766 return isGroupOwner(user, groupId);
\r
4769 public boolean isCompanyAdmin(User user) throws Exception {
\r
4770 PermissionChecker permissionChecker =
\r
4771 PermissionCheckerFactoryUtil.create(user);
\r
4773 return permissionChecker.isCompanyAdmin();
\r
4776 public boolean isCompanyControlPanelPortlet(
\r
4777 String portletId, String category, ThemeDisplay themeDisplay)
\r
4778 throws PortalException, SystemException {
\r
4780 PermissionChecker permissionChecker =
\r
4781 themeDisplay.getPermissionChecker();
\r
4783 if (permissionChecker.isCompanyAdmin()) {
\r
4787 Group companyGroup = GroupLocalServiceUtil.getCompanyGroup(
\r
4788 themeDisplay.getCompanyId());
\r
4790 themeDisplay.setScopeGroupId(companyGroup.getGroupId());
\r
4792 return isControlPanelPortlet(portletId, category, themeDisplay);
\r
4795 public boolean isCompanyControlPanelPortlet(
\r
4796 String portletId, ThemeDisplay themeDisplay)
\r
4797 throws PortalException, SystemException {
\r
4799 PermissionChecker permissionChecker =
\r
4800 themeDisplay.getPermissionChecker();
\r
4802 if (permissionChecker.isCompanyAdmin()) {
\r
4806 Group companyGroup = GroupLocalServiceUtil.getCompanyGroup(
\r
4807 themeDisplay.getCompanyId());
\r
4809 themeDisplay.setScopeGroupId(companyGroup.getGroupId());
\r
4811 return isControlPanelPortlet(portletId, themeDisplay);
\r
4814 public boolean isCompanyControlPanelVisible(ThemeDisplay themeDisplay)
\r
4815 throws PortalException, SystemException {
\r
4817 PermissionChecker permissionChecker =
\r
4818 themeDisplay.getPermissionChecker();
\r
4820 if (permissionChecker.isCompanyAdmin()) {
\r
4824 long scopeGroupId = themeDisplay.getScopeGroupId();
\r
4827 Group companyGroup = GroupLocalServiceUtil.getCompanyGroup(
\r
4828 themeDisplay.getCompanyId());
\r
4830 themeDisplay.setScopeGroupId(companyGroup.getGroupId());
\r
4832 List<Portlet> controlPanelPortlets = getControlPanelPortlets(
\r
4833 PortletCategoryKeys.CONTENT, themeDisplay);
\r
4835 if (!controlPanelPortlets.isEmpty()) {
\r
4843 themeDisplay.setScopeGroupId(scopeGroupId);
\r
4847 public boolean isControlPanelPortlet(
\r
4848 String portletId, String category, ThemeDisplay themeDisplay)
\r
4849 throws SystemException {
\r
4851 List<Portlet> portlets = getControlPanelPortlets(
\r
4852 category, themeDisplay);
\r
4854 for (Portlet portlet : portlets) {
\r
4855 if (portlet.getPortletId().equals(portletId)) {
\r
4863 public boolean isControlPanelPortlet(
\r
4864 String portletId, ThemeDisplay themeDisplay)
\r
4865 throws SystemException {
\r
4867 for (String category : PortletCategoryKeys.ALL) {
\r
4868 if (isControlPanelPortlet(portletId, category, themeDisplay)) {
\r
4876 public boolean isGroupAdmin(User user, long groupId) throws Exception {
\r
4877 PermissionChecker permissionChecker =
\r
4878 PermissionCheckerFactoryUtil.create(user);
\r
4880 return permissionChecker.isGroupAdmin(groupId);
\r
4883 public boolean isGroupOwner(User user, long groupId) throws Exception {
\r
4884 PermissionChecker permissionChecker =
\r
4885 PermissionCheckerFactoryUtil.create(user);
\r
4887 return permissionChecker.isGroupOwner(groupId);
\r
4890 public boolean isLayoutDescendant(Layout layout, long layoutId)
\r
4891 throws PortalException, SystemException {
\r
4893 if (layout.getLayoutId() == layoutId) {
\r
4897 for (Layout childLayout : layout.getChildren()) {
\r
4898 if (isLayoutDescendant(childLayout, layoutId)) {
\r
4907 public boolean isLayoutFirstPageable(Layout layout) {
\r
4908 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
\r
4910 return layoutSettings.isFirstPageable();
\r
4913 public boolean isLayoutFirstPageable(String type) {
\r
4914 LayoutSettings layoutSettings = LayoutSettings.getInstance(type);
\r
4916 return layoutSettings.isFirstPageable();
\r
4919 public boolean isLayoutFriendliable(Layout layout) {
\r
4920 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
\r
4922 return layoutSettings.isURLFriendliable();
\r
4925 public boolean isLayoutFriendliable(String type) {
\r
4926 LayoutSettings layoutSettings = LayoutSettings.getInstance(type);
\r
4928 return layoutSettings.isURLFriendliable();
\r
4931 public boolean isLayoutParentable(Layout layout) {
\r
4932 return isLayoutParentable(layout.getType());
\r
4935 public boolean isLayoutParentable(String type) {
\r
4936 LayoutSettings layoutSettings = LayoutSettings.getInstance(type);
\r
4938 return layoutSettings.isParentable();
\r
4941 public boolean isLayoutSitemapable(Layout layout) {
\r
4942 if (layout.isPrivateLayout()) {
\r
4946 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
\r
4948 return layoutSettings.isSitemapable();
\r
4951 public boolean isMethodGet(PortletRequest portletRequest) {
\r
4952 HttpServletRequest request = getHttpServletRequest(portletRequest);
\r
4954 String method = GetterUtil.getString(request.getMethod());
\r
4956 if (method.equalsIgnoreCase(HttpMethods.GET)) {
\r
4964 public boolean isMethodPost(PortletRequest portletRequest) {
\r
4965 HttpServletRequest request = getHttpServletRequest(portletRequest);
\r
4967 String method = GetterUtil.getString(request.getMethod());
\r
4969 if (method.equalsIgnoreCase(HttpMethods.POST)) {
\r
4977 public boolean isMultipartRequest(HttpServletRequest request) {
\r
4978 String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE);
\r
4980 if ((contentType != null) &&
\r
4981 contentType.startsWith(ContentTypes.MULTIPART_FORM_DATA)) {
\r
4990 public boolean isOmniadmin(long userId) {
\r
4991 return OmniadminUtil.isOmniadmin(userId);
\r
4994 public boolean isReservedParameter(String name) {
\r
4995 return _reservedParams.contains(name);
\r
4998 public boolean isSecure(HttpServletRequest request) {
\r
4999 HttpSession session = request.getSession();
\r
5001 Boolean httpsInitial = (Boolean)session.getAttribute(
\r
5002 WebKeys.HTTPS_INITIAL);
\r
5004 boolean secure = false;
\r
5006 if (PropsValues.COMPANY_SECURITY_AUTH_REQUIRES_HTTPS &&
\r
5007 !PropsValues.SESSION_ENABLE_PHISHING_PROTECTION &&
\r
5008 (httpsInitial != null) && !httpsInitial.booleanValue()) {
\r
5013 secure = request.isSecure();
\r
5019 public boolean isSystemGroup(String groupName) {
\r
5020 if (groupName == null) {
\r
5024 groupName = groupName.trim();
\r
5026 int pos = Arrays.binarySearch(
\r
5027 _sortedSystemGroups, groupName, new StringComparator());
\r
5037 public boolean isSystemRole(String roleName) {
\r
5038 if (roleName == null) {
\r
5042 roleName = roleName.trim();
\r
5044 int pos = Arrays.binarySearch(
\r
5045 _sortedSystemRoles, roleName, new StringComparator());
\r
5051 pos = Arrays.binarySearch(
\r
5052 _sortedSystemSiteRoles, roleName, new StringComparator());
\r
5058 pos = Arrays.binarySearch(
\r
5059 _sortedSystemOrganizationRoles, roleName,
\r
5060 new StringComparator());
\r
5071 public boolean isUpdateAvailable() throws SystemException {
\r
5072 return PluginPackageUtil.isUpdateAvailable();
\r
5075 public boolean isValidResourceId(String resourceId) {
\r
5076 if (Validator.isNull(resourceId)) {
\r
5080 Matcher matcher = _bannedResourceIdPattern.matcher(resourceId);
\r
5082 if (matcher.matches()) {
\r
5089 public void removePortalPortEventListener(
\r
5090 PortalPortEventListener portalPortEventListener) {
\r
5092 _portalPortEventListeners.remove(portalPortEventListener);
\r
5095 public String renderPage(
\r
5096 ServletContext servletContext, HttpServletRequest request,
\r
5097 HttpServletResponse response, String path)
\r
5098 throws IOException, ServletException {
\r
5100 RequestDispatcher requestDispatcher =
\r
5101 servletContext.getRequestDispatcher(path);
\r
5103 StringServletResponse stringResponse = new StringServletResponse(
\r
5106 requestDispatcher.include(request, stringResponse);
\r
5108 return stringResponse.getString();
\r
5111 public String renderPortlet(
\r
5112 ServletContext servletContext, HttpServletRequest request,
\r
5113 HttpServletResponse response, Portlet portlet, String queryString,
\r
5114 boolean writeOutput)
\r
5115 throws IOException, ServletException {
\r
5117 return renderPortlet(
\r
5118 servletContext, request, response, portlet, queryString, null, null,
\r
5119 null, writeOutput);
\r
5122 public String renderPortlet(
\r
5123 ServletContext servletContext, HttpServletRequest request,
\r
5124 HttpServletResponse response, Portlet portlet, String queryString,
\r
5125 String columnId, Integer columnPos, Integer columnCount,
\r
5126 boolean writeOutput)
\r
5127 throws IOException, ServletException {
\r
5129 return renderPortlet(
\r
5130 servletContext, request, response, portlet, queryString, columnId,
\r
5131 columnPos, columnCount, null, writeOutput);
\r
5134 public String renderPortlet(
\r
5135 ServletContext servletContext, HttpServletRequest request,
\r
5136 HttpServletResponse response, Portlet portlet, String queryString,
\r
5137 String columnId, Integer columnPos, Integer columnCount,
\r
5138 String path, boolean writeOutput)
\r
5139 throws IOException, ServletException {
\r
5141 queryString = GetterUtil.getString(queryString);
\r
5142 columnId = GetterUtil.getString(columnId);
\r
5144 if (columnPos == null) {
\r
5145 columnPos = Integer.valueOf(0);
\r
5148 if (columnCount == null) {
\r
5149 columnCount = Integer.valueOf(0);
\r
5152 request.setAttribute(WebKeys.RENDER_PORTLET, portlet);
\r
5153 request.setAttribute(WebKeys.RENDER_PORTLET_QUERY_STRING, queryString);
\r
5154 request.setAttribute(WebKeys.RENDER_PORTLET_COLUMN_ID, columnId);
\r
5155 request.setAttribute(WebKeys.RENDER_PORTLET_COLUMN_POS, columnPos);
\r
5156 request.setAttribute(WebKeys.RENDER_PORTLET_COLUMN_COUNT, columnCount);
\r
5158 if (path == null) {
\r
5159 path = "/html/portal/render_portlet.jsp";
\r
5162 RequestDispatcher requestDispatcher =
\r
5163 DirectRequestDispatcherFactoryUtil.getRequestDispatcher(
\r
5164 servletContext, path);
\r
5166 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
\r
5168 PipingServletResponse pipingServletResponse = new PipingServletResponse(
\r
5169 response, unsyncStringWriter);
\r
5171 requestDispatcher.include(request, pipingServletResponse);
\r
5173 boolean showPortlet = true;
\r
5175 Boolean portletConfiguratorVisibility = (Boolean)request.getAttribute(
\r
5176 WebKeys.PORTLET_CONFIGURATOR_VISIBILITY);
\r
5178 if (portletConfiguratorVisibility != null) {
\r
5179 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
5180 WebKeys.THEME_DISPLAY);
\r
5183 Layout layout = themeDisplay.getLayout();
\r
5185 if (!layout.isTypeControlPanel() &&
\r
5186 !LayoutPermissionUtil.contains(
\r
5187 themeDisplay.getPermissionChecker(), layout,
\r
5188 ActionKeys.UPDATE) &&
\r
5189 !PortletPermissionUtil.contains(
\r
5190 themeDisplay.getPermissionChecker(),
\r
5191 themeDisplay.getPlid(), portlet.getPortletId(),
\r
5192 ActionKeys.CONFIGURATION)) {
\r
5194 showPortlet = false;
\r
5197 catch (Exception e) {
\r
5198 throw new ServletException(e);
\r
5201 request.removeAttribute(WebKeys.PORTLET_CONFIGURATOR_VISIBILITY);
\r
5204 if (showPortlet) {
\r
5205 if (writeOutput) {
\r
5206 response.setContentType(ContentTypes.TEXT_HTML_UTF8);
\r
5208 StringBundler sb = unsyncStringWriter.getStringBundler();
\r
5210 sb.writeTo(response.getWriter());
\r
5212 return StringPool.BLANK;
\r
5215 return unsyncStringWriter.toString();
\r
5219 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
\r
5221 return StringPool.BLANK;
\r
5225 public void resetCDNHosts() {
\r
5226 _cdnHostHttpMap.clear();
\r
5227 _cdnHostHttpsMap.clear();
\r
5229 if (!ClusterInvokeThreadLocal.isEnabled()) {
\r
5233 ClusterRequest clusterRequest = ClusterRequest.createMulticastRequest(
\r
5234 _resetCDNHostsMethodHandler, true);
\r
5237 ClusterExecutorUtil.execute(clusterRequest);
\r
5239 catch (Exception e) {
\r
5240 _log.error("Unable to clear cluster wide CDN hosts", e);
\r
5244 public Set<String> resetPortletAddDefaultResourceCheckWhitelist() {
\r
5245 _portletAddDefaultResourceCheckWhitelist = SetUtil.fromArray(
\r
5246 PropsValues.PORTLET_ADD_DEFAULT_RESOURCE_CHECK_WHITELIST);
\r
5248 _portletAddDefaultResourceCheckWhitelist = Collections.unmodifiableSet(
\r
5249 _portletAddDefaultResourceCheckWhitelist);
\r
5251 return _portletAddDefaultResourceCheckWhitelist;
\r
5254 public Set<String> resetPortletAddDefaultResourceCheckWhitelistActions() {
\r
5255 _portletAddDefaultResourceCheckWhitelistActions = SetUtil.fromArray(
\r
5256 PropsValues.PORTLET_ADD_DEFAULT_RESOURCE_CHECK_WHITELIST_ACTIONS);
\r
5258 _portletAddDefaultResourceCheckWhitelistActions =
\r
5259 Collections.unmodifiableSet(
\r
5260 _portletAddDefaultResourceCheckWhitelistActions);
\r
5262 return _portletAddDefaultResourceCheckWhitelistActions;
\r
5265 public void sendError(
\r
5266 Exception e, ActionRequest actionRequest,
\r
5267 ActionResponse actionResponse)
\r
5268 throws IOException {
\r
5270 sendError(0, e, actionRequest, actionResponse);
\r
5273 public void sendError(
\r
5274 Exception e, HttpServletRequest request,
\r
5275 HttpServletResponse response)
\r
5276 throws IOException, ServletException {
\r
5278 sendError(0, e, request, response);
\r
5281 public void sendError(
\r
5282 int status, Exception e, ActionRequest actionRequest,
\r
5283 ActionResponse actionResponse)
\r
5284 throws IOException {
\r
5286 StringBundler sb = new StringBundler(7);
\r
5288 sb.append(_pathMain);
\r
5289 sb.append("/portal/status?status=");
\r
5290 sb.append(status);
\r
5291 sb.append("&exception=");
\r
5292 sb.append(e.getClass().getName());
\r
5293 sb.append("&previousURL=");
\r
5294 sb.append(HttpUtil.encodeURL(getCurrentURL(actionRequest)));
\r
5296 actionResponse.sendRedirect(sb.toString());
\r
5299 public void sendError(
\r
5300 int status, Exception e, HttpServletRequest request,
\r
5301 HttpServletResponse response)
\r
5302 throws IOException, ServletException {
\r
5304 if (_log.isDebugEnabled()) {
\r
5305 String currentURL = (String)request.getAttribute(
\r
5306 WebKeys.CURRENT_URL);
\r
5309 "Current URL " + currentURL + " generates exception: " +
\r
5313 if (e instanceof NoSuchImageException) {
\r
5314 if (_logWebServerServlet.isWarnEnabled()) {
\r
5315 _logWebServerServlet.warn(e, e);
\r
5318 else if ((e instanceof PortalException) && _log.isDebugEnabled()) {
\r
5319 if ((e instanceof NoSuchLayoutException) ||
\r
5320 (e instanceof PrincipalException)) {
\r
5322 String msg = e.getMessage();
\r
5324 if (Validator.isNotNull(msg)) {
\r
5332 else if ((e instanceof SystemException) && _log.isWarnEnabled()) {
\r
5336 if (response.isCommitted()) {
\r
5340 if (status == 0) {
\r
5341 if (e instanceof PrincipalException) {
\r
5342 status = HttpServletResponse.SC_FORBIDDEN;
\r
5345 String name = e.getClass().getName();
\r
5347 name = name.substring(name.lastIndexOf(CharPool.PERIOD) + 1);
\r
5349 if (name.startsWith("NoSuch") && name.endsWith("Exception")) {
\r
5350 status = HttpServletResponse.SC_NOT_FOUND;
\r
5354 if (status == 0) {
\r
5358 if (PropsValues.TCK_URL) {
\r
5359 status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
\r
5362 status = HttpServletResponse.SC_BAD_REQUEST;
\r
5367 HttpSession session = request.getSession();
\r
5369 ServletContext servletContext = session.getServletContext();
\r
5371 String redirect = PATH_MAIN + "/portal/status";
\r
5373 if ((e instanceof NoSuchLayoutException) &&
\r
5374 Validator.isNotNull(
\r
5375 PropsValues.LAYOUT_FRIENDLY_URL_PAGE_NOT_FOUND)) {
\r
5377 response.setStatus(status);
\r
5379 redirect = PropsValues.LAYOUT_FRIENDLY_URL_PAGE_NOT_FOUND;
\r
5381 RequestDispatcher requestDispatcher =
\r
5382 servletContext.getRequestDispatcher(redirect);
\r
5384 if (requestDispatcher != null) {
\r
5385 requestDispatcher.forward(request, response);
\r
5388 else if (PropsValues.LAYOUT_SHOW_HTTP_STATUS) {
\r
5389 response.setStatus(status);
\r
5391 SessionErrors.add(request, e.getClass(), e);
\r
5393 RequestDispatcher requestDispatcher =
\r
5394 servletContext.getRequestDispatcher(redirect);
\r
5396 if (requestDispatcher != null) {
\r
5397 requestDispatcher.forward(request, response);
\r
5402 response.sendError(status, e.getMessage());
\r
5405 response.sendError(status);
\r
5410 public void setPageDescription(
\r
5411 String description, HttpServletRequest request) {
\r
5413 request.setAttribute(WebKeys.PAGE_DESCRIPTION, description);
\r
5416 public void setPageKeywords(String keywords, HttpServletRequest request) {
\r
5417 request.removeAttribute(WebKeys.PAGE_KEYWORDS);
\r
5419 addPageKeywords(keywords, request);
\r
5422 public void setPageSubtitle(String subtitle, HttpServletRequest request) {
\r
5423 request.setAttribute(WebKeys.PAGE_SUBTITLE, subtitle);
\r
5426 public void setPageTitle(String title, HttpServletRequest request) {
\r
5427 request.setAttribute(WebKeys.PAGE_TITLE, title);
\r
5430 public void setPortalPort(HttpServletRequest request) {
\r
5431 if (request.isSecure()) {
\r
5432 if (_securePortalPort.get() == -1) {
\r
5433 int securePortalPort = request.getServerPort();
\r
5435 _securePortalPort.compareAndSet(-1, securePortalPort);
\r
5439 if (_portalPort.get() == -1) {
\r
5440 int portalPort = request.getServerPort();
\r
5442 if (_portalPort.compareAndSet(-1, portalPort)) {
\r
5443 notifyPortalPortEventListeners(portalPort);
\r
5449 public void storePreferences(PortletPreferences portletPreferences)
\r
5450 throws IOException, ValidatorException {
\r
5452 PortletPreferencesWrapper portletPreferencesWrapper =
\r
5453 (PortletPreferencesWrapper)portletPreferences;
\r
5455 PortletPreferencesImpl portletPreferencesImpl =
\r
5456 portletPreferencesWrapper.getPortletPreferencesImpl();
\r
5458 portletPreferencesImpl.store();
\r
5461 public String[] stripURLAnchor(String url, String separator) {
\r
5462 String anchor = StringPool.BLANK;
\r
5464 int pos = url.indexOf(separator);
\r
5467 anchor = url.substring(pos);
\r
5468 url = url.substring(0, pos);
\r
5471 return new String[] {url, anchor};
\r
5474 public String transformCustomSQL(String sql) {
\r
5475 if ((_customSqlKeys == null) || (_customSqlValues == null)) {
\r
5479 return StringUtil.replace(sql, _customSqlKeys, _customSqlValues);
\r
5482 public PortletMode updatePortletMode(
\r
5483 String portletId, User user, Layout layout, PortletMode portletMode,
\r
5484 HttpServletRequest request) {
\r
5486 LayoutTypePortlet layoutType =
\r
5487 (LayoutTypePortlet)layout.getLayoutType();
\r
5489 if ((portletMode == null) || Validator.isNull(portletMode.toString())) {
\r
5490 if (layoutType.hasModeAboutPortletId(portletId)) {
\r
5491 return LiferayPortletMode.ABOUT;
\r
5493 else if (layoutType.hasModeConfigPortletId(portletId)) {
\r
5494 return LiferayPortletMode.CONFIG;
\r
5496 else if (layoutType.hasModeEditPortletId(portletId)) {
\r
5497 return PortletMode.EDIT;
\r
5499 else if (layoutType.hasModeEditDefaultsPortletId(portletId)) {
\r
5500 return LiferayPortletMode.EDIT_DEFAULTS;
\r
5502 else if (layoutType.hasModeEditGuestPortletId(portletId)) {
\r
5503 return LiferayPortletMode.EDIT_GUEST;
\r
5505 else if (layoutType.hasModeHelpPortletId(portletId)) {
\r
5506 return PortletMode.HELP;
\r
5508 else if (layoutType.hasModePreviewPortletId(portletId)) {
\r
5509 return LiferayPortletMode.PREVIEW;
\r
5511 else if (layoutType.hasModePrintPortletId(portletId)) {
\r
5512 return LiferayPortletMode.PRINT;
\r
5515 return PortletMode.VIEW;
\r
5519 boolean updateLayout = false;
\r
5521 if (portletMode.equals(LiferayPortletMode.ABOUT) &&
\r
5522 !layoutType.hasModeAboutPortletId(portletId)) {
\r
5524 layoutType.addModeAboutPortletId(portletId);
\r
5526 updateLayout = true;
\r
5528 else if (portletMode.equals(LiferayPortletMode.CONFIG) &&
\r
5529 !layoutType.hasModeConfigPortletId(portletId)) {
\r
5531 layoutType.addModeConfigPortletId(portletId);
\r
5533 updateLayout = true;
\r
5535 else if (portletMode.equals(PortletMode.EDIT) &&
\r
5536 !layoutType.hasModeEditPortletId(portletId)) {
\r
5538 layoutType.addModeEditPortletId(portletId);
\r
5540 updateLayout = true;
\r
5542 else if (portletMode.equals(LiferayPortletMode.EDIT_DEFAULTS) &&
\r
5543 !layoutType.hasModeEditDefaultsPortletId(portletId)) {
\r
5545 layoutType.addModeEditDefaultsPortletId(portletId);
\r
5547 updateLayout = true;
\r
5549 else if (portletMode.equals(LiferayPortletMode.EDIT_GUEST) &&
\r
5550 !layoutType.hasModeEditGuestPortletId(portletId)) {
\r
5552 layoutType.addModeEditGuestPortletId(portletId);
\r
5554 updateLayout = true;
\r
5556 else if (portletMode.equals(PortletMode.HELP) &&
\r
5557 !layoutType.hasModeHelpPortletId(portletId)) {
\r
5559 layoutType.addModeHelpPortletId(portletId);
\r
5561 updateLayout = true;
\r
5563 else if (portletMode.equals(LiferayPortletMode.PREVIEW) &&
\r
5564 !layoutType.hasModePreviewPortletId(portletId)) {
\r
5566 layoutType.addModePreviewPortletId(portletId);
\r
5568 updateLayout = true;
\r
5570 else if (portletMode.equals(LiferayPortletMode.PRINT) &&
\r
5571 !layoutType.hasModePrintPortletId(portletId)) {
\r
5573 layoutType.addModePrintPortletId(portletId);
\r
5575 updateLayout = true;
\r
5577 else if (portletMode.equals(PortletMode.VIEW) &&
\r
5578 !layoutType.hasModeViewPortletId(portletId)) {
\r
5580 layoutType.removeModesPortletId(portletId);
\r
5582 updateLayout = true;
\r
5585 if (updateLayout) {
\r
5586 LayoutClone layoutClone = LayoutCloneFactory.getInstance();
\r
5588 if (layoutClone != null) {
\r
5589 layoutClone.update(
\r
5590 request, layout.getPlid(), layout.getTypeSettings());
\r
5594 return portletMode;
\r
5598 public String updateRedirect(
\r
5599 String redirect, String oldPath, String newPath) {
\r
5601 if (Validator.isNotNull(redirect) && (oldPath != null) &&
\r
5602 !oldPath.equals(newPath)) {
\r
5604 String queryString = HttpUtil.getQueryString(redirect);
\r
5606 String redirectParam = HttpUtil.getParameter(
\r
5607 redirect, "redirect", false);
\r
5609 if (Validator.isNotNull(redirectParam)) {
\r
5610 String newRedirectParam = StringUtil.replace(
\r
5611 redirectParam, HttpUtil.encodeURL(oldPath),
\r
5612 HttpUtil.encodeURL(newPath));
\r
5614 queryString = StringUtil.replace(
\r
5615 queryString, redirectParam, newRedirectParam);
\r
5618 String redirectPath = HttpUtil.getPath(redirect);
\r
5620 int pos = redirect.indexOf(redirectPath);
\r
5622 String prefix = redirect.substring(0, pos);
\r
5624 pos = redirectPath.lastIndexOf(oldPath);
\r
5627 prefix += redirectPath.substring(0, pos);
\r
5629 String suffix = redirectPath.substring(pos + oldPath.length());
\r
5631 redirect = prefix + newPath + suffix;
\r
5634 redirect = prefix + redirectPath;
\r
5637 if (Validator.isNotNull(queryString)) {
\r
5638 redirect += StringPool.QUESTION + queryString;
\r
5645 public WindowState updateWindowState(
\r
5646 String portletId, User user, Layout layout, WindowState windowState,
\r
5647 HttpServletRequest request) {
\r
5649 LayoutTypePortlet layoutType =
\r
5650 (LayoutTypePortlet)layout.getLayoutType();
\r
5652 if ((windowState == null) || Validator.isNull(windowState.toString())) {
\r
5653 if (layoutType.hasStateMaxPortletId(portletId)) {
\r
5654 windowState = WindowState.MAXIMIZED;
\r
5656 else if (layoutType.hasStateMinPortletId(portletId)) {
\r
5657 windowState = WindowState.MINIMIZED;
\r
5660 windowState = WindowState.NORMAL;
\r
5664 boolean updateLayout = false;
\r
5666 if (windowState.equals(WindowState.MAXIMIZED) &&
\r
5667 !layoutType.hasStateMaxPortletId(portletId)) {
\r
5669 layoutType.addStateMaxPortletId(portletId);
\r
5671 if (PropsValues.LAYOUT_REMEMBER_MAXIMIZED_WINDOW_STATE) {
\r
5672 updateLayout = true;
\r
5675 else if (windowState.equals(WindowState.MINIMIZED) &&
\r
5676 !layoutType.hasStateMinPortletId(portletId)) {
\r
5678 layoutType.addStateMinPortletId(portletId);
\r
5680 updateLayout = true;
\r
5682 else if (windowState.equals(WindowState.NORMAL) &&
\r
5683 !layoutType.hasStateNormalPortletId(portletId)) {
\r
5685 layoutType.removeStatesPortletId(portletId);
\r
5687 updateLayout = true;
\r
5690 if (portletId.equals(PortletKeys.LAYOUTS_ADMIN) ||
\r
5691 portletId.equals(PortletKeys.PORTLET_CONFIGURATION)) {
\r
5693 updateLayout = false;
\r
5696 if (updateLayout) {
\r
5697 LayoutClone layoutClone = LayoutCloneFactory.getInstance();
\r
5699 if (layoutClone != null) {
\r
5700 layoutClone.update(
\r
5701 request, layout.getPlid(), layout.getTypeSettings());
\r
5706 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
\r
5707 WebKeys.THEME_DISPLAY);
\r
5709 themeDisplay.setStateExclusive(
\r
5710 windowState.equals(LiferayWindowState.EXCLUSIVE));
\r
5711 themeDisplay.setStateMaximized(
\r
5712 windowState.equals(WindowState.MAXIMIZED));
\r
5713 themeDisplay.setStatePopUp(
\r
5714 windowState.equals(LiferayWindowState.POP_UP));
\r
5716 if (themeDisplay.isStateMaximized() &&
\r
5717 themeDisplay.isShowAddContentIcon()) {
\r
5719 themeDisplay.setShowAddContentIcon(false);
\r
5721 else if (!themeDisplay.isStateMaximized() &&
\r
5722 !themeDisplay.isShowAddContentIcon() &&
\r
5723 themeDisplay.isShowAddContentIconPermission()) {
\r
5725 themeDisplay.setShowAddContentIcon(true);
\r
5728 request.setAttribute(WebKeys.WINDOW_STATE, windowState);
\r
5730 return windowState;
\r
5733 protected void addDefaultResource(
\r
5734 long companyId, Layout layout, Portlet portlet,
\r
5735 boolean portletActions)
\r
5736 throws PortalException, SystemException {
\r
5738 long groupId = getScopeGroupId(layout, portlet.getPortletId());
\r
5740 addDefaultResource(companyId, groupId, layout, portlet, portletActions);
\r
5743 protected void addDefaultResource(
\r
5744 long companyId, long groupId, Layout layout, Portlet portlet,
\r
5745 boolean portletActions)
\r
5746 throws PortalException, SystemException {
\r
5748 String rootPortletId = portlet.getRootPortletId();
\r
5750 String portletPrimaryKey = PortletPermissionUtil.getPrimaryKey(
\r
5751 layout.getPlid(), portlet.getPortletId());
\r
5753 String name = null;
\r
5754 String primaryKey = null;
\r
5756 if (portletActions) {
\r
5757 name = rootPortletId;
\r
5758 primaryKey = portletPrimaryKey;
\r
5761 name = ResourceActionsUtil.getPortletBaseResource(rootPortletId);
\r
5762 primaryKey = String.valueOf(groupId);
\r
5765 if (Validator.isNull(name)) {
\r
5770 if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6) {
\r
5772 ResourcePermissionLocalServiceUtil.
\r
5773 getResourcePermissionsCount(
\r
5774 companyId, name, ResourceConstants.SCOPE_INDIVIDUAL,
\r
5778 throw new NoSuchResourceException();
\r
5781 else if (!portlet.isUndeployedPortlet()) {
\r
5782 ResourceLocalServiceUtil.getResource(
\r
5783 companyId, name, ResourceConstants.SCOPE_INDIVIDUAL,
\r
5787 catch (NoSuchResourceException nsre) {
\r
5788 ResourceLocalServiceUtil.addResources(
\r
5789 companyId, groupId, 0, name, primaryKey, portletActions, true,
\r
5794 protected String buildI18NPath(Locale locale) {
\r
5795 String languageId = LocaleUtil.toLanguageId(locale);
\r
5797 if (Validator.isNull(languageId)) {
\r
5801 if (LanguageUtil.isDuplicateLanguageCode(locale.getLanguage())) {
\r
5802 Locale priorityLocale = LanguageUtil.getLocale(
\r
5803 locale.getLanguage());
\r
5805 if (locale.equals(priorityLocale)) {
\r
5806 languageId = locale.getLanguage();
\r
5810 languageId = locale.getLanguage();
\r
5813 return StringPool.SLASH.concat(languageId);
\r
5816 protected long doGetPlidFromPortletId(
\r
5817 long groupId, boolean privateLayout, String portletId)
\r
5818 throws PortalException, SystemException {
\r
5820 long scopeGroupId = groupId;
\r
5823 Group group = GroupLocalServiceUtil.getGroup(groupId);
\r
5825 if (group.isLayout()) {
\r
5826 Layout scopeLayout = LayoutLocalServiceUtil.getLayout(
\r
5827 group.getClassPK());
\r
5829 groupId = scopeLayout.getGroupId();
\r
5832 catch (Exception e) {
\r
5835 long plid = LayoutConstants.DEFAULT_PLID;
\r
5837 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
\r
5838 groupId, privateLayout, LayoutConstants.TYPE_PORTLET);
\r
5840 for (Layout layout : layouts) {
\r
5841 LayoutTypePortlet layoutTypePortlet =
\r
5842 (LayoutTypePortlet)layout.getLayoutType();
\r
5844 if (layoutTypePortlet.hasPortletId(portletId)) {
\r
5845 if (getScopeGroupId(layout, portletId) == scopeGroupId) {
\r
5846 plid = layout.getPlid();
\r
5856 protected List<Portlet> filterControlPanelPortlets(
\r
5857 Set<Portlet> portlets, String category, ThemeDisplay themeDisplay) {
\r
5859 Group group = themeDisplay.getScopeGroup();
\r
5861 List<Portlet> filteredPortlets = new ArrayList<Portlet>();
\r
5863 if (category.equals(PortletCategoryKeys.CONTENT) && group.isLayout()) {
\r
5864 for (Portlet portlet : portlets) {
\r
5865 if (portlet.isScopeable()) {
\r
5866 filteredPortlets.add(portlet);
\r
5871 filteredPortlets.addAll(portlets);
\r
5874 Iterator<Portlet> itr = filteredPortlets.iterator();
\r
5876 while (itr.hasNext()) {
\r
5877 Portlet portlet = itr.next();
\r
5880 ControlPanelEntry controlPanelEntry =
\r
5881 portlet.getControlPanelEntryInstance();
\r
5883 if (controlPanelEntry == null) {
\r
5884 controlPanelEntry =
\r
5885 DefaultControlPanelEntryFactory.getInstance();
\r
5888 if (!controlPanelEntry.isVisible(
\r
5889 portlet, category, themeDisplay)) {
\r
5894 catch (Exception e) {
\r
5901 return filteredPortlets;
\r
5904 protected long getDefaultScopeGroupId(long companyId)
\r
5905 throws PortalException, SystemException {
\r
5907 long doAsGroupId = 0;
\r
5909 Collection<Portlet> portlets = getControlPanelPortlets(
\r
5910 companyId, PortletCategoryKeys.CONTENT);
\r
5912 List<Group> groups = GroupServiceUtil.getManageableSites(portlets, 1);
\r
5914 if (!groups.isEmpty()) {
\r
5915 Group group = groups.get(0);
\r
5917 doAsGroupId = group.getGroupId();
\r
5920 Group guestGroup = GroupLocalServiceUtil.fetchGroup(
\r
5921 companyId, GroupConstants.GUEST);
\r
5923 if (guestGroup != null) {
\r
5924 doAsGroupId = guestGroup.getGroupId();
\r
5928 return doAsGroupId;
\r
5931 protected long getDoAsUserId(
\r
5932 HttpServletRequest request, String doAsUserIdString,
\r
5933 boolean alwaysAllowDoAsUser)
\r
5934 throws Exception {
\r
5936 if (Validator.isNull(doAsUserIdString)) {
\r
5940 long doAsUserId = 0;
\r
5943 Company company = getCompany(request);
\r
5945 doAsUserId = GetterUtil.getLong(
\r
5946 Encryptor.decrypt(company.getKeyObj(), doAsUserIdString));
\r
5948 catch (Exception e) {
\r
5949 if (_log.isWarnEnabled()) {
\r
5951 "Unable to impersonate " + doAsUserIdString +
\r
5952 " because the string cannot be decrypted");
\r
5958 if (_log.isDebugEnabled()) {
\r
5959 if (alwaysAllowDoAsUser) {
\r
5961 "doAsUserId path or Struts action is always allowed");
\r
5965 "doAsUserId path is Struts action not always allowed");
\r
5969 if (alwaysAllowDoAsUser) {
\r
5970 request.setAttribute(WebKeys.USER_ID, new Long(doAsUserId));
\r
5972 return doAsUserId;
\r
5975 HttpSession session = request.getSession();
\r
5977 Long realUserIdObj = (Long)session.getAttribute(WebKeys.USER_ID);
\r
5979 if (realUserIdObj == null) {
\r
5983 User doAsUser = UserLocalServiceUtil.getUserById(doAsUserId);
\r
5985 long[] organizationIds = doAsUser.getOrganizationIds();
\r
5987 User realUser = UserLocalServiceUtil.getUserById(
\r
5988 realUserIdObj.longValue());
\r
5990 PermissionChecker permissionChecker =
\r
5991 PermissionCheckerFactoryUtil.create(realUser);
\r
5993 // Verification usurpation identitie par rapport a UserMatching
\r
5994 if (doAsUser.isDefaultUser() ||
\r
5995 UserMatchingLocalServiceUtil.hasPermissionImpersonate(realUser.getUserId(), doAsUserId) ||
\r
5996 UserPermissionUtil.contains(
\r
5997 permissionChecker, doAsUserId, organizationIds,
\r
5998 ActionKeys.IMPERSONATE)) {
\r
6000 request.setAttribute(WebKeys.USER_ID, new Long(doAsUserId));
\r
6002 return doAsUserId;
\r
6006 "User " + realUserIdObj + " does not have the permission " +
\r
6007 "to impersonate " + doAsUserId);
\r
6013 protected String getGroupFriendlyURL(
\r
6014 Group group, boolean privateLayoutSet, ThemeDisplay themeDisplay,
\r
6015 boolean canonicalURL)
\r
6016 throws PortalException, SystemException {
\r
6018 LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
\r
6019 group.getGroupId(), privateLayoutSet);
\r
6021 String portalURL = StringPool.BLANK;
\r
6023 if (canonicalURL || !themeDisplay.getServerName().equals(_LOCALHOST)) {
\r
6024 String virtualHostname = layoutSet.getVirtualHostname();
\r
6026 if (Validator.isNull(virtualHostname) &&
\r
6027 Validator.isNotNull(
\r
6028 PropsValues.VIRTUAL_HOSTS_DEFAULT_SITE_NAME) &&
\r
6029 !layoutSet.isPrivateLayout()) {
\r
6032 Group defaultGroup = GroupLocalServiceUtil.getGroup(
\r
6033 themeDisplay.getCompanyId(),
\r
6034 PropsValues.VIRTUAL_HOSTS_DEFAULT_SITE_NAME);
\r
6036 if (layoutSet.getGroupId() == defaultGroup.getGroupId()) {
\r
6037 Company company = themeDisplay.getCompany();
\r
6039 virtualHostname = company.getVirtualHostname();
\r
6042 catch (Exception e) {
\r
6047 if (Validator.isNotNull(virtualHostname) &&
\r
6049 !virtualHostname.equalsIgnoreCase(_LOCALHOST))) {
\r
6051 virtualHostname = getPortalURL(
\r
6052 virtualHostname, themeDisplay.getServerPort(),
\r
6053 themeDisplay.isSecure());
\r
6055 String portalDomain = HttpUtil.getDomain(
\r
6056 themeDisplay.getPortalURL());
\r
6058 if (canonicalURL || virtualHostname.contains(portalDomain)) {
\r
6059 String path = StringPool.BLANK;
\r
6061 if (themeDisplay.isWidget()) {
\r
6062 path = PropsValues.WIDGET_SERVLET_MAPPING;
\r
6065 if (themeDisplay.isI18n() && !canonicalURL) {
\r
6066 path = themeDisplay.getI18nPath();
\r
6069 return virtualHostname.concat(_pathContext).concat(path);
\r
6073 Layout curLayout = themeDisplay.getLayout();
\r
6075 LayoutSet curLayoutSet = curLayout.getLayoutSet();
\r
6077 if (canonicalURL ||
\r
6078 ((layoutSet.getLayoutSetId() !=
\r
6079 curLayoutSet.getLayoutSetId()) &&
\r
6080 (group.getClassPK() != themeDisplay.getUserId()))) {
\r
6082 if (group.isControlPanel()) {
\r
6083 virtualHostname = curLayoutSet.getVirtualHostname();
\r
6086 if (Validator.isNull(virtualHostname) ||
\r
6087 virtualHostname.equalsIgnoreCase(_LOCALHOST)) {
\r
6089 Company company = themeDisplay.getCompany();
\r
6091 virtualHostname = company.getVirtualHostname();
\r
6094 if (canonicalURL ||
\r
6095 !virtualHostname.equalsIgnoreCase(_LOCALHOST)) {
\r
6097 portalURL = getPortalURL(
\r
6098 virtualHostname, themeDisplay.getServerPort(),
\r
6099 themeDisplay.isSecure());
\r
6105 String friendlyURL = null;
\r
6107 if (privateLayoutSet) {
\r
6108 if (group.isUser()) {
\r
6109 friendlyURL = _PRIVATE_USER_SERVLET_MAPPING;
\r
6112 friendlyURL = _PRIVATE_GROUP_SERVLET_MAPPING;
\r
6116 friendlyURL = _PUBLIC_GROUP_SERVLET_MAPPING;
\r
6119 StringBundler sb = new StringBundler(6);
\r
6121 sb.append(portalURL);
\r
6122 sb.append(_pathContext);
\r
6124 if (themeDisplay.isI18n() && !canonicalURL) {
\r
6125 sb.append(themeDisplay.getI18nPath());
\r
6128 if (themeDisplay.isWidget()) {
\r
6129 sb.append(PropsValues.WIDGET_SERVLET_MAPPING);
\r
6132 sb.append(friendlyURL);
\r
6133 sb.append(group.getFriendlyURL());
\r
6135 return sb.toString();
\r
6138 protected String getPortletParam(HttpServletRequest request, String name) {
\r
6139 String portletId = ParamUtil.getString(request, "p_p_id");
\r
6141 if (Validator.isNull(portletId)) {
\r
6142 return StringPool.BLANK;
\r
6145 String value = null;
\r
6147 int valueCount = 0;
\r
6149 String keyName = StringPool.UNDERLINE.concat(name);
\r
6151 Map<String, String[]> parameterMap = request.getParameterMap();
\r
6153 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
\r
6154 String parameterName = entry.getKey();
\r
6156 int pos = parameterName.indexOf(keyName);
\r
6164 // There should never be more than one value
\r
6166 if (valueCount > 1) {
\r
6167 return StringPool.BLANK;
\r
6170 String[] parameterValues = entry.getValue();
\r
6172 if ((parameterValues == null) || (parameterValues.length == 0) ||
\r
6173 Validator.isNull(parameterValues[0])) {
\r
6178 // The Struts action must be for the correct portlet
\r
6180 String portletId1 = parameterName.substring(1, pos);
\r
6182 if (portletId.equals(portletId1)) {
\r
6183 value = parameterValues[0];
\r
6187 if (value == null) {
\r
6188 value = StringPool.BLANK;
\r
6194 protected String getServletURL(
\r
6195 Portlet portlet, String servletPath, ThemeDisplay themeDisplay)
\r
6196 throws PortalException, SystemException {
\r
6198 Layout layout = themeDisplay.getLayout();
\r
6200 StringBundler sb = new StringBundler();
\r
6202 sb.append(themeDisplay.getPortalURL());
\r
6204 if (Validator.isNotNull(_pathContext)) {
\r
6205 sb.append(_pathContext);
\r
6208 if (themeDisplay.isI18n()) {
\r
6209 sb.append(themeDisplay.getI18nPath());
\r
6212 sb.append(servletPath);
\r
6214 Group group = layout.getGroup();
\r
6216 if (layout.isPrivateLayout()) {
\r
6217 if (group.isUser()) {
\r
6218 sb.append(_PRIVATE_USER_SERVLET_MAPPING);
\r
6221 sb.append(_PRIVATE_GROUP_SERVLET_MAPPING);
\r
6225 sb.append(_PUBLIC_GROUP_SERVLET_MAPPING);
\r
6228 sb.append(group.getFriendlyURL());
\r
6229 sb.append(layout.getFriendlyURL());
\r
6231 sb.append(FRIENDLY_URL_SEPARATOR);
\r
6233 FriendlyURLMapper friendlyURLMapper =
\r
6234 portlet.getFriendlyURLMapperInstance();
\r
6236 if ((friendlyURLMapper != null) && !portlet.isInstanceable()) {
\r
6237 sb.append(friendlyURLMapper.getMapping());
\r
6240 sb.append(portlet.getPortletId());
\r
6243 return sb.toString();
\r
6246 protected boolean isAlwaysAllowDoAsUser(HttpServletRequest request)
\r
6247 throws Exception {
\r
6249 String ticketKey = ParamUtil.getString(request, "ticketKey");
\r
6251 if (Validator.isNull(ticketKey)) {
\r
6255 Ticket ticket = TicketLocalServiceUtil.fetchTicket(ticketKey);
\r
6257 if ((ticket == null) ||
\r
6258 (ticket.getType() != TicketConstants.TYPE_IMPERSONATE)) {
\r
6263 String className = ticket.getClassName();
\r
6265 if (!className.equals(User.class.getName())) {
\r
6269 long doAsUserId = 0;
\r
6272 Company company = getCompany(request);
\r
6274 String doAsUserIdString = ParamUtil.getString(
\r
6275 request, "doAsUserId");
\r
6277 if (Validator.isNotNull(doAsUserIdString)) {
\r
6278 doAsUserId = GetterUtil.getLong(
\r
6279 Encryptor.decrypt(company.getKeyObj(), doAsUserIdString));
\r
6282 catch (Exception e) {
\r
6286 if (ticket.getClassPK() != doAsUserId) {
\r
6290 if (ticket.isExpired()) {
\r
6291 TicketLocalServiceUtil.deleteTicket(ticket);
\r
6296 Date expirationDate = new Date(
\r
6297 System.currentTimeMillis() +
\r
6298 PropsValues.SESSION_TIMEOUT * Time.MINUTE);
\r
6300 ticket.setExpirationDate(expirationDate);
\r
6302 TicketLocalServiceUtil.updateTicket(ticket, false);
\r
6307 protected boolean isPanelSelectedPortlet(
\r
6308 ThemeDisplay themeDisplay, String portletId) {
\r
6310 Layout layout = themeDisplay.getLayout();
\r
6312 String panelSelectedPortlets = layout.getTypeSettingsProperty(
\r
6313 "panelSelectedPortlets");
\r
6315 if (Validator.isNotNull(panelSelectedPortlets)) {
\r
6316 String[] panelSelectedPortletsArray = StringUtil.split(
\r
6317 panelSelectedPortlets);
\r
6319 return ArrayUtil.contains(panelSelectedPortletsArray, portletId);
\r
6325 protected void notifyPortalPortEventListeners(int portalPort) {
\r
6326 for (PortalPortEventListener portalPortEventListener :
\r
6327 _portalPortEventListeners) {
\r
6329 portalPortEventListener.portalPortConfigured(portalPort);
\r
6333 protected String removeRedirectParameter(String url) {
\r
6334 String queryString = HttpUtil.getQueryString(url);
\r
6336 Map<String, String[]> parameterMap = HttpUtil.getParameterMap(
\r
6339 for (String parameter : parameterMap.keySet()) {
\r
6340 if (parameter.endsWith("redirect")) {
\r
6341 url = HttpUtil.removeParameter(url, parameter);
\r
6348 private static final String _J_SECURITY_CHECK = "j_security_check";
\r
6350 private static final String _JSESSIONID = ";jsessionid=";
\r
6352 private static final String _LOCALHOST = "localhost";
\r
6354 private static final String _PRIVATE_GROUP_SERVLET_MAPPING =
\r
6355 PropsValues.LAYOUT_FRIENDLY_URL_PRIVATE_GROUP_SERVLET_MAPPING;
\r
6357 private static final String _PRIVATE_USER_SERVLET_MAPPING =
\r
6358 PropsValues.LAYOUT_FRIENDLY_URL_PRIVATE_USER_SERVLET_MAPPING;
\r
6360 private static final String _PUBLIC_GROUP_SERVLET_MAPPING =
\r
6361 PropsValues.LAYOUT_FRIENDLY_URL_PUBLIC_SERVLET_MAPPING;
\r
6363 private static Log _log = LogFactoryUtil.getLog(PortalImpl.class);
\r
6365 private static Log _logWebServerServlet = LogFactoryUtil.getLog(
\r
6366 WebServerServlet.class);
\r
6368 private static Map<Long, String> _cdnHostHttpMap =
\r
6369 new ConcurrentHashMap<Long, String>();
\r
6370 private static Map<Long, String> _cdnHostHttpsMap =
\r
6371 new ConcurrentHashMap<Long, String>();
\r
6372 private static MethodHandler _resetCDNHostsMethodHandler =
\r
6373 new MethodHandler(
\r
6374 new MethodKey(PortalUtil.class.getName(), "resetCDNHosts"));
\r
6375 private static Date _upTime = new Date();
\r
6377 private String[] _allSystemGroups;
\r
6378 private String[] _allSystemOrganizationRoles;
\r
6379 private String[] _allSystemRoles;
\r
6380 private String[] _allSystemSiteRoles;
\r
6381 private Set<String> _authTokenIgnoreActions;
\r
6382 private Set<String> _authTokenIgnorePortlets;
\r
6383 private Pattern _bannedResourceIdPattern = Pattern.compile(
\r
6384 PropsValues.PORTLET_RESOURCE_ID_BANNED_PATHS_REGEXP,
\r
6385 Pattern.CASE_INSENSITIVE);
\r
6386 private String _computerAddress;
\r
6387 private String _computerName;
\r
6388 private String[] _customSqlKeys;
\r
6389 private String[] _customSqlValues;
\r
6390 private String _pathContext;
\r
6391 private String _pathFriendlyURLPrivateGroup;
\r
6392 private String _pathFriendlyURLPrivateUser;
\r
6393 private String _pathFriendlyURLPublic;
\r
6394 private String _pathImage;
\r
6395 private String _pathMain;
\r
6396 private String _pathProxy;
\r
6397 private Map<String, Long> _plidToPortletIdMap =
\r
6398 new ConcurrentHashMap<String, Long>();
\r
6399 private final AtomicInteger _portalPort = new AtomicInteger(-1);
\r
6400 private List<PortalPortEventListener> _portalPortEventListeners =
\r
6401 new ArrayList<PortalPortEventListener>();
\r
6402 private Set<String> _portletAddDefaultResourceCheckWhitelist;
\r
6403 private Set<String> _portletAddDefaultResourceCheckWhitelistActions;
\r
6404 private Set<String> _reservedParams;
\r
6405 private final AtomicInteger _securePortalPort = new AtomicInteger(-1);
\r
6406 private String[] _sortedSystemGroups;
\r
6407 private String[] _sortedSystemOrganizationRoles;
\r
6408 private String[] _sortedSystemRoles;
\r
6409 private String[] _sortedSystemSiteRoles;
\r