001
014
015 package com.liferay.portlet.sites.action;
016
017 import com.liferay.portal.NoSuchGroupException;
018 import com.liferay.portal.NoSuchRoleException;
019 import com.liferay.portal.kernel.servlet.SessionErrors;
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.model.Role;
024 import com.liferay.portal.model.RoleConstants;
025 import com.liferay.portal.security.auth.PrincipalException;
026 import com.liferay.portal.security.membershippolicy.MembershipPolicyException;
027 import com.liferay.portal.service.UserGroupRoleServiceUtil;
028 import com.liferay.portal.struts.PortletAction;
029 import com.liferay.portal.util.WebKeys;
030
031 import javax.portlet.ActionRequest;
032 import javax.portlet.ActionResponse;
033 import javax.portlet.PortletConfig;
034 import javax.portlet.RenderRequest;
035 import javax.portlet.RenderResponse;
036
037 import org.apache.struts.action.ActionForm;
038 import org.apache.struts.action.ActionForward;
039 import org.apache.struts.action.ActionMapping;
040
041
044 public class EditUserRolesAction extends PortletAction {
045
046 @Override
047 public void processAction(
048 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
049 ActionRequest actionRequest, ActionResponse actionResponse)
050 throws Exception {
051
052 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
053
054 try {
055 if (cmd.equals("user_group_role_users")) {
056 updateUserGroupRoleUsers(actionRequest);
057 }
058
059 sendRedirect(actionRequest, actionResponse);
060 }
061 catch (Exception e) {
062 if (e instanceof MembershipPolicyException) {
063 SessionErrors.add(actionRequest, e.getClass(), e);
064 }
065 else if (e instanceof PrincipalException) {
066 SessionErrors.add(actionRequest, e.getClass());
067
068 setForward(actionRequest, "portlet.sites_admin.error");
069 }
070 else {
071 throw e;
072 }
073 }
074 }
075
076 @Override
077 public ActionForward render(
078 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
079 RenderRequest renderRequest, RenderResponse renderResponse)
080 throws Exception {
081
082 try {
083 ActionUtil.getGroup(renderRequest);
084 ActionUtil.getRole(renderRequest);
085
086 Role role = (Role)renderRequest.getAttribute(WebKeys.ROLE);
087
088 if (role != null) {
089 String name = role.getName();
090
091 if (name.equals(RoleConstants.ORGANIZATION_USER) ||
092 name.equals(RoleConstants.SITE_MEMBER)) {
093
094 throw new NoSuchRoleException();
095 }
096 }
097 }
098 catch (Exception e) {
099 if (e instanceof NoSuchGroupException ||
100 e instanceof NoSuchRoleException ||
101 e instanceof PrincipalException) {
102
103 SessionErrors.add(renderRequest, e.getClass());
104
105 return mapping.findForward("portlet.sites_admin.error");
106 }
107 else {
108 throw e;
109 }
110 }
111
112 return mapping.findForward(
113 getForward(renderRequest, "portlet.sites_admin.edit_user_roles"));
114 }
115
116 protected void updateUserGroupRoleUsers(ActionRequest actionRequest)
117 throws Exception {
118
119 long groupId = ParamUtil.getLong(actionRequest, "groupId");
120 long roleId = ParamUtil.getLong(actionRequest, "roleId");
121
122 long[] addUserIds = StringUtil.split(
123 ParamUtil.getString(actionRequest, "addUserIds"), 0L);
124 long[] removeUserIds = StringUtil.split(
125 ParamUtil.getString(actionRequest, "removeUserIds"), 0L);
126
127 UserGroupRoleServiceUtil.addUserGroupRoles(addUserIds, groupId, roleId);
128 UserGroupRoleServiceUtil.deleteUserGroupRoles(
129 removeUserIds, groupId, roleId);
130 }
131
132 }