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