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.Group;
023 import com.liferay.portal.model.Layout;
024 import com.liferay.portal.model.LayoutConstants;
025 import com.liferay.portal.security.permission.ActionKeys;
026 import com.liferay.portal.security.permission.PermissionChecker;
027 import com.liferay.portal.service.GroupLocalServiceUtil;
028 import com.liferay.portal.service.LayoutLocalServiceUtil;
029 import com.liferay.portal.service.permission.LayoutPermissionUtil;
030 import com.liferay.portal.struts.PortletAction;
031 import com.liferay.portal.theme.ThemeDisplay;
032 import com.liferay.portal.util.PortalUtil;
033 import com.liferay.portal.util.WebKeys;
034
035 import java.util.List;
036
037 import javax.portlet.ActionRequest;
038 import javax.portlet.ActionResponse;
039 import javax.portlet.PortletConfig;
040 import javax.portlet.RenderRequest;
041 import javax.portlet.RenderResponse;
042
043 import javax.servlet.http.HttpServletRequest;
044 import javax.servlet.http.HttpServletResponse;
045
046 import org.apache.struts.action.ActionForm;
047 import org.apache.struts.action.ActionForward;
048 import org.apache.struts.action.ActionMapping;
049
050
054 public class ViewAction extends PortletAction {
055
056 @Override
057 public void processAction(
058 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
059 ActionRequest actionRequest, 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 mapping, ActionForm form, PortletConfig portletConfig,
094 RenderRequest renderRequest, RenderResponse renderResponse)
095 throws Exception {
096
097 return mapping.findForward("portlet.my_sites.view");
098 }
099
100 @Override
101 public ActionForward strutsExecute(
102 ActionMapping mapping, ActionForm form, HttpServletRequest request,
103 HttpServletResponse response)
104 throws Exception {
105
106 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
107 WebKeys.THEME_DISPLAY);
108
109 long groupId = ParamUtil.getLong(request, "groupId");
110 String privateLayoutParam = request.getParameter("privateLayout");
111
112 List<Layout> layouts = getLayouts(groupId, privateLayoutParam);
113
114 if (layouts.isEmpty()) {
115 SessionErrors.add(
116 request, NoSuchLayoutSetException.class.getName(),
117 new NoSuchLayoutSetException(
118 "{groupId=" + groupId + ",privateLayout=" +
119 privateLayoutParam + "}"));
120 }
121
122 String redirect = getRedirect(
123 themeDisplay, layouts, groupId, privateLayoutParam);
124
125 if (Validator.isNull(redirect)) {
126 redirect = ParamUtil.getString(request, "redirect");
127 }
128
129 response.sendRedirect(redirect);
130
131 return null;
132 }
133
134 protected List<Layout> getLayouts(long groupId, boolean privateLayout)
135 throws Exception {
136
137 return LayoutLocalServiceUtil.getLayouts(
138 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
139 }
140
141 protected List<Layout> getLayouts(long groupId, String privateLayoutParam)
142 throws Exception {
143
144 List<Layout> layouts = null;
145
146 boolean privateLayout = false;
147
148 if (Validator.isNull(privateLayoutParam)) {
149 layouts = getLayouts(groupId, false);
150
151 if (layouts.isEmpty()) {
152 layouts = getLayouts(groupId, true);
153 }
154 }
155 else {
156 privateLayout = GetterUtil.getBoolean(privateLayoutParam);
157
158 layouts = getLayouts(groupId, privateLayout);
159 }
160
161 return layouts;
162 }
163
164 protected String getRedirect(
165 ThemeDisplay themeDisplay, List<Layout> layouts, long groupId,
166 String privateLayoutParam)
167 throws Exception {
168
169 PermissionChecker permissionChecker =
170 themeDisplay.getPermissionChecker();
171
172 for (Layout layout : layouts) {
173 if (!layout.isHidden() &&
174 LayoutPermissionUtil.contains(
175 permissionChecker, layout, ActionKeys.VIEW)) {
176
177 return PortalUtil.getLayoutURL(layout, themeDisplay);
178 }
179 }
180
181 Group group = GroupLocalServiceUtil.getGroup(groupId);
182
183 return PortalUtil.getGroupFriendlyURL(
184 group, GetterUtil.getBoolean(privateLayoutParam), themeDisplay);
185 }
186
187 @Override
188 protected boolean isCheckMethodOnProcessAction() {
189 return _CHECK_METHOD_ON_PROCESS_ACTION;
190 }
191
192 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
193
194 }