001
014
015 package com.liferay.taglib.ui;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.util.HttpUtil;
019 import com.liferay.portal.kernel.util.JavaConstants;
020 import com.liferay.portal.kernel.util.StringBundler;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.WebKeys;
023 import com.liferay.portal.model.Group;
024 import com.liferay.portal.model.Layout;
025 import com.liferay.portal.model.Role;
026 import com.liferay.portal.model.RoleConstants;
027 import com.liferay.portal.security.permission.ActionKeys;
028 import com.liferay.portal.security.permission.ResourceActionsUtil;
029 import com.liferay.portal.service.GroupLocalServiceUtil;
030 import com.liferay.portal.service.RoleLocalServiceUtil;
031 import com.liferay.portal.theme.ThemeDisplay;
032
033 import java.util.List;
034
035 import javax.portlet.RenderResponse;
036
037 import javax.servlet.http.HttpServletRequest;
038 import javax.servlet.jsp.JspException;
039 import javax.servlet.jsp.JspWriter;
040 import javax.servlet.jsp.tagext.TagSupport;
041
042
046 public class InputPermissionsParamsTag extends TagSupport {
047
048 public static String doTag(String modelName, HttpServletRequest request)
049 throws Exception {
050
051 try {
052 RenderResponse renderResponse =
053 (RenderResponse)request.getAttribute(
054 JavaConstants.JAVAX_PORTLET_RESPONSE);
055
056 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
057 WebKeys.THEME_DISPLAY);
058
059 Layout layout = themeDisplay.getLayout();
060
061 Group layoutGroup = layout.getGroup();
062
063 Group group = themeDisplay.getScopeGroup();
064
065 List<String> supportedActions =
066 ResourceActionsUtil.getModelResourceActions(modelName);
067 List<String> groupDefaultActions =
068 ResourceActionsUtil.getModelResourceGroupDefaultActions(
069 modelName);
070 List<String> guestDefaultActions =
071 ResourceActionsUtil.getModelResourceGuestDefaultActions(
072 modelName);
073 List<String> guestUnsupportedActions =
074 ResourceActionsUtil.getModelResourceGuestUnsupportedActions(
075 modelName);
076
077 StringBundler sb = new StringBundler();
078
079 for (int i = 0; i < supportedActions.size(); i++) {
080 String action = supportedActions.get(i);
081
082 boolean groupChecked = groupDefaultActions.contains(action);
083
084 boolean guestChecked = false;
085
086 if (layoutGroup.isControlPanel()) {
087 if (!group.hasPrivateLayouts() &&
088 guestDefaultActions.contains(action)) {
089
090 guestChecked = true;
091 }
092 }
093 else if (layout.isPublicLayout() &&
094 guestDefaultActions.contains(action)) {
095
096 guestChecked = true;
097 }
098
099 boolean guestDisabled = guestUnsupportedActions.contains(
100 action);
101
102 if (guestDisabled) {
103 guestChecked = false;
104 }
105
106 if (group.isOrganization() || group.isRegularSite()) {
107 if (groupChecked) {
108 sb.append(StringPool.AMPERSAND);
109 sb.append(renderResponse.getNamespace());
110 sb.append("groupPermissions=");
111 sb.append(HttpUtil.encodeURL(action));
112 }
113 }
114
115 if (guestChecked) {
116 sb.append(StringPool.AMPERSAND);
117 sb.append(renderResponse.getNamespace());
118 sb.append("guestPermissions=");
119 sb.append(HttpUtil.encodeURL(action));
120 }
121 }
122
123 String inputPermissionsViewRole = getDefaultViewRole(
124 modelName, themeDisplay);
125
126 sb.append(StringPool.AMPERSAND);
127 sb.append(renderResponse.getNamespace());
128 sb.append("inputPermissionsViewRole=");
129 sb.append(HttpUtil.encodeURL(inputPermissionsViewRole));
130
131 return sb.toString();
132 }
133 catch (Exception e) {
134 throw new JspException(e);
135 }
136 }
137
138 public static String getDefaultViewRole(
139 String modelName, ThemeDisplay themeDisplay)
140 throws PortalException {
141
142 Layout layout = themeDisplay.getLayout();
143
144 Group layoutGroup = layout.getGroup();
145
146 List<String> guestDefaultActions =
147 ResourceActionsUtil.getModelResourceGuestDefaultActions(modelName);
148
149 if (layoutGroup.isControlPanel()) {
150 Group group = themeDisplay.getScopeGroup();
151
152 if (!group.hasPrivateLayouts() &&
153 guestDefaultActions.contains(ActionKeys.VIEW)) {
154
155 return RoleConstants.GUEST;
156 }
157 }
158 else if (layout.isPublicLayout() &&
159 guestDefaultActions.contains(ActionKeys.VIEW)) {
160
161 return RoleConstants.GUEST;
162 }
163
164 List<String> groupDefaultActions =
165 ResourceActionsUtil.getModelResourceGroupDefaultActions(modelName);
166
167 if (groupDefaultActions.contains(ActionKeys.VIEW)) {
168 Group siteGroup = GroupLocalServiceUtil.getGroup(
169 themeDisplay.getSiteGroupId());
170
171 Role defaultGroupRole = RoleLocalServiceUtil.getDefaultGroupRole(
172 siteGroup.getGroupId());
173
174 return defaultGroupRole.getName();
175 }
176
177 return RoleConstants.OWNER;
178 }
179
180 @Override
181 public int doEndTag() throws JspException {
182 try {
183 JspWriter jspWriter = pageContext.getOut();
184
185 jspWriter.write(_modelName);
186
187 return EVAL_PAGE;
188 }
189 catch (Exception e) {
190 throw new JspException(e);
191 }
192 }
193
194 public void setModelName(String modelName) {
195 _modelName = modelName;
196 }
197
198 private String _modelName;
199
200 }