001
014
015 package com.liferay.portlet.announcements.util;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.kernel.util.ListUtil;
021 import com.liferay.portal.kernel.util.PropsKeys;
022 import com.liferay.portal.kernel.util.PropsUtil;
023 import com.liferay.portal.kernel.util.UniqueList;
024 import com.liferay.portal.model.Group;
025 import com.liferay.portal.model.Organization;
026 import com.liferay.portal.model.Role;
027 import com.liferay.portal.model.RoleConstants;
028 import com.liferay.portal.model.Team;
029 import com.liferay.portal.model.User;
030 import com.liferay.portal.model.UserGroup;
031 import com.liferay.portal.service.GroupLocalServiceUtil;
032 import com.liferay.portal.service.OrganizationLocalServiceUtil;
033 import com.liferay.portal.service.RoleLocalServiceUtil;
034 import com.liferay.portal.service.TeamLocalServiceUtil;
035 import com.liferay.portal.service.UserGroupLocalServiceUtil;
036 import com.liferay.portal.service.UserLocalServiceUtil;
037 import com.liferay.portal.util.PortalUtil;
038
039 import java.util.ArrayList;
040 import java.util.LinkedHashMap;
041 import java.util.List;
042
043
046 public class AnnouncementsUtil {
047
048 public static LinkedHashMap<Long, long[]> getAnnouncementScopes(long userId)
049 throws PortalException, SystemException {
050
051 LinkedHashMap<Long, long[]> scopes = new LinkedHashMap<Long, long[]>();
052
053
054
055 scopes.put(new Long(0), new long[] {0});
056
057
058
059 scopes.put(_USER_CLASS_NAME_ID, new long[] {userId});
060
061
062
063 List<Group> groupsList = new ArrayList<Group>();
064
065 List<Organization> organizations =
066 OrganizationLocalServiceUtil.getUserOrganizations(userId);
067
068 if (!organizations.isEmpty()) {
069 List<Organization> organizationsList =
070 new ArrayList<Organization>();
071
072 organizationsList.addAll(organizations);
073
074 for (Organization organization : organizations) {
075 groupsList.add(organization.getGroup());
076
077 List<Organization> parentOrganizations =
078 OrganizationLocalServiceUtil.getParentOrganizations(
079 organization.getOrganizationId());
080
081 for (Organization parentOrganization : parentOrganizations) {
082 organizationsList.add(parentOrganization);
083 groupsList.add(parentOrganization.getGroup());
084 }
085 }
086
087 scopes.put(
088 _ORGANIZATION_CLASS_NAME_ID,
089 _getOrganizationIds(organizationsList));
090 }
091
092
093
094 List<Group> groups = GroupLocalServiceUtil.getUserGroups(userId, true);
095
096 if (!groups.isEmpty()) {
097 scopes.put(_GROUP_CLASS_NAME_ID, _getGroupIds(groups));
098
099 groupsList.addAll(groups);
100 }
101
102
103
104 List<UserGroup> userGroups =
105 UserGroupLocalServiceUtil.getUserUserGroups(userId);
106
107 if (!userGroups.isEmpty()) {
108 scopes.put(_USER_GROUP_CLASS_NAME_ID, _getUserGroupIds(userGroups));
109
110 for (UserGroup userGroup : userGroups) {
111 groupsList.add(userGroup.getGroup());
112 }
113 }
114
115
116
117 List<Role> roles = new UniqueList<Role>();
118
119 if (!groupsList.isEmpty()) {
120 roles = RoleLocalServiceUtil.getUserRelatedRoles(
121 userId, groupsList);
122
123 roles = ListUtil.copy(roles);
124
125 for (Group group : groupsList) {
126 roles.addAll(
127 RoleLocalServiceUtil.getUserGroupRoles(
128 userId, group.getGroupId()));
129 roles.addAll(
130 RoleLocalServiceUtil.getUserGroupGroupRoles(
131 userId, group.getGroupId()));
132 }
133 }
134 else {
135 roles = RoleLocalServiceUtil.getUserRoles(userId);
136
137 roles = ListUtil.copy(roles);
138 }
139
140 List<Team> teams = TeamLocalServiceUtil.getUserTeams(userId);
141
142 for (Team team : teams) {
143 roles.add(team.getRole());
144 }
145
146 if (_PERMISSIONS_CHECK_GUEST_ENABLED) {
147 User user = UserLocalServiceUtil.getUserById(userId);
148
149 Role guestRole = RoleLocalServiceUtil.getRole(
150 user.getCompanyId(), RoleConstants.GUEST);
151
152 roles.add(guestRole);
153 }
154
155 if (roles.size() > 0) {
156 scopes.put(_ROLE_CLASS_NAME_ID, _getRoleIds(roles));
157 }
158
159 return scopes;
160 }
161
162 private static long[] _getGroupIds(List<Group> groups) {
163 long[] groupIds = new long[groups.size()];
164
165 int i = 0;
166
167 for (Group group : groups) {
168 groupIds[i++] = group.getGroupId();
169 }
170
171 return groupIds;
172 }
173
174 private static long[] _getOrganizationIds(
175 List<Organization> organizations) {
176
177 long[] organizationIds = new long[organizations.size()];
178
179 int i = 0;
180
181 for (Organization organization : organizations) {
182 organizationIds[i++] = organization.getOrganizationId();
183 }
184
185 return organizationIds;
186 }
187
188 private static long[] _getRoleIds(List<Role> roles) {
189 long[] roleIds = new long[roles.size()];
190
191 int i = 0;
192
193 for (Role role : roles) {
194 roleIds[i++] = role.getRoleId();
195 }
196
197 return roleIds;
198 }
199
200 private static long[] _getUserGroupIds(List<UserGroup> userGroups) {
201 long[] userGroupIds = new long[userGroups.size()];
202
203 int i = 0;
204
205 for (UserGroup userGroup : userGroups) {
206 userGroupIds[i++] = userGroup.getUserGroupId();
207 }
208
209 return userGroupIds;
210 }
211
212 private static final long _GROUP_CLASS_NAME_ID = PortalUtil.getClassNameId(
213 Group.class.getName());
214
215 private static final long _ORGANIZATION_CLASS_NAME_ID =
216 PortalUtil.getClassNameId(Organization.class.getName());
217
218 private static final boolean _PERMISSIONS_CHECK_GUEST_ENABLED =
219 GetterUtil.getBoolean(
220 PropsUtil.get(PropsKeys.PERMISSIONS_CHECK_GUEST_ENABLED));
221
222 private static final long _ROLE_CLASS_NAME_ID = PortalUtil.getClassNameId(
223 Role.class.getName());
224
225 private static final long _USER_CLASS_NAME_ID = PortalUtil.getClassNameId(
226 User.class.getName());
227
228 private static final long _USER_GROUP_CLASS_NAME_ID =
229 PortalUtil.getClassNameId(UserGroup.class.getName());
230
231 }