001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.json.JSONFactoryUtil;
019 import com.liferay.portal.kernel.json.JSONObject;
020 import com.liferay.portal.kernel.util.OrderByComparator;
021 import com.liferay.portal.model.ClassName;
022 import com.liferay.portal.model.Subscription;
023 import com.liferay.portal.model.SubscriptionConstants;
024 import com.liferay.portal.model.User;
025 import com.liferay.portal.service.base.SubscriptionLocalServiceBaseImpl;
026 import com.liferay.portlet.asset.model.AssetEntry;
027 import com.liferay.portlet.messageboards.model.MBMessage;
028 import com.liferay.portlet.messageboards.model.MBThread;
029 import com.liferay.portlet.social.model.SocialActivityConstants;
030
031 import java.util.Date;
032 import java.util.List;
033
034
043 public class SubscriptionLocalServiceImpl
044 extends SubscriptionLocalServiceBaseImpl {
045
046
068 @Override
069 public Subscription addSubscription(
070 long userId, long groupId, String className, long classPK)
071 throws PortalException {
072
073 return addSubscription(
074 userId, groupId, className, classPK,
075 SubscriptionConstants.FREQUENCY_INSTANT);
076 }
077
078
100 @Override
101 public Subscription addSubscription(
102 long userId, long groupId, String className, long classPK,
103 String frequency)
104 throws PortalException {
105
106
107
108 User user = userPersistence.findByPrimaryKey(userId);
109 long classNameId = classNameLocalService.getClassNameId(className);
110 Date now = new Date();
111
112 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
113 user.getCompanyId(), userId, classNameId, classPK);
114
115 if (subscription == null) {
116 long subscriptionId = counterLocalService.increment();
117
118 subscription = subscriptionPersistence.create(subscriptionId);
119
120 subscription.setCompanyId(user.getCompanyId());
121 subscription.setUserId(user.getUserId());
122 subscription.setUserName(user.getFullName());
123 subscription.setCreateDate(now);
124 subscription.setModifiedDate(now);
125 subscription.setClassNameId(classNameId);
126 subscription.setClassPK(classPK);
127 subscription.setFrequency(frequency);
128
129 subscriptionPersistence.update(subscription);
130 }
131
132 if (groupId > 0) {
133
134
135
136 AssetEntry assetEntry = null;
137
138 try {
139 assetEntry = assetEntryLocalService.getEntry(
140 className, classPK);
141 }
142 catch (Exception e) {
143 assetEntry = assetEntryLocalService.updateEntry(
144 userId, groupId, subscription.getCreateDate(),
145 subscription.getModifiedDate(), className, classPK, null, 0,
146 null, null, false, null, null, null, null,
147 String.valueOf(groupId), null, null, null, null, 0, 0, null,
148 false);
149 }
150
151
152
153 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
154
155 extraDataJSONObject.put("title", assetEntry.getTitle());
156
157 if (className.equals(MBThread.class.getName())) {
158 MBThread mbThread = mbThreadLocalService.getMBThread(classPK);
159
160 extraDataJSONObject.put("threadId", classPK);
161
162 socialActivityLocalService.addActivity(
163 userId, groupId, MBMessage.class.getName(),
164 mbThread.getRootMessageId(),
165 SocialActivityConstants.TYPE_SUBSCRIBE,
166 extraDataJSONObject.toString(), 0);
167 }
168 else {
169 if (classPK != groupId) {
170 socialActivityLocalService.addActivity(
171 userId, groupId, className, classPK,
172 SocialActivityConstants.TYPE_SUBSCRIBE,
173 extraDataJSONObject.toString(), 0);
174 }
175 }
176 }
177
178 return subscription;
179 }
180
181
189 @Override
190 public Subscription deleteSubscription(long subscriptionId)
191 throws PortalException {
192
193 Subscription subscription = subscriptionPersistence.findByPrimaryKey(
194 subscriptionId);
195
196 return deleteSubscription(subscription);
197 }
198
199
209 @Override
210 public void deleteSubscription(long userId, String className, long classPK)
211 throws PortalException {
212
213 User user = userPersistence.findByPrimaryKey(userId);
214 long classNameId = classNameLocalService.getClassNameId(className);
215
216 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
217 user.getCompanyId(), userId, classNameId, classPK);
218
219 if (subscription != null) {
220 deleteSubscription(subscription);
221 }
222 }
223
224
232 @Override
233 public Subscription deleteSubscription(Subscription subscription)
234 throws PortalException {
235
236
237
238 subscriptionPersistence.remove(subscription);
239
240
241
242 AssetEntry assetEntry = assetEntryPersistence.fetchByC_C(
243 subscription.getClassNameId(), subscription.getClassPK());
244
245 if (assetEntry != null) {
246 ClassName className = classNameLocalService.getClassName(
247 subscription.getClassNameId());
248
249 String subscriptionClassName = className.getValue();
250
251 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
252
253 extraDataJSONObject.put("title", assetEntry.getTitle());
254
255 socialActivityLocalService.addActivity(
256 subscription.getUserId(), assetEntry.getGroupId(),
257 subscriptionClassName, subscription.getClassPK(),
258 SocialActivityConstants.TYPE_UNSUBSCRIBE,
259 extraDataJSONObject.toString(), 0);
260 }
261
262 return subscription;
263 }
264
265
271 @Override
272 public void deleteSubscriptions(long userId) throws PortalException {
273 List<Subscription> subscriptions = subscriptionPersistence.findByUserId(
274 userId);
275
276 for (Subscription subscription : subscriptions) {
277 deleteSubscription(subscription);
278 }
279 }
280
281
289 @Override
290 public void deleteSubscriptions(
291 long companyId, String className, long classPK)
292 throws PortalException {
293
294 long classNameId = classNameLocalService.getClassNameId(className);
295
296 List<Subscription> subscriptions = subscriptionPersistence.findByC_C_C(
297 companyId, classNameId, classPK);
298
299 for (Subscription subscription : subscriptions) {
300 deleteSubscription(subscription);
301 }
302 }
303
304
314 @Override
315 public Subscription getSubscription(
316 long companyId, long userId, String className, long classPK)
317 throws PortalException {
318
319 long classNameId = classNameLocalService.getClassNameId(className);
320
321 return subscriptionPersistence.findByC_U_C_C(
322 companyId, userId, classNameId, classPK);
323 }
324
325
334 @Override
335 public List<Subscription> getSubscriptions(
336 long companyId, long userId, String className, long[] classPKs) {
337
338 long classNameId = classNameLocalService.getClassNameId(className);
339
340 return subscriptionPersistence.findByC_U_C_C(
341 companyId, userId, classNameId, classPKs);
342 }
343
344
352 @Override
353 public List<Subscription> getSubscriptions(
354 long companyId, String className, long classPK) {
355
356 long classNameId = classNameLocalService.getClassNameId(className);
357
358 return subscriptionPersistence.findByC_C_C(
359 companyId, classNameId, classPK);
360 }
361
362
371 @Override
372 public List<Subscription> getUserSubscriptions(
373 long userId, int start, int end,
374 OrderByComparator<Subscription> orderByComparator) {
375
376 return subscriptionPersistence.findByUserId(
377 userId, start, end, orderByComparator);
378 }
379
380
388 @Override
389 public List<Subscription> getUserSubscriptions(
390 long userId, String className) {
391
392 long classNameId = classNameLocalService.getClassNameId(className);
393
394 return subscriptionPersistence.findByU_C(userId, classNameId);
395 }
396
397
403 @Override
404 public int getUserSubscriptionsCount(long userId) {
405 return subscriptionPersistence.countByUserId(userId);
406 }
407
408
418 @Override
419 public boolean isSubscribed(
420 long companyId, long userId, String className, long classPK) {
421
422 long classNameId = classNameLocalService.getClassNameId(className);
423
424 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
425 companyId, userId, classNameId, classPK);
426
427 if (subscription != null) {
428 return true;
429 }
430 else {
431 return false;
432 }
433 }
434
435
446 @Override
447 public boolean isSubscribed(
448 long companyId, long userId, String className, long[] classPKs) {
449
450 long classNameId = classNameLocalService.getClassNameId(className);
451
452 int count = subscriptionPersistence.countByC_U_C_C(
453 companyId, userId, classNameId, classPKs);
454
455 if (count > 0) {
456 return true;
457 }
458 else {
459 return false;
460 }
461 }
462
463 }