001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.MembershipRequestCommentsException;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.kernel.language.LanguageUtil;
021 import com.liferay.portal.kernel.util.PropsKeys;
022 import com.liferay.portal.kernel.util.Validator;
023 import com.liferay.portal.model.Group;
024 import com.liferay.portal.model.MembershipRequest;
025 import com.liferay.portal.model.MembershipRequestConstants;
026 import com.liferay.portal.model.Role;
027 import com.liferay.portal.model.RoleConstants;
028 import com.liferay.portal.model.User;
029 import com.liferay.portal.model.UserGroupRole;
030 import com.liferay.portal.service.ServiceContext;
031 import com.liferay.portal.service.base.MembershipRequestLocalServiceBaseImpl;
032 import com.liferay.portal.util.PrefsPropsUtil;
033 import com.liferay.portal.util.SubscriptionSender;
034 import com.liferay.util.UniqueList;
035
036 import java.util.Date;
037 import java.util.List;
038
039
042 public class MembershipRequestLocalServiceImpl
043 extends MembershipRequestLocalServiceBaseImpl {
044
045 public MembershipRequest addMembershipRequest(
046 long userId, long groupId, String comments,
047 ServiceContext serviceContext)
048 throws PortalException, SystemException {
049
050 User user = userPersistence.findByPrimaryKey(userId);
051 Date now = new Date();
052
053 validate(comments);
054
055 long membershipRequestId = counterLocalService.increment();
056
057 MembershipRequest membershipRequest =
058 membershipRequestPersistence.create(membershipRequestId);
059
060 membershipRequest.setCompanyId(user.getCompanyId());
061 membershipRequest.setUserId(userId);
062 membershipRequest.setCreateDate(now);
063 membershipRequest.setGroupId(groupId);
064 membershipRequest.setComments(comments);
065 membershipRequest.setStatusId(
066 MembershipRequestConstants.STATUS_PENDING);
067
068 membershipRequestPersistence.update(membershipRequest, false);
069
070 notifyGroupAdministrators(membershipRequest, serviceContext);
071
072 return membershipRequest;
073 }
074
075 @Override
076 public void deleteMembershipRequest(long membershipRequestId)
077 throws PortalException, SystemException {
078
079 MembershipRequest membershipRequest =
080 membershipRequestPersistence.findByPrimaryKey(membershipRequestId);
081
082 deleteMembershipRequest(membershipRequest);
083 }
084
085 @Override
086 public void deleteMembershipRequest(MembershipRequest membershipRequest)
087 throws SystemException {
088
089 membershipRequestPersistence.remove(membershipRequest);
090 }
091
092 public void deleteMembershipRequests(long groupId) throws SystemException {
093 List<MembershipRequest> membershipRequests =
094 membershipRequestPersistence.findByGroupId(groupId);
095
096 for (MembershipRequest membershipRequest : membershipRequests) {
097 deleteMembershipRequest(membershipRequest);
098 }
099 }
100
101 public void deleteMembershipRequests(long groupId, int statusId)
102 throws SystemException {
103
104 List<MembershipRequest> membershipRequests =
105 membershipRequestPersistence.findByG_S(groupId, statusId);
106
107 for (MembershipRequest membershipRequest : membershipRequests) {
108 deleteMembershipRequest(membershipRequest);
109 }
110 }
111
112 public void deleteMembershipRequestsByUserId(long userId)
113 throws SystemException {
114
115 List<MembershipRequest> membershipRequests =
116 membershipRequestPersistence.findByUserId(userId);
117
118 for (MembershipRequest membershipRequest : membershipRequests) {
119 deleteMembershipRequest(membershipRequest);
120 }
121 }
122
123 @Override
124 public MembershipRequest getMembershipRequest(long membershipRequestId)
125 throws PortalException, SystemException {
126
127 return membershipRequestPersistence.findByPrimaryKey(
128 membershipRequestId);
129 }
130
131 public List<MembershipRequest> getMembershipRequests(
132 long userId, long groupId, int statusId)
133 throws SystemException {
134
135 return membershipRequestPersistence.findByG_U_S(
136 groupId, userId, statusId);
137 }
138
139 public boolean hasMembershipRequest(long userId, long groupId, int statusId)
140 throws SystemException {
141
142 List<MembershipRequest> membershipRequests = getMembershipRequests(
143 userId, groupId, statusId);
144
145 if (membershipRequests.isEmpty()) {
146 return false;
147 }
148 else {
149 return true;
150 }
151 }
152
153 public List<MembershipRequest> search(
154 long groupId, int status, int start, int end)
155 throws SystemException {
156
157 return membershipRequestPersistence.findByG_S(
158 groupId, status, start, end);
159 }
160
161 public int searchCount(long groupId, int status) throws SystemException {
162 return membershipRequestPersistence.countByG_S(groupId, status);
163 }
164
165 public void updateStatus(
166 long replierUserId, long membershipRequestId, String replyComments,
167 int statusId, boolean addUserToGroup, ServiceContext serviceContext)
168 throws PortalException, SystemException {
169
170 validate(replyComments);
171
172 MembershipRequest membershipRequest =
173 membershipRequestPersistence.findByPrimaryKey(membershipRequestId);
174
175 membershipRequest.setReplyComments(replyComments);
176 membershipRequest.setReplyDate(new Date());
177
178 if (replierUserId != 0) {
179 membershipRequest.setReplierUserId(replierUserId);
180 }
181 else {
182 long defaultUserId = userLocalService.getDefaultUserId(
183 membershipRequest.getCompanyId());
184
185 membershipRequest.setReplierUserId(defaultUserId);
186 }
187
188 membershipRequest.setStatusId(statusId);
189
190 membershipRequestPersistence.update(membershipRequest, false);
191
192 if ((statusId == MembershipRequestConstants.STATUS_APPROVED) &&
193 addUserToGroup) {
194
195 long[] addUserIds = new long[] {membershipRequest.getUserId()};
196
197 userLocalService.addGroupUsers(
198 membershipRequest.getGroupId(), addUserIds);
199 }
200
201 if (replierUserId != 0) {
202 notify(
203 membershipRequest.getUserId(), membershipRequest,
204 PropsKeys.SITES_EMAIL_MEMBERSHIP_REPLY_SUBJECT,
205 PropsKeys.SITES_EMAIL_MEMBERSHIP_REPLY_BODY, serviceContext);
206 }
207 }
208
209 protected List<Long> getGroupAdministratorUserIds(long groupId)
210 throws PortalException, SystemException {
211
212 List<Long> userIds = new UniqueList<Long>();
213
214 Group group = groupLocalService.getGroup(groupId);
215
216 Role siteAdministratorRole = roleLocalService.getRole(
217 group.getCompanyId(), RoleConstants.SITE_ADMINISTRATOR);
218
219 List<UserGroupRole> siteAdministratorUserGroupRoles =
220 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
221 groupId, siteAdministratorRole.getRoleId());
222
223 for (UserGroupRole userGroupRole : siteAdministratorUserGroupRoles) {
224 userIds.add(userGroupRole.getUserId());
225 }
226
227 Role siteOwnerRole = rolePersistence.findByC_N(
228 group.getCompanyId(), RoleConstants.SITE_OWNER);
229
230 List<UserGroupRole> siteOwnerUserGroupRoles =
231 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
232 groupId, siteOwnerRole.getRoleId());
233
234 for (UserGroupRole userGroupRole : siteOwnerUserGroupRoles) {
235 userIds.add(userGroupRole.getUserId());
236 }
237
238 if (!group.isOrganization()) {
239 return userIds;
240 }
241
242 Role organizationAdministratorRole = roleLocalService.getRole(
243 group.getCompanyId(), RoleConstants.ORGANIZATION_ADMINISTRATOR);
244
245 List<UserGroupRole> organizationAdminstratorUserGroupRoles =
246 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
247 groupId, organizationAdministratorRole.getRoleId());
248
249 for (UserGroupRole orgAdministratorUserGroupRole :
250 organizationAdminstratorUserGroupRoles) {
251
252 userIds.add(orgAdministratorUserGroupRole.getUserId());
253 }
254
255 Role orgOwnerRole = roleLocalService.getRole(
256 group.getCompanyId(), RoleConstants.ORGANIZATION_OWNER);
257
258 List<UserGroupRole> organizationOwnerUserGroupRoles =
259 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
260 groupId, orgOwnerRole.getRoleId());
261
262 for (UserGroupRole organizationOwnerUserGroupRole :
263 organizationOwnerUserGroupRoles) {
264
265 userIds.add(organizationOwnerUserGroupRole.getUserId());
266 }
267
268 return userIds;
269 }
270
271 protected void notify(
272 long userId, MembershipRequest membershipRequest,
273 String subjectProperty, String bodyProperty,
274 ServiceContext serviceContext)
275 throws PortalException, SystemException {
276
277 User user = userPersistence.findByPrimaryKey(userId);
278 User requestUser = userPersistence.findByPrimaryKey(
279 membershipRequest.getUserId());
280
281 String fromName = PrefsPropsUtil.getStringFromNames(
282 membershipRequest.getCompanyId(), PropsKeys.SITES_EMAIL_FROM_NAME,
283 PropsKeys.ADMIN_EMAIL_FROM_NAME);
284
285 String fromAddress = PrefsPropsUtil.getStringFromNames(
286 membershipRequest.getCompanyId(),
287 PropsKeys.SITES_EMAIL_FROM_ADDRESS,
288 PropsKeys.ADMIN_EMAIL_FROM_ADDRESS);
289
290 String toName = user.getFullName();
291 String toAddress = user.getEmailAddress();
292
293 String subject = PrefsPropsUtil.getContent(
294 membershipRequest.getCompanyId(), subjectProperty);
295
296 String body = PrefsPropsUtil.getContent(
297 membershipRequest.getCompanyId(), bodyProperty);
298
299 String statusKey = null;
300
301 if (membershipRequest.getStatusId() ==
302 MembershipRequestConstants.STATUS_APPROVED) {
303
304 statusKey = "approved";
305 }
306 else if (membershipRequest.getStatusId() ==
307 MembershipRequestConstants.STATUS_DENIED) {
308
309 statusKey = "denied";
310 }
311 else {
312 statusKey = "pending";
313 }
314
315 SubscriptionSender subscriptionSender = new SubscriptionSender();
316
317 subscriptionSender.setBody(body);
318 subscriptionSender.setCompanyId(membershipRequest.getCompanyId());
319 subscriptionSender.setContextAttributes(
320 "[$COMMENTS$]", membershipRequest.getComments(),
321 "[$REPLY_COMMENTS$]", membershipRequest.getReplyComments(),
322 "[$REQUEST_USER_ADDRESS$]", requestUser.getEmailAddress(),
323 "[$REQUEST_USER_NAME$]", requestUser.getFullName(), "[$STATUS$]",
324 LanguageUtil.get(user.getLocale(), statusKey), "[$USER_ADDRESS$]",
325 user.getEmailAddress(), "[$USER_NAME$]", user.getFullName());
326 subscriptionSender.setFrom(fromAddress, fromName);
327 subscriptionSender.setHtmlFormat(true);
328 subscriptionSender.setMailId(
329 "membership_request", membershipRequest.getMembershipRequestId());
330 subscriptionSender.setScopeGroupId(membershipRequest.getGroupId());
331 subscriptionSender.setServiceContext(serviceContext);
332 subscriptionSender.setSubject(subject);
333 subscriptionSender.setUserId(userId);
334
335 subscriptionSender.addRuntimeSubscribers(toAddress, toName);
336
337 subscriptionSender.flushNotificationsAsync();
338 }
339
340 protected void notifyGroupAdministrators(
341 MembershipRequest membershipRequest, ServiceContext serviceContext)
342 throws PortalException, SystemException {
343
344 List<Long> userIds = getGroupAdministratorUserIds(
345 membershipRequest.getGroupId());
346
347 for (Long userId : userIds) {
348 notify(
349 userId, membershipRequest,
350 PropsKeys.SITES_EMAIL_MEMBERSHIP_REQUEST_SUBJECT,
351 PropsKeys.SITES_EMAIL_MEMBERSHIP_REQUEST_BODY, serviceContext);
352 }
353 }
354
355 protected void validate(String comments)
356 throws PortalException {
357
358 if ((Validator.isNull(comments)) || (Validator.isNumber(comments))) {
359 throw new MembershipRequestCommentsException();
360 }
361 }
362
363 }