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.List;
032
033
042 public class SubscriptionLocalServiceImpl
043 extends SubscriptionLocalServiceBaseImpl {
044
045
067 @Override
068 public Subscription addSubscription(
069 long userId, long groupId, String className, long classPK)
070 throws PortalException {
071
072 return addSubscription(
073 userId, groupId, className, classPK,
074 SubscriptionConstants.FREQUENCY_INSTANT);
075 }
076
077
099 @Override
100 public Subscription addSubscription(
101 long userId, long groupId, String className, long classPK,
102 String frequency)
103 throws PortalException {
104
105
106
107 User user = userPersistence.findByPrimaryKey(userId);
108 long classNameId = classNameLocalService.getClassNameId(className);
109
110 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
111 user.getCompanyId(), userId, classNameId, classPK);
112
113 if (subscription == null) {
114 long subscriptionId = counterLocalService.increment();
115
116 subscription = subscriptionPersistence.create(subscriptionId);
117
118 subscription.setGroupId(groupId);
119 subscription.setCompanyId(user.getCompanyId());
120 subscription.setUserId(user.getUserId());
121 subscription.setUserName(user.getFullName());
122 subscription.setClassNameId(classNameId);
123 subscription.setClassPK(classPK);
124 subscription.setFrequency(frequency);
125
126 subscriptionPersistence.update(subscription);
127 }
128
129 if (groupId > 0) {
130
131
132
133 AssetEntry assetEntry = null;
134
135 try {
136 assetEntry = assetEntryLocalService.getEntry(
137 className, classPK);
138 }
139 catch (Exception e) {
140 assetEntry = assetEntryLocalService.updateEntry(
141 userId, groupId, subscription.getCreateDate(),
142 subscription.getModifiedDate(), className, classPK, null, 0,
143 null, null, false, null, null, null, null,
144 String.valueOf(groupId), null, null, null, null, 0, 0,
145 null);
146 }
147
148
149
150 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
151
152 extraDataJSONObject.put("title", assetEntry.getTitle());
153
154 if (className.equals(MBThread.class.getName())) {
155 MBThread mbThread = mbThreadLocalService.getMBThread(classPK);
156
157 extraDataJSONObject.put("threadId", classPK);
158
159 socialActivityLocalService.addActivity(
160 userId, groupId, MBMessage.class.getName(),
161 mbThread.getRootMessageId(),
162 SocialActivityConstants.TYPE_SUBSCRIBE,
163 extraDataJSONObject.toString(), 0);
164 }
165 else {
166 if (classPK != groupId) {
167 socialActivityLocalService.addActivity(
168 userId, groupId, className, classPK,
169 SocialActivityConstants.TYPE_SUBSCRIBE,
170 extraDataJSONObject.toString(), 0);
171 }
172 }
173 }
174
175 return subscription;
176 }
177
178
186 @Override
187 public Subscription deleteSubscription(long subscriptionId)
188 throws PortalException {
189
190 Subscription subscription = subscriptionPersistence.findByPrimaryKey(
191 subscriptionId);
192
193 return deleteSubscription(subscription);
194 }
195
196
206 @Override
207 public void deleteSubscription(long userId, String className, long classPK)
208 throws PortalException {
209
210 User user = userPersistence.findByPrimaryKey(userId);
211 long classNameId = classNameLocalService.getClassNameId(className);
212
213 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
214 user.getCompanyId(), userId, classNameId, classPK);
215
216 if (subscription != null) {
217 deleteSubscription(subscription);
218 }
219 }
220
221
229 @Override
230 public Subscription deleteSubscription(Subscription subscription)
231 throws PortalException {
232
233
234
235 subscriptionPersistence.remove(subscription);
236
237
238
239 AssetEntry assetEntry = assetEntryPersistence.fetchByC_C(
240 subscription.getClassNameId(), subscription.getClassPK());
241
242 if (assetEntry != null) {
243 ClassName className = classNameLocalService.getClassName(
244 subscription.getClassNameId());
245
246 String subscriptionClassName = className.getValue();
247
248 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
249
250 extraDataJSONObject.put("title", assetEntry.getTitle());
251
252 socialActivityLocalService.addActivity(
253 subscription.getUserId(), assetEntry.getGroupId(),
254 subscriptionClassName, subscription.getClassPK(),
255 SocialActivityConstants.TYPE_UNSUBSCRIBE,
256 extraDataJSONObject.toString(), 0);
257 }
258
259 return subscription;
260 }
261
262
268 @Override
269 public void deleteSubscriptions(long userId) throws PortalException {
270 List<Subscription> subscriptions = subscriptionPersistence.findByUserId(
271 userId);
272
273 for (Subscription subscription : subscriptions) {
274 deleteSubscription(subscription);
275 }
276 }
277
278 @Override
279 public void deleteSubscriptions(long userId, long groupId)
280 throws PortalException {
281
282 List<Subscription> subscriptions = subscriptionPersistence.findByG_U(
283 groupId, userId);
284
285 for (Subscription subscription : subscriptions) {
286 deleteSubscription(subscription);
287 }
288 }
289
290
298 @Override
299 public void deleteSubscriptions(
300 long companyId, String className, long classPK)
301 throws PortalException {
302
303 long classNameId = classNameLocalService.getClassNameId(className);
304
305 List<Subscription> subscriptions = subscriptionPersistence.findByC_C_C(
306 companyId, classNameId, classPK);
307
308 for (Subscription subscription : subscriptions) {
309 deleteSubscription(subscription);
310 }
311 }
312
313 @Override
314 public Subscription fetchSubscription(
315 long companyId, long userId, String className, long classPK) {
316
317 long classNameId = classNameLocalService.getClassNameId(className);
318
319 return subscriptionPersistence.fetchByC_U_C_C(
320 companyId, userId, classNameId, classPK);
321 }
322
323
333 @Override
334 public Subscription getSubscription(
335 long companyId, long userId, String className, long classPK)
336 throws PortalException {
337
338 long classNameId = classNameLocalService.getClassNameId(className);
339
340 return subscriptionPersistence.findByC_U_C_C(
341 companyId, userId, classNameId, classPK);
342 }
343
344
353 @Override
354 public List<Subscription> getSubscriptions(
355 long companyId, long userId, String className, long[] classPKs) {
356
357 long classNameId = classNameLocalService.getClassNameId(className);
358
359 return subscriptionPersistence.findByC_U_C_C(
360 companyId, userId, classNameId, classPKs);
361 }
362
363
371 @Override
372 public List<Subscription> getSubscriptions(
373 long companyId, String className, long classPK) {
374
375 long classNameId = classNameLocalService.getClassNameId(className);
376
377 return subscriptionPersistence.findByC_C_C(
378 companyId, classNameId, classPK);
379 }
380
381
390 @Override
391 public List<Subscription> getUserSubscriptions(
392 long userId, int start, int end,
393 OrderByComparator<Subscription> orderByComparator) {
394
395 return subscriptionPersistence.findByUserId(
396 userId, start, end, orderByComparator);
397 }
398
399
407 @Override
408 public List<Subscription> getUserSubscriptions(
409 long userId, String className) {
410
411 long classNameId = classNameLocalService.getClassNameId(className);
412
413 return subscriptionPersistence.findByU_C(userId, classNameId);
414 }
415
416
422 @Override
423 public int getUserSubscriptionsCount(long userId) {
424 return subscriptionPersistence.countByUserId(userId);
425 }
426
427
437 @Override
438 public boolean isSubscribed(
439 long companyId, long userId, String className, long classPK) {
440
441 long classNameId = classNameLocalService.getClassNameId(className);
442
443 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
444 companyId, userId, classNameId, classPK);
445
446 if (subscription != null) {
447 return true;
448 }
449 else {
450 return false;
451 }
452 }
453
454
465 @Override
466 public boolean isSubscribed(
467 long companyId, long userId, String className, long[] classPKs) {
468
469 long classNameId = classNameLocalService.getClassNameId(className);
470
471 int count = subscriptionPersistence.countByC_U_C_C(
472 companyId, userId, classNameId, classPKs);
473
474 if (count > 0) {
475 return true;
476 }
477 else {
478 return false;
479 }
480 }
481
482 }