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 List<String> guestDefaultActions =
145 ResourceActionsUtil.getModelResourceGuestDefaultActions(modelName);
146
147 if (layout.isTypeControlPanel()) {
148 Group group = themeDisplay.getScopeGroup();
149
150 if (!group.hasPrivateLayouts() &&
151 guestDefaultActions.contains(ActionKeys.VIEW)) {
152
153 return RoleConstants.GUEST;
154 }
155 }
156 else if (layout.isPublicLayout() &&
157 guestDefaultActions.contains(ActionKeys.VIEW)) {
158
159 return RoleConstants.GUEST;
160 }
161
162 List<String> groupDefaultActions =
163 ResourceActionsUtil.getModelResourceGroupDefaultActions(modelName);
164
165 if (groupDefaultActions.contains(ActionKeys.VIEW)) {
166 Group siteGroup = GroupLocalServiceUtil.getGroup(
167 themeDisplay.getSiteGroupId());
168
169 Role defaultGroupRole = RoleLocalServiceUtil.getDefaultGroupRole(
170 siteGroup.getGroupId());
171
172 return defaultGroupRole.getName();
173 }
174
175 return RoleConstants.OWNER;
176 }
177
178 @Override
179 public int doEndTag() throws JspException {
180 try {
181 JspWriter jspWriter = pageContext.getOut();
182
183 jspWriter.write(_modelName);
184
185 return EVAL_PAGE;
186 }
187 catch (Exception e) {
188 throw new JspException(e);
189 }
190 }
191
192 public void setModelName(String modelName) {
193 _modelName = modelName;
194 }
195
196 private String _modelName;
197
198 }