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