1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.announce.service;
35
36 import fr.paris.lutece.plugins.announce.business.*;
37 import fr.paris.lutece.plugins.announce.web.AnnounceApp;
38 import fr.paris.lutece.plugins.module.announce.subscribe.business.AnnounceSubscribtionDTO;
39 import fr.paris.lutece.plugins.module.announce.subscribe.service.AnnounceSubscriptionService;
40 import fr.paris.lutece.plugins.subscribe.business.Subscription;
41 import fr.paris.lutece.plugins.subscribe.business.SubscriptionFilter;
42 import fr.paris.lutece.plugins.subscribe.service.ISubscriptionProviderService;
43 import fr.paris.lutece.portal.service.security.LuteceUser;
44 import fr.paris.lutece.portal.service.security.LuteceUserService;
45 import fr.paris.lutece.portal.service.spring.SpringContextService;
46 import fr.paris.lutece.portal.service.template.AppTemplateService;
47 import fr.paris.lutece.portal.web.LocalVariables;
48 import fr.paris.lutece.util.html.HtmlTemplate;
49
50 import org.apache.commons.collections.CollectionUtils;
51 import org.apache.commons.lang3.StringUtils;
52
53 import java.util.HashMap;
54 import java.util.List;
55 import java.util.Locale;
56 import java.util.Map;
57
58
59
60
61 public class AnnounceSubscriptionProvider implements ISubscriptionProviderService
62 {
63
64
65
66 public static final String SUBSCRIPTION_USER = "announce_user";
67
68
69
70
71 public static final String SUBSCRIPTION_CATEGORY = "announce_category";
72
73
74
75
76 public static final String SUBSCRIPTION_FILTER = "announce_filter";
77
78
79 private static final String MARK_FILTER = "filter";
80 private static final String MARK_CATEGORY = "category";
81 private static final String MARK_USER_NAME = "user_name";
82 private static final String MARK_USER = "user";
83 private static final String PROVIDER_NAME = "announce.announceSubscriptionProvider";
84 private static final String BEAN_NAME = "announce.announceSubscriptionProvider";
85
86
87 private static final String TEMPLATE_FILTER_SUBSCRIPTION_DESCRIPTION = "skin/plugins/announce/subscription/filter_subscriction_description.html";
88 private static final String TEMPLATE_USER_SUBSCRIPTION_DESCRIPTION = "skin/plugins/announce/subscription/user_subscriction_description.html";
89 private static final String TEMPLATE_CATEGORY_SUBSCRIPTION_DESCRIPTION = "skin/plugins/announce/subscription/category_subscriction_description.html";
90 private static volatile AnnounceSubscriptionProvider _instance;
91
92
93
94
95 @Override
96 public String getProviderName( )
97 {
98 return PROVIDER_NAME;
99 }
100
101
102
103
104
105
106 public static AnnounceSubscriptionProvider getService( )
107 {
108 if ( _instance == null )
109 {
110 _instance = SpringContextService.getBean( BEAN_NAME );
111 }
112
113 return _instance;
114 }
115
116
117
118
119 @Override
120 public String getSubscriptionHtmlDescription( LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource, Locale locale )
121 {
122 if ( StringUtils.equals( SUBSCRIPTION_USER, strSubscriptionKey ) )
123 {
124 Map<String, Object> model = new HashMap<>( );
125 LuteceUser subscribedUser = LuteceUserService.getLuteceUserFromName( strIdSubscribedResource );
126
127 model.put( MARK_USER_NAME, strIdSubscribedResource );
128 model.put( MARK_USER, subscribedUser );
129
130 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_USER_SUBSCRIPTION_DESCRIPTION, locale, model );
131
132 return template.getHtml( );
133 }
134 else
135 if ( StringUtils.equals( SUBSCRIPTION_CATEGORY, strSubscriptionKey ) )
136 {
137 Map<String, Object> model = new HashMap<>( );
138
139 int nIdCategory = Integer.parseInt( strIdSubscribedResource );
140
141 model.put( MARK_CATEGORY, CategoryHome.findByPrimaryKey( nIdCategory ) );
142
143 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CATEGORY_SUBSCRIPTION_DESCRIPTION, locale, model );
144
145 return template.getHtml( );
146 }
147 else
148 if ( StringUtils.equals( SUBSCRIPTION_FILTER, strSubscriptionKey ) )
149 {
150 AnnounceSearchFilter filter = AnnounceSearchFilterHome.findByPrimaryKey( Integer.parseInt( strIdSubscribedResource ) );
151 Map<String, Object> model = new HashMap<>( );
152 model.put( MARK_FILTER, filter );
153
154 if ( filter.getIdCategory( ) > 0 )
155 {
156 model.put( MARK_CATEGORY, CategoryHome.findByPrimaryKey( filter.getIdCategory( ) ) );
157 }
158
159 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_FILTER_SUBSCRIPTION_DESCRIPTION, locale, model );
160
161 return template.getHtml( );
162 }
163
164 return StringUtils.EMPTY;
165 }
166
167
168
169
170 @Override
171 public String getSubscriptionHtmlDescriptionBis( LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource, Locale locale, String userSub )
172 {
173 if ( StringUtils.equals( SUBSCRIPTION_USER, strSubscriptionKey ) )
174 {
175 Map<String, Object> model = new HashMap<>( );
176
177 List<Announce> listAnn = AnnounceHome.findAllPublished( AnnounceSort.DEFAULT_SORT );
178 String strUserSub = "";
179 for ( Announce ann : listAnn )
180 {
181 if ( userSub.compareTo( ann.getUserName( ) ) == 0 )
182 {
183 strUserSub = ann.getUserLastName( ) + " " + ann.getUserSecondName( );
184 break;
185 }
186 }
187
188 model.put( MARK_USER_NAME, strIdSubscribedResource );
189 model.put( "strUserSub", strUserSub );
190
191 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_USER_SUBSCRIPTION_DESCRIPTION, locale, model );
192
193 return template.getHtml( );
194 }
195 else
196 if ( StringUtils.equals( SUBSCRIPTION_CATEGORY, strSubscriptionKey ) )
197 {
198 Map<String, Object> model = new HashMap<>( );
199
200 int nIdCategory = Integer.parseInt( strIdSubscribedResource );
201
202 model.put( MARK_CATEGORY, CategoryHome.findByPrimaryKey( nIdCategory ) );
203
204 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CATEGORY_SUBSCRIPTION_DESCRIPTION, locale, model );
205
206 return template.getHtml( );
207 }
208 else
209 if ( StringUtils.equals( SUBSCRIPTION_FILTER, strSubscriptionKey ) )
210 {
211 AnnounceSearchFilter filter = AnnounceSearchFilterHome.findByPrimaryKey( Integer.parseInt( strIdSubscribedResource ) );
212 Map<String, Object> model = new HashMap<>( );
213 model.put( MARK_FILTER, filter );
214
215 if ( filter.getIdCategory( ) > 0 )
216 {
217 model.put( MARK_CATEGORY, CategoryHome.findByPrimaryKey( filter.getIdCategory( ) ) );
218 }
219
220 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_FILTER_SUBSCRIPTION_DESCRIPTION, locale, model );
221
222 return template.getHtml( );
223 }
224
225 return StringUtils.EMPTY;
226 }
227
228
229
230
231 @Override
232 public boolean isSubscriptionRemovable( LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource )
233 {
234
235 return true;
236 }
237
238
239
240
241 @Override
242 public String getUrlModifySubscription( LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource )
243 {
244 if ( StringUtils.equals( SUBSCRIPTION_FILTER, strSubscriptionKey ) )
245 {
246 int nIdFilter = ( StringUtils.isNotEmpty( strIdSubscribedResource ) && StringUtils.isNumeric( strIdSubscribedResource ) )
247 ? Integer.parseInt( strIdSubscribedResource )
248 : 0;
249
250 if ( nIdFilter > 0 )
251 {
252 return AnnounceApp.getUrlSearchAnnounce( LocalVariables.getRequest( ), nIdFilter );
253 }
254 }
255 else
256 if ( StringUtils.equals( SUBSCRIPTION_USER, strSubscriptionKey ) )
257 {
258 return AnnounceApp.getUrlViewUserAnnounces( LocalVariables.getRequest( ), strIdSubscribedResource );
259 }
260 else
261 if ( StringUtils.equals( SUBSCRIPTION_CATEGORY, strSubscriptionKey ) )
262 {
263 int nIdCategory = ( StringUtils.isNotEmpty( strIdSubscribedResource ) && StringUtils.isNumeric( strIdSubscribedResource ) )
264 ? Integer.parseInt( strIdSubscribedResource )
265 : 0;
266
267 return AnnounceApp.getUrlViewCategory( LocalVariables.getRequest( ), nIdCategory );
268 }
269
270 return null;
271 }
272
273
274
275
276 @Override
277 public void notifySubscriptionRemoval( Subscription subscription )
278 {
279 if ( StringUtils.equals( subscription.getSubscriptionKey( ), SUBSCRIPTION_FILTER ) && StringUtils.isNotEmpty( subscription.getIdSubscribedResource( ) )
280 && StringUtils.isNumeric( subscription.getIdSubscribedResource( ) ) )
281 {
282 int nIdFilter = Integer.parseInt( subscription.getIdSubscribedResource( ) );
283 AnnounceSearchFilterHome.delete( nIdFilter );
284 }
285
286
287 }
288
289
290
291
292
293
294
295
296
297 public void createSubscriptionToUser( LuteceUser user, String strUserName )
298 {
299 createSubscription( user, strUserName, SUBSCRIPTION_USER );
300 }
301
302
303
304
305
306
307
308
309
310 public void createSubscriptionToFilter( LuteceUser user, int nIdFilter )
311 {
312 createSubscription( user, Integer.toString( nIdFilter ), SUBSCRIPTION_FILTER );
313 }
314
315
316
317
318
319
320
321
322
323 public void createSubscriptionToCategory( LuteceUser user, int nIdCategory )
324 {
325 createSubscription( user, Integer.toString( nIdCategory ), SUBSCRIPTION_CATEGORY );
326 }
327
328
329
330
331
332
333
334
335
336 public void removeSubscriptionToUser( LuteceUser user, String strUserName )
337 {
338 removeSubscription( user, strUserName, SUBSCRIPTION_USER );
339 }
340
341
342
343
344
345
346
347
348
349 public void removeSubscriptionToFilter( LuteceUser user, int nIdFilter )
350 {
351 removeSubscription( user, Integer.toString( nIdFilter ), SUBSCRIPTION_FILTER );
352 }
353
354
355
356
357
358
359
360
361
362 public void removeSubscriptionToCategory( LuteceUser user, int nIdCategory )
363 {
364 removeSubscription( user, Integer.toString( nIdCategory ), SUBSCRIPTION_CATEGORY );
365 }
366
367
368
369
370
371
372
373
374
375
376
377 private void createSubscription( LuteceUser user, String strIdResource, String strSubscriptionKey )
378 {
379 AnnounceSubscribtionDTO subscription = new AnnounceSubscribtionDTO( );
380 subscription.setIdSubscribedResource( strIdResource );
381 subscription.setSubscriptionKey( strSubscriptionKey );
382 subscription.setSubscriptionProvider( getProviderName( ) );
383 subscription.setUserId( user.getName( ) );
384 subscription.setEmailSubscribes( user.getUserInfo( LuteceUser.BUSINESS_INFO_ONLINE_EMAIL ) );
385 AnnounceSubscriptionService.getInstance( ).createSubscription( subscription );
386 }
387
388
389
390
391
392
393
394
395
396
397
398 private void removeSubscription( LuteceUser user, String strIdResource, String strSubscriptionKey )
399 {
400 SubscriptionFilter filter = new SubscriptionFilter( user.getName( ), getProviderName( ), strSubscriptionKey, strIdResource );
401 List<AnnounceSubscribtionDTO> listSubscriptions = AnnounceSubscriptionService.getInstance( ).findByFilter( filter );
402
403 for ( AnnounceSubscribtionDTO subscription : listSubscriptions )
404 {
405 AnnounceSubscriptionService.getInstance( ).removeSubscription( subscription, false );
406 }
407 }
408
409
410
411
412
413
414
415
416
417
418 public boolean hasSubscribedToUser( LuteceUser user, String userName )
419 {
420 return hasSubscribedtoResource( user, userName, SUBSCRIPTION_USER );
421 }
422
423
424
425
426
427
428
429
430
431
432 public boolean hasSubscribedToCategory( LuteceUser user, int nIdCategory )
433 {
434 if ( nIdCategory == 0 )
435 {
436 return false;
437 }
438
439 return hasSubscribedtoResource( user, Integer.toString( nIdCategory ), SUBSCRIPTION_CATEGORY );
440 }
441
442
443
444
445
446
447
448
449
450
451
452
453 private boolean hasSubscribedtoResource( LuteceUser user, String strIdResource, String strSubscriptionKey )
454 {
455 SubscriptionFilter filter = new SubscriptionFilter( user.getName( ), getProviderName( ), strSubscriptionKey, strIdResource );
456 List<AnnounceSubscribtionDTO> listSubscription = AnnounceSubscriptionService.getInstance( ).findByFilter( filter );
457
458 return CollectionUtils.isNotEmpty( listSubscription );
459 }
460
461
462
463
464
465
466 public List<AnnounceSubscribtionDTO> getSubscriptionsToUsers( )
467 {
468 return getSubscriptionsToResource( SUBSCRIPTION_USER );
469 }
470
471
472
473
474
475
476 public List<AnnounceSubscribtionDTO> getsubscriptionsToCategories( )
477 {
478 return getSubscriptionsToResource( SUBSCRIPTION_CATEGORY );
479 }
480
481
482
483
484
485
486 public List<AnnounceSubscribtionDTO> getSubscriptionsToFilters( )
487 {
488 return getSubscriptionsToResource( SUBSCRIPTION_FILTER );
489 }
490
491
492
493
494
495
496
497
498 public List<AnnounceSubscribtionDTO> getSubscriptionsToResource( String strSubscriptionKey )
499 {
500 SubscriptionFilter filter = new SubscriptionFilter( );
501 filter.setSubscriptionKey( strSubscriptionKey );
502 filter.setSubscriptionProvider( getProviderName( ) );
503
504 return AnnounceSubscriptionService.getInstance( ).findByFilter( filter );
505 }
506
507 public List<AnnounceSubscribtionDTO> getSubscriptionsByAnnounce( String userId, String categoryId, String numberOfAnnounceToNotify )
508 {
509 return AnnounceSubscriptionService.getInstance( ).findByFilterOr( userId, categoryId, numberOfAnnounceToNotify );
510 }
511 }