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.mail.MailMessage;
022 import com.liferay.portal.kernel.util.PropsKeys;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.model.Company;
026 import com.liferay.portal.model.Group;
027 import com.liferay.portal.model.MembershipRequest;
028 import com.liferay.portal.model.MembershipRequestConstants;
029 import com.liferay.portal.model.Role;
030 import com.liferay.portal.model.RoleConstants;
031 import com.liferay.portal.model.User;
032 import com.liferay.portal.model.UserGroupRole;
033 import com.liferay.portal.service.base.MembershipRequestLocalServiceBaseImpl;
034 import com.liferay.portal.util.PrefsPropsUtil;
035 import com.liferay.util.UniqueList;
036
037 import java.io.IOException;
038
039 import java.util.Date;
040 import java.util.List;
041
042 import javax.mail.internet.InternetAddress;
043
044
047 public class MembershipRequestLocalServiceImpl
048 extends MembershipRequestLocalServiceBaseImpl {
049
050 public MembershipRequest addMembershipRequest(
051 long userId, long groupId, String comments)
052 throws PortalException, SystemException {
053
054 User user = userPersistence.findByPrimaryKey(userId);
055 Date now = new Date();
056
057 validate(comments);
058
059 long membershipRequestId = counterLocalService.increment();
060
061 MembershipRequest membershipRequest =
062 membershipRequestPersistence.create(membershipRequestId);
063
064 membershipRequest.setCompanyId(user.getCompanyId());
065 membershipRequest.setUserId(userId);
066 membershipRequest.setCreateDate(now);
067 membershipRequest.setGroupId(groupId);
068 membershipRequest.setComments(comments);
069 membershipRequest.setStatusId(
070 MembershipRequestConstants.STATUS_PENDING);
071
072 membershipRequestPersistence.update(membershipRequest, false);
073
074 try {
075 notifyCommunityAdministrators(membershipRequest);
076 }
077 catch (IOException ioe) {
078 throw new SystemException(ioe);
079 }
080
081 return membershipRequest;
082 }
083
084 public MembershipRequest getMembershipRequest(long membershipRequestId)
085 throws PortalException, SystemException {
086
087 return membershipRequestPersistence.findByPrimaryKey(
088 membershipRequestId);
089 }
090
091 public void deleteMembershipRequests(long groupId) throws SystemException {
092 membershipRequestPersistence.removeByGroupId(groupId);
093 }
094
095 public void deleteMembershipRequests(long groupId, int statusId)
096 throws SystemException {
097
098 membershipRequestPersistence.removeByG_S(groupId, statusId);
099 }
100
101 public List<MembershipRequest> search(
102 long groupId, int status, int start, int end)
103 throws SystemException {
104
105 return membershipRequestPersistence.findByG_S(
106 groupId, status, start, end);
107 }
108
109 public int searchCount(long groupId, int status) throws SystemException {
110 return membershipRequestPersistence.countByG_S(groupId, status);
111 }
112
113 public void updateStatus(
114 long replierUserId, long membershipRequestId, String replyComments,
115 int statusId)
116 throws PortalException, SystemException {
117
118 validate(replyComments);
119
120 MembershipRequest membershipRequest =
121 membershipRequestPersistence.findByPrimaryKey(
122 membershipRequestId);
123
124 membershipRequest.setReplyComments(replyComments);
125 membershipRequest.setReplyDate(new Date());
126 membershipRequest.setReplierUserId(replierUserId);
127 membershipRequest.setStatusId(statusId);
128
129 membershipRequestPersistence.update(membershipRequest, false);
130
131 if (statusId == MembershipRequestConstants.STATUS_APPROVED) {
132 long[] addUserIds = new long[] {membershipRequest.getUserId()};
133
134 userLocalService.addGroupUsers(
135 membershipRequest.getGroupId(), addUserIds);
136 }
137
138 try {
139 notify(
140 membershipRequest.getUserId(), membershipRequest,
141 PropsKeys.COMMUNITIES_EMAIL_MEMBERSHIP_REPLY_SUBJECT,
142 PropsKeys.COMMUNITIES_EMAIL_MEMBERSHIP_REPLY_BODY);
143 }
144 catch (IOException ioe) {
145 throw new SystemException(ioe);
146 }
147 }
148
149 protected void notify(
150 long userId, MembershipRequest membershipRequest,
151 String subjectProperty, String bodyProperty)
152 throws IOException, PortalException, SystemException {
153
154 Company company = companyPersistence.findByPrimaryKey(
155 membershipRequest.getCompanyId());
156
157 Group group = groupPersistence.findByPrimaryKey(
158 membershipRequest.getGroupId());
159
160 User user = userPersistence.findByPrimaryKey(userId);
161 User requestUser = userPersistence.findByPrimaryKey(
162 membershipRequest.getUserId());
163
164 String fromName = PrefsPropsUtil.getString(
165 membershipRequest.getCompanyId(),
166 PropsKeys.COMMUNITIES_EMAIL_FROM_NAME);
167
168 String fromAddress = PrefsPropsUtil.getString(
169 membershipRequest.getCompanyId(),
170 PropsKeys.COMMUNITIES_EMAIL_FROM_ADDRESS);
171
172 String toName = user.getFullName();
173 String toAddress = user.getEmailAddress();
174
175 String subject = PrefsPropsUtil.getContent(
176 membershipRequest.getCompanyId(), subjectProperty);
177
178 String body = PrefsPropsUtil.getContent(
179 membershipRequest.getCompanyId(), bodyProperty);
180
181 String statusKey = null;
182
183 if (membershipRequest.getStatusId() ==
184 MembershipRequestConstants.STATUS_APPROVED) {
185
186 statusKey = "approved";
187 }
188 else if (membershipRequest.getStatusId() ==
189 MembershipRequestConstants.STATUS_DENIED) {
190
191 statusKey = "denied";
192 }
193 else {
194 statusKey = "pending";
195 }
196
197 subject = StringUtil.replace(
198 subject,
199 new String[] {
200 "[$COMMUNITY_NAME$]",
201 "[$COMPANY_ID$]",
202 "[$COMPANY_MX$]",
203 "[$COMPANY_NAME$]",
204 "[$FROM_ADDRESS$]",
205 "[$FROM_NAME$]",
206 "[$PORTAL_URL$]",
207 "[$REQUEST_USER_ADDRESS$]",
208 "[$REQUEST_USER_NAME$]",
209 "[$STATUS$]",
210 "[$TO_NAME$]",
211 "[$USER_ADDRESS$]",
212 "[$USER_NAME$]",
213 },
214 new String[] {
215 group.getName(),
216 String.valueOf(company.getCompanyId()),
217 company.getMx(),
218 company.getName(),
219 fromAddress,
220 fromName,
221 company.getVirtualHost(),
222 requestUser.getEmailAddress(),
223 requestUser.getFullName(),
224 LanguageUtil.get(user.getLocale(), statusKey),
225 toName,
226 user.getEmailAddress(),
227 user.getFullName()
228 });
229
230 body = StringUtil.replace(
231 body,
232 new String[] {
233 "[$COMMENTS$]",
234 "[$COMMUNITY_NAME$]",
235 "[$COMPANY_ID$]",
236 "[$COMPANY_MX$]",
237 "[$COMPANY_NAME$]",
238 "[$FROM_ADDRESS$]",
239 "[$FROM_NAME$]",
240 "[$PORTAL_URL$]",
241 "[$REPLY_COMMENTS$]",
242 "[$REQUEST_USER_NAME$]",
243 "[$REQUEST_USER_ADDRESS$]",
244 "[$STATUS$]",
245 "[$TO_NAME$]",
246 "[$USER_ADDRESS$]",
247 "[$USER_NAME$]",
248 },
249 new String[] {
250 membershipRequest.getComments(),
251 group.getName(),
252 String.valueOf(company.getCompanyId()),
253 company.getMx(),
254 company.getName(),
255 fromAddress,
256 fromName,
257 company.getVirtualHost(),
258 membershipRequest.getReplyComments(),
259 requestUser.getFullName(),
260 requestUser.getEmailAddress(),
261 LanguageUtil.get(user.getLocale(), statusKey),
262 toName,
263 user.getEmailAddress(),
264 user.getFullName()
265 });
266
267 InternetAddress from = new InternetAddress(fromAddress, fromName);
268
269 InternetAddress to = new InternetAddress(toAddress, toName);
270
271 MailMessage message = new MailMessage(from, to, subject, body, true);
272
273 mailService.sendEmail(message);
274 }
275
276 protected void notifyCommunityAdministrators(
277 MembershipRequest membershipRequest)
278 throws IOException, PortalException, SystemException {
279
280 List<UserGroupRole> admins = new UniqueList<UserGroupRole>();
281
282 Role communityAdminRole = roleLocalService.getRole(
283 membershipRequest.getCompanyId(),
284 RoleConstants.COMMUNITY_ADMINISTRATOR);
285
286 List<UserGroupRole> communityAdmins =
287 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
288 membershipRequest.getGroupId(), communityAdminRole.getRoleId());
289
290 admins.addAll(communityAdmins);
291
292 Role communityOwnerRole = rolePersistence.findByC_N(
293 membershipRequest.getCompanyId(), RoleConstants.COMMUNITY_OWNER);
294
295 List<UserGroupRole> communityOwners =
296 userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
297 membershipRequest.getGroupId(), communityOwnerRole.getRoleId());
298
299 admins.addAll(communityOwners);
300
301 for (UserGroupRole userGroupRole : admins) {
302 notify(
303 userGroupRole.getUserId(), membershipRequest,
304 PropsKeys.COMMUNITIES_EMAIL_MEMBERSHIP_REQUEST_SUBJECT,
305 PropsKeys.COMMUNITIES_EMAIL_MEMBERSHIP_REQUEST_BODY);
306 }
307 }
308
309 protected void validate(String comments)
310 throws PortalException {
311
312 if ((Validator.isNull(comments)) || (Validator.isNumber(comments))) {
313 throw new MembershipRequestCommentsException();
314 }
315 }
316
317 }