2 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
4 * This library is free software; you can redistribute it and/or modify it under
5 * the terms of the GNU Lesser General Public License as published by the Free
6 * Software Foundation; either version 2.1 of the License, or (at your option)
9 * This library is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15 package com.liferay.portal.service.impl;
17 import com.liferay.portal.MembershipRequestCommentsException;
18 import com.liferay.portal.kernel.exception.PortalException;
19 import com.liferay.portal.kernel.exception.SystemException;
20 import com.liferay.portal.kernel.language.LanguageUtil;
21 import com.liferay.portal.kernel.util.PropsKeys;
22 import com.liferay.portal.kernel.util.UniqueList;
23 import com.liferay.portal.kernel.util.Validator;
24 import com.liferay.portal.model.Group;
25 import com.liferay.portal.model.MembershipRequest;
26 import com.liferay.portal.model.MembershipRequestConstants;
27 import com.liferay.portal.model.Role;
28 import com.liferay.portal.model.RoleConstants;
29 import com.liferay.portal.model.User;
30 import com.liferay.portal.model.UserGroupRole;
31 import com.liferay.portal.service.ServiceContext;
32 import com.liferay.portal.service.base.MembershipRequestLocalServiceBaseImpl;
33 import com.liferay.portal.util.PrefsPropsUtil;
34 import com.liferay.portal.util.SubscriptionSender;
36 import java.util.Date;
37 import java.util.List;
40 * @author Jorge Ferrer
42 public class MembershipRequestLocalServiceImpl
43 extends MembershipRequestLocalServiceBaseImpl {
45 public MembershipRequest addMembershipRequest(
46 long userId, long groupId, String comments,
47 ServiceContext serviceContext)
48 throws PortalException, SystemException {
50 User user = userPersistence.findByPrimaryKey(userId);
51 Date now = new Date();
55 long membershipRequestId = counterLocalService.increment();
57 MembershipRequest membershipRequest =
58 membershipRequestPersistence.create(membershipRequestId);
60 membershipRequest.setCompanyId(user.getCompanyId());
61 membershipRequest.setUserId(userId);
62 membershipRequest.setCreateDate(now);
63 membershipRequest.setGroupId(groupId);
64 membershipRequest.setComments(comments);
65 membershipRequest.setStatusId(
66 MembershipRequestConstants.STATUS_PENDING);
68 membershipRequestPersistence.update(membershipRequest, false);
70 // Notifications are manually managed
71 //notifyGroupAdministrators(membershipRequest, serviceContext);
73 return membershipRequest;
76 public void deleteMembershipRequests(long groupId) throws SystemException {
77 List<MembershipRequest> membershipRequests =
78 membershipRequestPersistence.findByGroupId(groupId);
80 for (MembershipRequest membershipRequest : membershipRequests) {
81 deleteMembershipRequest(membershipRequest);
85 public void deleteMembershipRequests(long groupId, int statusId)
86 throws SystemException {
88 List<MembershipRequest> membershipRequests =
89 membershipRequestPersistence.findByG_S(groupId, statusId);
91 for (MembershipRequest membershipRequest : membershipRequests) {
92 deleteMembershipRequest(membershipRequest);
96 public void deleteMembershipRequestsByUserId(long userId)
97 throws SystemException {
99 List<MembershipRequest> membershipRequests =
100 membershipRequestPersistence.findByUserId(userId);
102 for (MembershipRequest membershipRequest : membershipRequests) {
103 deleteMembershipRequest(membershipRequest);
107 public List<MembershipRequest> getMembershipRequestByUserId(long userId)
108 throws PortalException, SystemException {
110 return membershipRequestPersistence.findByUserId(userId);
113 public List<MembershipRequest> getMembershipRequests(
114 long userId, long groupId, int statusId)
115 throws SystemException {
117 return membershipRequestPersistence.findByG_U_S(
118 groupId, userId, statusId);
121 public boolean hasMembershipRequest(long userId, long groupId, int statusId)
122 throws SystemException {
124 List<MembershipRequest> membershipRequests = getMembershipRequests(
125 userId, groupId, statusId);
127 if (membershipRequests.isEmpty()) {
135 public List<MembershipRequest> search(
136 long groupId, int status, int start, int end)
137 throws SystemException {
139 return membershipRequestPersistence.findByG_S(
140 groupId, status, start, end);
143 public int searchCount(long groupId, int status) throws SystemException {
144 return membershipRequestPersistence.countByG_S(groupId, status);
147 public void updateStatus(
148 long replierUserId, long membershipRequestId, String replyComments,
149 int statusId, boolean addUserToGroup, ServiceContext serviceContext)
150 throws PortalException, SystemException {
152 validate(replyComments);
154 MembershipRequest membershipRequest =
155 membershipRequestPersistence.findByPrimaryKey(membershipRequestId);
157 membershipRequest.setReplyComments(replyComments);
158 membershipRequest.setReplyDate(new Date());
160 if (replierUserId != 0) {
161 membershipRequest.setReplierUserId(replierUserId);
164 long defaultUserId = userLocalService.getDefaultUserId(
165 membershipRequest.getCompanyId());
167 membershipRequest.setReplierUserId(defaultUserId);
170 membershipRequest.setStatusId(statusId);
172 membershipRequestPersistence.update(membershipRequest, false);
174 if ((statusId == MembershipRequestConstants.STATUS_APPROVED) &&
177 long[] addUserIds = new long[] {membershipRequest.getUserId()};
179 userLocalService.addGroupUsers(
180 membershipRequest.getGroupId(), addUserIds);
183 if (replierUserId != 0) {
185 membershipRequest.getUserId(), membershipRequest,
186 PropsKeys.SITES_EMAIL_MEMBERSHIP_REPLY_SUBJECT,
187 PropsKeys.SITES_EMAIL_MEMBERSHIP_REPLY_BODY, serviceContext);
191 protected List<Long> getGroupAdministratorUserIds(long groupId)
192 throws PortalException, SystemException {
194 List<Long> userIds = new UniqueList<Long>();
196 Group group = groupLocalService.getGroup(groupId);
198 Role siteAdministratorRole = roleLocalService.getRole(
199 group.getCompanyId(), RoleConstants.SITE_ADMINISTRATOR);
201 List<UserGroupRole> siteAdministratorUserGroupRoles =
202 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
203 groupId, siteAdministratorRole.getRoleId());
205 for (UserGroupRole userGroupRole : siteAdministratorUserGroupRoles) {
206 userIds.add(userGroupRole.getUserId());
209 Role siteOwnerRole = rolePersistence.findByC_N(
210 group.getCompanyId(), RoleConstants.SITE_OWNER);
212 List<UserGroupRole> siteOwnerUserGroupRoles =
213 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
214 groupId, siteOwnerRole.getRoleId());
216 for (UserGroupRole userGroupRole : siteOwnerUserGroupRoles) {
217 userIds.add(userGroupRole.getUserId());
220 if (!group.isOrganization()) {
224 Role organizationAdministratorRole = roleLocalService.getRole(
225 group.getCompanyId(), RoleConstants.ORGANIZATION_ADMINISTRATOR);
227 List<UserGroupRole> organizationAdminstratorUserGroupRoles =
228 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
229 groupId, organizationAdministratorRole.getRoleId());
231 for (UserGroupRole orgAdministratorUserGroupRole :
232 organizationAdminstratorUserGroupRoles) {
234 userIds.add(orgAdministratorUserGroupRole.getUserId());
237 Role orgOwnerRole = roleLocalService.getRole(
238 group.getCompanyId(), RoleConstants.ORGANIZATION_OWNER);
240 List<UserGroupRole> organizationOwnerUserGroupRoles =
241 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
242 groupId, orgOwnerRole.getRoleId());
244 for (UserGroupRole organizationOwnerUserGroupRole :
245 organizationOwnerUserGroupRoles) {
247 userIds.add(organizationOwnerUserGroupRole.getUserId());
253 protected void notify(
254 long userId, MembershipRequest membershipRequest,
255 String subjectProperty, String bodyProperty,
256 ServiceContext serviceContext)
257 throws PortalException, SystemException {
259 User user = userPersistence.findByPrimaryKey(userId);
260 User requestUser = userPersistence.findByPrimaryKey(
261 membershipRequest.getUserId());
263 String fromName = PrefsPropsUtil.getStringFromNames(
264 membershipRequest.getCompanyId(), PropsKeys.SITES_EMAIL_FROM_NAME,
265 PropsKeys.ADMIN_EMAIL_FROM_NAME);
267 String fromAddress = PrefsPropsUtil.getStringFromNames(
268 membershipRequest.getCompanyId(),
269 PropsKeys.SITES_EMAIL_FROM_ADDRESS,
270 PropsKeys.ADMIN_EMAIL_FROM_ADDRESS);
272 String toName = user.getFullName();
273 String toAddress = user.getEmailAddress();
275 String subject = PrefsPropsUtil.getContent(
276 membershipRequest.getCompanyId(), subjectProperty);
278 String body = PrefsPropsUtil.getContent(
279 membershipRequest.getCompanyId(), bodyProperty);
281 String statusKey = null;
283 if (membershipRequest.getStatusId() ==
284 MembershipRequestConstants.STATUS_APPROVED) {
286 statusKey = "approved";
288 else if (membershipRequest.getStatusId() ==
289 MembershipRequestConstants.STATUS_DENIED) {
291 statusKey = "denied";
294 statusKey = "pending";
297 SubscriptionSender subscriptionSender = new SubscriptionSender();
299 subscriptionSender.setBody(body);
300 subscriptionSender.setCompanyId(membershipRequest.getCompanyId());
301 subscriptionSender.setContextAttributes(
302 "[$COMMENTS$]", membershipRequest.getComments(),
303 "[$REPLY_COMMENTS$]", membershipRequest.getReplyComments(),
304 "[$REQUEST_USER_ADDRESS$]", requestUser.getEmailAddress(),
305 "[$REQUEST_USER_NAME$]", requestUser.getFullName(), "[$STATUS$]",
306 LanguageUtil.get(user.getLocale(), statusKey), "[$USER_ADDRESS$]",
307 user.getEmailAddress(), "[$USER_NAME$]", user.getFullName());
308 subscriptionSender.setFrom(fromAddress, fromName);
309 subscriptionSender.setHtmlFormat(true);
310 subscriptionSender.setMailId(
311 "membership_request", membershipRequest.getMembershipRequestId());
312 subscriptionSender.setScopeGroupId(membershipRequest.getGroupId());
313 subscriptionSender.setServiceContext(serviceContext);
314 subscriptionSender.setSubject(subject);
315 subscriptionSender.setUserId(userId);
317 subscriptionSender.addRuntimeSubscribers(toAddress, toName);
319 subscriptionSender.flushNotificationsAsync();
322 protected void notifyGroupAdministrators(
323 MembershipRequest membershipRequest, ServiceContext serviceContext)
324 throws PortalException, SystemException {
326 List<Long> userIds = getGroupAdministratorUserIds(
327 membershipRequest.getGroupId());
329 for (Long userId : userIds) {
331 userId, membershipRequest,
332 PropsKeys.SITES_EMAIL_MEMBERSHIP_REQUEST_SUBJECT,
333 PropsKeys.SITES_EMAIL_MEMBERSHIP_REQUEST_BODY, serviceContext);
337 protected void validate(String comments) throws PortalException {
338 if (Validator.isNull(comments) || Validator.isNumber(comments)) {
339 throw new MembershipRequestCommentsException();