001
014
015 package com.liferay.portlet.sites.action;
016
017 import com.liferay.portal.NoSuchGroupException;
018 import com.liferay.portal.kernel.servlet.SessionErrors;
019 import com.liferay.portal.kernel.util.ArrayUtil;
020 import com.liferay.portal.kernel.util.Constants;
021 import com.liferay.portal.kernel.util.ParamUtil;
022 import com.liferay.portal.kernel.util.StringUtil;
023 import com.liferay.portal.kernel.util.Validator;
024 import com.liferay.portal.liveusers.LiveUsers;
025 import com.liferay.portal.model.User;
026 import com.liferay.portal.security.auth.PrincipalException;
027 import com.liferay.portal.security.membershippolicy.MembershipPolicyException;
028 import com.liferay.portal.service.OrganizationServiceUtil;
029 import com.liferay.portal.service.ServiceContext;
030 import com.liferay.portal.service.ServiceContextFactory;
031 import com.liferay.portal.service.UserGroupGroupRoleServiceUtil;
032 import com.liferay.portal.service.UserGroupRoleServiceUtil;
033 import com.liferay.portal.service.UserGroupServiceUtil;
034 import com.liferay.portal.service.UserLocalServiceUtil;
035 import com.liferay.portal.service.UserServiceUtil;
036 import com.liferay.portal.struts.PortletAction;
037 import com.liferay.portal.theme.ThemeDisplay;
038 import com.liferay.portal.util.PortalUtil;
039 import com.liferay.portal.util.WebKeys;
040
041 import java.util.HashSet;
042 import java.util.Set;
043
044 import javax.portlet.ActionRequest;
045 import javax.portlet.ActionResponse;
046 import javax.portlet.PortletConfig;
047 import javax.portlet.RenderRequest;
048 import javax.portlet.RenderResponse;
049
050 import org.apache.struts.action.ActionForm;
051 import org.apache.struts.action.ActionForward;
052 import org.apache.struts.action.ActionMapping;
053
054
057 public class EditGroupAssignmentsAction extends PortletAction {
058
059 @Override
060 public void processAction(
061 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
062 ActionRequest actionRequest, ActionResponse actionResponse)
063 throws Exception {
064
065 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
066
067 try {
068 if (cmd.equals("group_organizations")) {
069 updateGroupOrganizations(actionRequest);
070 }
071 else if (cmd.equals("group_user_groups")) {
072 updateGroupUserGroups(actionRequest);
073 }
074 else if (cmd.equals("group_users")) {
075 updateGroupUsers(actionRequest);
076 }
077 else if (cmd.equals("user_group_group_role")) {
078 updateUserGroupGroupRole(actionRequest);
079 }
080 else if (cmd.equals("user_group_role")) {
081 updateUserGroupRole(actionRequest);
082 }
083
084 if (Validator.isNotNull(cmd)) {
085 String redirect = ParamUtil.getString(
086 actionRequest, "assignmentsRedirect");
087
088 if (Validator.isNull(redirect)) {
089 redirect = ParamUtil.getString(actionRequest, "redirect");
090 }
091
092 sendRedirect(actionRequest, actionResponse, redirect);
093 }
094 }
095 catch (Exception e) {
096 if (e instanceof MembershipPolicyException) {
097 SessionErrors.add(actionRequest, e.getClass(), e);
098 }
099 else if (e instanceof NoSuchGroupException ||
100 e instanceof PrincipalException) {
101
102 SessionErrors.add(actionRequest, e.getClass());
103
104 setForward(actionRequest, "portlet.sites_admin.error");
105 }
106 else {
107 throw e;
108 }
109 }
110 }
111
112 @Override
113 public ActionForward render(
114 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
115 RenderRequest renderRequest, RenderResponse renderResponse)
116 throws Exception {
117
118 try {
119 ActionUtil.getGroup(renderRequest);
120 }
121 catch (Exception e) {
122 if (e instanceof NoSuchGroupException ||
123 e instanceof PrincipalException) {
124
125 SessionErrors.add(renderRequest, e.getClass());
126
127 return mapping.findForward("portlet.sites_admin.error");
128 }
129 else {
130 throw e;
131 }
132 }
133
134 return mapping.findForward(
135 getForward(
136 renderRequest, "portlet.sites_admin.edit_site_assignments"));
137 }
138
139 protected long[] filterAddUserIds(long groupId, long[] userIds)
140 throws Exception {
141
142 Set<Long> filteredUserIds = new HashSet<Long>(userIds.length);
143
144 for (long userId : userIds) {
145 if (!UserLocalServiceUtil.hasGroupUser(groupId, userId)) {
146 filteredUserIds.add(userId);
147 }
148 }
149
150 return ArrayUtil.toArray(
151 filteredUserIds.toArray(new Long[filteredUserIds.size()]));
152 }
153
154 protected long[] filterRemoveUserIds(long groupId, long[] userIds)
155 throws Exception {
156
157 Set<Long> filteredUserIds = new HashSet<Long>(userIds.length);
158
159 for (long userId : userIds) {
160 if (UserLocalServiceUtil.hasGroupUser(groupId, userId)) {
161 filteredUserIds.add(userId);
162 }
163 }
164
165 return ArrayUtil.toArray(
166 filteredUserIds.toArray(new Long[filteredUserIds.size()]));
167 }
168
169 protected void updateGroupOrganizations(ActionRequest actionRequest)
170 throws Exception {
171
172 long groupId = ParamUtil.getLong(actionRequest, "groupId");
173
174 long[] addOrganizationIds = StringUtil.split(
175 ParamUtil.getString(actionRequest, "addOrganizationIds"), 0L);
176 long[] removeOrganizationIds = StringUtil.split(
177 ParamUtil.getString(actionRequest, "removeOrganizationIds"), 0L);
178
179 OrganizationServiceUtil.addGroupOrganizations(
180 groupId, addOrganizationIds);
181 OrganizationServiceUtil.unsetGroupOrganizations(
182 groupId, removeOrganizationIds);
183 }
184
185 protected void updateGroupUserGroups(ActionRequest actionRequest)
186 throws Exception {
187
188 long groupId = ParamUtil.getLong(actionRequest, "groupId");
189
190 long[] addUserGroupIds = StringUtil.split(
191 ParamUtil.getString(actionRequest, "addUserGroupIds"), 0L);
192 long[] removeUserGroupIds = StringUtil.split(
193 ParamUtil.getString(actionRequest, "removeUserGroupIds"), 0L);
194
195 UserGroupServiceUtil.addGroupUserGroups(groupId, addUserGroupIds);
196 UserGroupServiceUtil.unsetGroupUserGroups(groupId, removeUserGroupIds);
197 }
198
199 protected void updateGroupUsers(ActionRequest actionRequest)
200 throws Exception {
201
202 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
203 WebKeys.THEME_DISPLAY);
204
205 long groupId = ParamUtil.getLong(actionRequest, "groupId");
206
207 long[] addUserIds = StringUtil.split(
208 ParamUtil.getString(actionRequest, "addUserIds"), 0L);
209
210 addUserIds = filterAddUserIds(groupId, addUserIds);
211
212 long[] removeUserIds = StringUtil.split(
213 ParamUtil.getString(actionRequest, "removeUserIds"), 0L);
214
215 removeUserIds = filterRemoveUserIds(groupId, removeUserIds);
216
217 ServiceContext serviceContext = ServiceContextFactory.getInstance(
218 actionRequest);
219
220 UserServiceUtil.addGroupUsers(groupId, addUserIds, serviceContext);
221 UserServiceUtil.unsetGroupUsers(groupId, removeUserIds, serviceContext);
222
223 LiveUsers.joinGroup(themeDisplay.getCompanyId(), groupId, addUserIds);
224 LiveUsers.leaveGroup(
225 themeDisplay.getCompanyId(), groupId, removeUserIds);
226 }
227
228 protected void updateUserGroupGroupRole(ActionRequest actionRequest)
229 throws Exception {
230
231 long groupId = ParamUtil.getLong(actionRequest, "groupId");
232
233 long userGroupId = ParamUtil.getLong(actionRequest, "userGroupId");
234
235 long[] addRoleIds = StringUtil.split(
236 ParamUtil.getString(actionRequest, "addRoleIds"), 0L);
237 long[] removeRoleIds = StringUtil.split(
238 ParamUtil.getString(actionRequest, "removeRoleIds"), 0L);
239
240 UserGroupGroupRoleServiceUtil.addUserGroupGroupRoles(
241 userGroupId, groupId, addRoleIds);
242 UserGroupGroupRoleServiceUtil.deleteUserGroupGroupRoles(
243 userGroupId, groupId, removeRoleIds);
244 }
245
246 protected void updateUserGroupRole(ActionRequest actionRequest)
247 throws Exception {
248
249 User user = PortalUtil.getSelectedUser(actionRequest, false);
250
251 if (user == null) {
252 return;
253 }
254
255 long groupId = ParamUtil.getLong(actionRequest, "groupId");
256
257 long[] addRoleIds = StringUtil.split(
258 ParamUtil.getString(actionRequest, "addRoleIds"), 0L);
259 long[] removeRoleIds = StringUtil.split(
260 ParamUtil.getString(actionRequest, "removeRoleIds"), 0L);
261
262 UserGroupRoleServiceUtil.addUserGroupRoles(
263 user.getUserId(), groupId, addRoleIds);
264 UserGroupRoleServiceUtil.deleteUserGroupRoles(
265 user.getUserId(), groupId, removeRoleIds);
266 }
267
268 }