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