001
014
015 package com.liferay.portlet.myplaces.action;
016
017 import com.liferay.portal.NoSuchLayoutSetException;
018 import com.liferay.portal.kernel.servlet.SessionErrors;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.kernel.util.ParamUtil;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.model.Layout;
023 import com.liferay.portal.model.LayoutConstants;
024 import com.liferay.portal.security.permission.ActionKeys;
025 import com.liferay.portal.security.permission.PermissionChecker;
026 import com.liferay.portal.service.LayoutLocalServiceUtil;
027 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
028 import com.liferay.portal.service.permission.LayoutPermissionUtil;
029 import com.liferay.portal.struts.PortletAction;
030 import com.liferay.portal.theme.ThemeDisplay;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portal.util.WebKeys;
033
034 import java.util.List;
035
036 import javax.portlet.ActionRequest;
037 import javax.portlet.ActionResponse;
038 import javax.portlet.PortletConfig;
039 import javax.portlet.RenderRequest;
040 import javax.portlet.RenderResponse;
041
042 import javax.servlet.http.HttpServletRequest;
043 import javax.servlet.http.HttpServletResponse;
044
045 import org.apache.struts.action.ActionForm;
046 import org.apache.struts.action.ActionForward;
047 import org.apache.struts.action.ActionMapping;
048
049
053 public class ViewAction extends PortletAction {
054
055 @Override
056 public void processAction(
057 ActionMapping actionMapping, ActionForm actionForm,
058 PortletConfig portletConfig, ActionRequest actionRequest,
059 ActionResponse actionResponse)
060 throws Exception {
061
062 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
063 WebKeys.THEME_DISPLAY);
064
065 long groupId = ParamUtil.getLong(actionRequest, "groupId");
066 String privateLayoutParam = actionRequest.getParameter("privateLayout");
067
068 List<Layout> layouts = getLayouts(groupId, privateLayoutParam);
069
070 if (layouts.isEmpty()) {
071 SessionErrors.add(
072 actionRequest, NoSuchLayoutSetException.class.getName(),
073 new NoSuchLayoutSetException(
074 "{groupId=" + groupId + ",privateLayout=" +
075 privateLayoutParam + "}"));
076 }
077
078 String redirect = getRedirect(
079 themeDisplay, layouts, groupId, privateLayoutParam);
080
081 if (Validator.isNull(redirect)) {
082 redirect = PortalUtil.escapeRedirect(
083 ParamUtil.getString(actionRequest, "redirect"));
084 }
085
086 if (Validator.isNotNull(redirect)) {
087 actionResponse.sendRedirect(redirect);
088 }
089 }
090
091 @Override
092 public ActionForward render(
093 ActionMapping actionMapping, ActionForm actionForm,
094 PortletConfig portletConfig, RenderRequest renderRequest,
095 RenderResponse renderResponse)
096 throws Exception {
097
098 return actionMapping.findForward("portlet.my_sites.view");
099 }
100
101 @Override
102 public ActionForward strutsExecute(
103 ActionMapping actionMapping, ActionForm actionForm,
104 HttpServletRequest request, HttpServletResponse response)
105 throws Exception {
106
107 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
108 WebKeys.THEME_DISPLAY);
109
110 long groupId = ParamUtil.getLong(request, "groupId");
111 String privateLayoutParam = request.getParameter("privateLayout");
112
113 List<Layout> layouts = getLayouts(groupId, privateLayoutParam);
114
115 if (layouts.isEmpty()) {
116 SessionErrors.add(
117 request, NoSuchLayoutSetException.class.getName(),
118 new NoSuchLayoutSetException(
119 "{groupId=" + groupId + ",privateLayout=" +
120 privateLayoutParam + "}"));
121 }
122
123 String redirect = getRedirect(
124 themeDisplay, layouts, groupId, privateLayoutParam);
125
126 if (Validator.isNull(redirect)) {
127 redirect = ParamUtil.getString(request, "redirect");
128 }
129
130 response.sendRedirect(redirect);
131
132 return null;
133 }
134
135 protected List<Layout> getLayouts(long groupId, boolean privateLayout)
136 throws Exception {
137
138 return LayoutLocalServiceUtil.getLayouts(
139 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
140 }
141
142 protected List<Layout> getLayouts(long groupId, String privateLayoutParam)
143 throws Exception {
144
145 List<Layout> layouts = null;
146
147 boolean privateLayout = false;
148
149 if (Validator.isNull(privateLayoutParam)) {
150 layouts = getLayouts(groupId, false);
151
152 if (layouts.isEmpty()) {
153 layouts = getLayouts(groupId, true);
154 }
155 }
156 else {
157 privateLayout = GetterUtil.getBoolean(privateLayoutParam);
158
159 layouts = getLayouts(groupId, privateLayout);
160 }
161
162 return layouts;
163 }
164
165 protected String getRedirect(
166 ThemeDisplay themeDisplay, List<Layout> layouts, long groupId,
167 String privateLayoutParam)
168 throws Exception {
169
170 PermissionChecker permissionChecker =
171 themeDisplay.getPermissionChecker();
172
173 for (Layout layout : layouts) {
174 if (!layout.isHidden() &&
175 LayoutPermissionUtil.contains(
176 permissionChecker, layout, ActionKeys.VIEW)) {
177
178 String canonicalURL = PortalUtil.getCanonicalURL(
179 null, themeDisplay, layout, true);
180
181 return PortalUtil.addPreservedParameters(
182 themeDisplay, layout, canonicalURL, true);
183 }
184 }
185
186 String groupFriendlyURL = PortalUtil.getGroupFriendlyURL(
187 LayoutSetLocalServiceUtil.getLayoutSet(
188 groupId, GetterUtil.getBoolean(privateLayoutParam)),
189 themeDisplay);
190
191 return PortalUtil.addPreservedParameters(
192 themeDisplay, groupFriendlyURL);
193 }
194
195 @Override
196 protected boolean isCheckMethodOnProcessAction() {
197 return _CHECK_METHOD_ON_PROCESS_ACTION;
198 }
199
200 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
201
202 }