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