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,
206 serviceContext);
207 }
208 }
209
210 protected List<Long> getGroupAdministratorUserIds(long groupId)
211 throws PortalException, SystemException {
212
213 List<Long> userIds = new UniqueList<Long>();
214
215 Group group = groupLocalService.getGroup(groupId);
216
217 Role siteAdministratorRole = roleLocalService.getRole(
218 group.getCompanyId(), RoleConstants.SITE_ADMINISTRATOR);
219
220 List<UserGroupRole> siteAdministratorUserGroupRoles =
221 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
222 groupId, siteAdministratorRole.getRoleId());
223
224 for (UserGroupRole userGroupRole : siteAdministratorUserGroupRoles) {
225 userIds.add(userGroupRole.getUserId());
226 }
227
228 Role siteOwnerRole = rolePersistence.findByC_N(
229 group.getCompanyId(), RoleConstants.SITE_OWNER);
230
231 List<UserGroupRole> siteOwnerUserGroupRoles =
232 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
233 groupId, siteOwnerRole.getRoleId());
234
235 for (UserGroupRole userGroupRole : siteOwnerUserGroupRoles) {
236 userIds.add(userGroupRole.getUserId());
237 }
238
239 if (!group.isOrganization()) {
240 return userIds;
241 }
242
243 Role organizationAdministratorRole = roleLocalService.getRole(
244 group.getCompanyId(), RoleConstants.ORGANIZATION_ADMINISTRATOR);
245
246 List<UserGroupRole> organizationAdminstratorUserGroupRoles =
247 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
248 groupId, organizationAdministratorRole.getRoleId());
249
250 for (UserGroupRole orgAdministratorUserGroupRole :
251 organizationAdminstratorUserGroupRoles) {
252
253 userIds.add(orgAdministratorUserGroupRole.getUserId());
254 }
255
256 Role orgOwnerRole = roleLocalService.getRole(
257 group.getCompanyId(), RoleConstants.ORGANIZATION_OWNER);
258
259 List<UserGroupRole> organizationOwnerUserGroupRoles =
260 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
261 groupId, orgOwnerRole.getRoleId());
262
263 for (UserGroupRole organizationOwnerUserGroupRole :
264 organizationOwnerUserGroupRoles) {
265
266 userIds.add(organizationOwnerUserGroupRole.getUserId());
267 }
268
269 return userIds;
270 }
271
272 protected void notify(
273 long userId, MembershipRequest membershipRequest,
274 String subjectProperty, String bodyProperty,
275 ServiceContext serviceContext)
276 throws PortalException, SystemException {
277
278 User user = userPersistence.findByPrimaryKey(userId);
279 User requestUser = userPersistence.findByPrimaryKey(
280 membershipRequest.getUserId());
281
282 String fromName = PrefsPropsUtil.getStringFromNames(
283 membershipRequest.getCompanyId(),
284 PropsKeys.SITES_EMAIL_FROM_NAME, PropsKeys.ADMIN_EMAIL_FROM_NAME);
285
286 String fromAddress = PrefsPropsUtil.getStringFromNames(
287 membershipRequest.getCompanyId(),
288 PropsKeys.SITES_EMAIL_FROM_ADDRESS,
289 PropsKeys.ADMIN_EMAIL_FROM_ADDRESS);
290
291 String toName = user.getFullName();
292 String toAddress = user.getEmailAddress();
293
294 String subject = PrefsPropsUtil.getContent(
295 membershipRequest.getCompanyId(), subjectProperty);
296
297 String body = PrefsPropsUtil.getContent(
298 membershipRequest.getCompanyId(), bodyProperty);
299
300 String statusKey = null;
301
302 if (membershipRequest.getStatusId() ==
303 MembershipRequestConstants.STATUS_APPROVED) {
304
305 statusKey = "approved";
306 }
307 else if (membershipRequest.getStatusId() ==
308 MembershipRequestConstants.STATUS_DENIED) {
309
310 statusKey = "denied";
311 }
312 else {
313 statusKey = "pending";
314 }
315
316 SubscriptionSender subscriptionSender = new SubscriptionSender();
317
318 subscriptionSender.setBody(body);
319 subscriptionSender.setCompanyId(membershipRequest.getCompanyId());
320 subscriptionSender.setContextAttributes(
321 "[$COMMENTS$]", membershipRequest.getComments(),
322 "[$REPLY_COMMENTS$]", membershipRequest.getReplyComments(),
323 "[$REQUEST_USER_ADDRESS$]", requestUser.getEmailAddress(),
324 "[$REQUEST_USER_NAME$]", requestUser.getFullName(), "[$STATUS$]",
325 LanguageUtil.get(user.getLocale(), statusKey), "[$USER_ADDRESS$]",
326 user.getEmailAddress(), "[$USER_NAME$]", user.getFullName());
327 subscriptionSender.setFrom(fromAddress, fromName);
328 subscriptionSender.setHtmlFormat(true);
329 subscriptionSender.setMailId(
330 "membership_request", membershipRequest.getMembershipRequestId());
331 subscriptionSender.setScopeGroupId(membershipRequest.getGroupId());
332 subscriptionSender.setServiceContext(serviceContext);
333 subscriptionSender.setSubject(subject);
334 subscriptionSender.setUserId(userId);
335
336 subscriptionSender.addRuntimeSubscribers(toAddress, toName);
337
338 subscriptionSender.flushNotificationsAsync();
339 }
340
341 protected void notifyGroupAdministrators(
342 MembershipRequest membershipRequest, ServiceContext serviceContext)
343 throws PortalException, SystemException {
344
345 List<Long> userIds = getGroupAdministratorUserIds(
346 membershipRequest.getGroupId());
347
348 for (Long userId : userIds) {
349 notify(
350 userId, membershipRequest,
351 PropsKeys.SITES_EMAIL_MEMBERSHIP_REQUEST_SUBJECT,
352 PropsKeys.SITES_EMAIL_MEMBERSHIP_REQUEST_BODY,
353 serviceContext);
354 }
355 }
356
357 protected void validate(String comments)
358 throws PortalException {
359
360 if ((Validator.isNull(comments)) || (Validator.isNumber(comments))) {
361 throw new MembershipRequestCommentsException();
362 }
363 }
364
365 }