1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.communities.action;
16  
17  import com.liferay.portal.NoSuchGroupException;
18  import com.liferay.portal.kernel.servlet.SessionErrors;
19  import com.liferay.portal.kernel.util.Constants;
20  import com.liferay.portal.kernel.util.ParamUtil;
21  import com.liferay.portal.kernel.util.StringUtil;
22  import com.liferay.portal.kernel.util.Validator;
23  import com.liferay.portal.liveusers.LiveUsers;
24  import com.liferay.portal.model.User;
25  import com.liferay.portal.security.auth.PrincipalException;
26  import com.liferay.portal.service.OrganizationServiceUtil;
27  import com.liferay.portal.service.UserGroupRoleServiceUtil;
28  import com.liferay.portal.service.UserGroupServiceUtil;
29  import com.liferay.portal.service.UserServiceUtil;
30  import com.liferay.portal.struts.PortletAction;
31  import com.liferay.portal.theme.ThemeDisplay;
32  import com.liferay.portal.util.PortalUtil;
33  import com.liferay.portal.util.WebKeys;
34  
35  import javax.portlet.ActionRequest;
36  import javax.portlet.ActionResponse;
37  import javax.portlet.PortletConfig;
38  import javax.portlet.RenderRequest;
39  import javax.portlet.RenderResponse;
40  
41  import org.apache.struts.action.ActionForm;
42  import org.apache.struts.action.ActionForward;
43  import org.apache.struts.action.ActionMapping;
44  
45  /**
46   * <a href="EditGroupAssignmentsAction.java.html"><b><i>View Source</i></b></a>
47   *
48   * @author Brian Wing Shun Chan
49   */
50  public class EditGroupAssignmentsAction extends PortletAction {
51  
52      public void processAction(
53              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
54              ActionRequest actionRequest, ActionResponse actionResponse)
55          throws Exception {
56  
57          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
58  
59          try {
60              if (cmd.equals("group_organizations")) {
61                  updateGroupOrganizations(actionRequest);
62              }
63              else if (cmd.equals("group_user_groups")) {
64                  updateGroupUserGroups(actionRequest);
65              }
66              else if (cmd.equals("group_users")) {
67                  updateGroupUsers(actionRequest);
68              }
69              else if (cmd.equals("user_group_role")) {
70                  updateUserGroupRole(actionRequest);
71              }
72  
73              if (Validator.isNotNull(cmd)) {
74                  String redirect = ParamUtil.getString(
75                      actionRequest, "assignmentsRedirect");
76  
77                  if (Validator.isNull(redirect)) {
78                      redirect = ParamUtil.getString(actionRequest, "redirect");
79                  }
80  
81                  sendRedirect(actionRequest, actionResponse, redirect);
82              }
83          }
84          catch (Exception e) {
85              if (e instanceof NoSuchGroupException ||
86                  e instanceof PrincipalException) {
87  
88                  SessionErrors.add(actionRequest, e.getClass().getName());
89  
90                  setForward(actionRequest, "portlet.communities.error");
91              }
92              else {
93                  throw e;
94              }
95          }
96      }
97  
98      public ActionForward render(
99              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
100             RenderRequest renderRequest, RenderResponse renderResponse)
101         throws Exception {
102 
103         try {
104             ActionUtil.getGroup(renderRequest);
105         }
106         catch (Exception e) {
107             if (e instanceof NoSuchGroupException ||
108                 e instanceof PrincipalException) {
109 
110                 SessionErrors.add(renderRequest, e.getClass().getName());
111 
112                 return mapping.findForward("portlet.communities.error");
113             }
114             else {
115                 throw e;
116             }
117         }
118 
119         return mapping.findForward(getForward(renderRequest,
120             "portlet.communities.edit_community_assignments"));
121     }
122 
123     protected void updateGroupOrganizations(ActionRequest actionRequest)
124         throws Exception {
125 
126         long groupId = ParamUtil.getLong(actionRequest, "groupId");
127 
128         long[] addOrganizationIds = StringUtil.split(
129             ParamUtil.getString(actionRequest, "addOrganizationIds"), 0L);
130         long[] removeOrganizationIds = StringUtil.split(
131             ParamUtil.getString(actionRequest, "removeOrganizationIds"), 0L);
132 
133         OrganizationServiceUtil.addGroupOrganizations(
134             groupId, addOrganizationIds);
135         OrganizationServiceUtil.unsetGroupOrganizations(
136             groupId, removeOrganizationIds);
137     }
138 
139     protected void updateGroupUserGroups(ActionRequest actionRequest)
140         throws Exception {
141 
142         long groupId = ParamUtil.getLong(actionRequest, "groupId");
143 
144         long[] addUserGroupIds = StringUtil.split(
145             ParamUtil.getString(actionRequest, "addUserGroupIds"), 0L);
146         long[] removeUserGroupIds = StringUtil.split(
147             ParamUtil.getString(actionRequest, "removeUserGroupIds"), 0L);
148 
149         UserGroupServiceUtil.addGroupUserGroups(groupId, addUserGroupIds);
150         UserGroupServiceUtil.unsetGroupUserGroups(groupId, removeUserGroupIds);
151     }
152 
153     protected void updateGroupUsers(ActionRequest actionRequest)
154         throws Exception {
155 
156         ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
157             WebKeys.THEME_DISPLAY);
158 
159         long groupId = ParamUtil.getLong(actionRequest, "groupId");
160 
161         long[] addUserIds = StringUtil.split(
162             ParamUtil.getString(actionRequest, "addUserIds"), 0L);
163         long[] removeUserIds = StringUtil.split(
164             ParamUtil.getString(actionRequest, "removeUserIds"), 0L);
165 
166         UserServiceUtil.addGroupUsers(groupId, addUserIds);
167         UserServiceUtil.unsetGroupUsers(groupId, removeUserIds);
168 
169         LiveUsers.joinGroup(themeDisplay.getCompanyId(), groupId, addUserIds);
170         LiveUsers.leaveGroup(
171             themeDisplay.getCompanyId(), groupId, removeUserIds);
172     }
173 
174     protected void updateUserGroupRole(ActionRequest actionRequest)
175         throws Exception {
176 
177         User user = PortalUtil.getSelectedUser(actionRequest, false);
178 
179         if (user == null) {
180             return;
181         }
182 
183         long groupId = ParamUtil.getLong(actionRequest, "groupId");
184 
185         long[] addRoleIds = StringUtil.split(
186             ParamUtil.getString(actionRequest, "addRoleIds"), 0L);
187         long[] removeRoleIds = StringUtil.split(
188             ParamUtil.getString(actionRequest, "removeRoleIds"), 0L);
189 
190         UserGroupRoleServiceUtil.addUserGroupRoles(
191             user.getUserId(), groupId, addRoleIds);
192         UserGroupRoleServiceUtil.deleteUserGroupRoles(
193             user.getUserId(), groupId, removeRoleIds);
194     }
195 
196 }