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.portal.web.mailinglist;
35
36 import fr.paris.lutece.portal.business.mailinglist.MailingList;
37 import fr.paris.lutece.portal.business.mailinglist.MailingListFilter;
38 import fr.paris.lutece.portal.business.mailinglist.MailingListHome;
39 import fr.paris.lutece.portal.business.mailinglist.MailingListUsersFilter;
40 import fr.paris.lutece.portal.business.mailinglist.Recipient;
41 import fr.paris.lutece.portal.business.rbac.AdminRoleHome;
42 import fr.paris.lutece.portal.service.mailinglist.AdminMailingListService;
43 import fr.paris.lutece.portal.service.mailinglist.MailingListRemovalListenerService;
44 import fr.paris.lutece.portal.service.message.AdminMessage;
45 import fr.paris.lutece.portal.service.message.AdminMessageService;
46 import fr.paris.lutece.portal.service.template.AppTemplateService;
47 import fr.paris.lutece.portal.service.util.AppLogService;
48 import fr.paris.lutece.portal.service.util.AppPathService;
49 import fr.paris.lutece.portal.service.util.AppPropertiesService;
50 import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
51 import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
52 import fr.paris.lutece.portal.web.constants.Messages;
53 import fr.paris.lutece.portal.web.constants.Parameters;
54 import fr.paris.lutece.portal.web.util.LocalizedPaginator;
55 import fr.paris.lutece.util.ReferenceList;
56 import fr.paris.lutece.util.html.HtmlTemplate;
57 import fr.paris.lutece.util.html.Paginator;
58 import fr.paris.lutece.util.sort.AttributeComparator;
59 import fr.paris.lutece.util.url.UrlItem;
60
61 import org.apache.commons.lang.StringUtils;
62
63 import java.util.ArrayList;
64 import java.util.Collection;
65 import java.util.Collections;
66 import java.util.HashMap;
67 import java.util.List;
68 import java.util.Map;
69
70 import javax.servlet.http.HttpServletRequest;
71
72
73
74
75
76 public class MailingListJspBean extends AdminFeaturesPageJspBean
77 {
78
79 public static final String RIGHT_MANAGE_MAILINGLISTS = "CORE_MAILINGLISTS_MANAGEMENT";
80
81
82 private static final String TEMPLATE_MANAGE_MAILINGLISTS = "admin/mailinglist/manage_mailinglists.html";
83 private static final String TEMPLATE_CREATE_MAILINGLIST = "admin/mailinglist/create_mailinglist.html";
84 private static final String TEMPLATE_MODIFY_MAILINGLIST = "admin/mailinglist/modify_mailinglist.html";
85 private static final String TEMPLATE_ADD_USERS = "admin/mailinglist/add_users.html";
86 private static final String TEMPLATE_VIEW_USERS = "admin/mailinglist/view_users.html";
87
88
89 private static final String MARK_MAILINGLISTS_LIST = "mailinglists_list";
90 private static final String MARK_WORKGROUPS_LIST = "workgroups_list";
91 private static final String MARK_WORKGROUP_SELECTED = "selected_workgroup";
92 private static final String MARK_ROLES_LIST = "roles_list";
93 private static final String MARK_RECIPIENTS_LIST = "recipients_list";
94 private static final String MARK_MAILINGLIST = "mailinglist";
95 private static final String MARK_MAILINGLIST_FILTER = "mailinglistFilter";
96 private static final String MARK_PAGINATOR = "paginator";
97 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
98
99
100 private static final String PROPERTY_CREATE_MAILINGLIST_PAGETITLE = "portal.mailinglist.create_mailinglist.pageTitle";
101 private static final String PROPERTY_MODIFY_MAILINGLIST_PAGETITLE = "portal.mailinglist.modify_mailinglist.pageTitle";
102 private static final String PROPERTY_VIEW_USERS_PAGETITLE = "portal.mailinglist.view_users.pageTitle";
103 private static final String PROPERTY_ADD_USERS_PAGETITLE = "portal.mailinglist.add_users.pageTitle";
104 private static final String PROPERTY_MAILINGLIST_PER_PAGE = "paginator.mailinglist.itemsPerPage";
105 private static final String MESSAGE_CONFIRM_REMOVE = "portal.mailinglist.message.confirmRemoveMailingList";
106 private static final String MESSAGE_CANNOT_REMOVE = "portal.mailinglist.message.cannotRemoveMailingList";
107 private static final String MESSAGE_FILTER_ALREADY_EXISTS = "portal.mailinglist.message.filterAlreadyExists";
108
109
110 private static final String PARAMETER_WORKGROUP = "workgroup";
111 private static final String PARAMETER_ROLE = "role";
112 private static final String PARAMETER_MAILINGLIST_ID = "id_mailinglist";
113 private static final String PARAMETER_NAME = "name";
114 private static final String PARAMETER_DESCRIPTION = "description";
115 private static final String PARAMETER_SESSION = "session";
116
117
118 private static final String JSP_MODIFY_MAILINGLIST = "ModifyMailingList.jsp";
119 private static final String JSP_URL_REMOVE_MAILINGLIST = "jsp/admin/mailinglist/DoRemoveMailingList.jsp";
120 private static final String JSP_URL_MANAGE_MAILINGLISTS = "jsp/admin/mailinglist/ManageMailingLists.jsp";
121 private MailingListFilter _mailingListFilter;
122 private int _nItemsPerPage;
123 private int _nDefaultItemsPerPage;
124 private String _strCurrentPageIndex;
125
126
127
128
129
130
131
132 public String getManageMailinglists( HttpServletRequest request )
133 {
134 Map<String, Object> model = new HashMap<String, Object>( );
135
136
137 if ( StringUtils.isBlank( request.getParameter( PARAMETER_SESSION ) ) )
138 {
139 _mailingListFilter = new MailingListFilter( );
140 populate( _mailingListFilter, request );
141 }
142
143 List<MailingList> listMailinglists = AdminMailingListService.getUserMailingListsByFilter( getUser( ),
144 _mailingListFilter );
145
146
147 String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
148 String strAscSort = request.getParameter( Parameters.SORTED_ASC );
149 boolean bIsAscSort = true;
150
151 if ( StringUtils.isBlank( strSortedAttributeName ) )
152 {
153 strSortedAttributeName = PARAMETER_NAME;
154 }
155
156 if ( StringUtils.isNotBlank( strAscSort ) )
157 {
158 bIsAscSort = Boolean.parseBoolean( strAscSort );
159 }
160
161 Collections.sort( listMailinglists, new AttributeComparator( strSortedAttributeName, bIsAscSort ) );
162
163
164 _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
165 _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_MAILINGLIST_PER_PAGE, 50 );
166 _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
167 _nDefaultItemsPerPage );
168
169 UrlItem url = new UrlItem( AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_MAILINGLISTS );
170 url.addParameter( Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName );
171 url.addParameter( Parameters.SORTED_ASC, Boolean.toString( bIsAscSort ) );
172 url.addParameter( PARAMETER_SESSION, PARAMETER_SESSION );
173
174 LocalizedPaginator<MailingList> paginator = new LocalizedPaginator<MailingList>( listMailinglists,
175 _nItemsPerPage, url.getUrl( ), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex,
176 request.getLocale( ) );
177
178 model.put( MARK_MAILINGLISTS_LIST, paginator.getPageItems( ) );
179 model.put( MARK_PAGINATOR, paginator );
180 model.put( MARK_NB_ITEMS_PER_PAGE, Integer.toString( paginator.getItemsPerPage( ) ) );
181 model.put( MARK_MAILINGLIST_FILTER, _mailingListFilter );
182
183 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_MAILINGLISTS, getLocale( ), model );
184
185 return getAdminPage( template.getHtml( ) );
186 }
187
188
189
190
191
192
193 public String getCreateMailinglist( HttpServletRequest request )
194 {
195 setPageTitleProperty( PROPERTY_CREATE_MAILINGLIST_PAGETITLE );
196
197 ReferenceList listWorkgroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );
198
199 HashMap<String, Object> model = new HashMap<String, Object>( );
200 model.put( MARK_WORKGROUPS_LIST, listWorkgroups );
201
202
203 if ( !listWorkgroups.isEmpty( ) )
204 {
205 model.put( MARK_WORKGROUP_SELECTED, listWorkgroups.get( 0 ).getCode( ) );
206 }
207
208 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_MAILINGLIST, getLocale( ), model );
209
210 return getAdminPage( template.getHtml( ) );
211 }
212
213
214
215
216
217
218
219 public String doCreateMailingList( HttpServletRequest request )
220 {
221 MailingList mailinglist = new MailingList( );
222 String strErrors = processFormData( request, mailinglist );
223
224 if ( strErrors != null )
225 {
226 return AdminMessageService.getMessageUrl( request, strErrors, AdminMessage.TYPE_STOP );
227 }
228
229 MailingListHome.create( mailinglist );
230
231
232 UrlItem urlModify = new UrlItem( JSP_MODIFY_MAILINGLIST );
233 urlModify.addParameter( PARAMETER_MAILINGLIST_ID, mailinglist.getId( ) );
234
235 return urlModify.getUrl( );
236 }
237
238
239
240
241
242
243 public String getModifyMailinglist( HttpServletRequest request )
244 {
245 setPageTitleProperty( PROPERTY_MODIFY_MAILINGLIST_PAGETITLE );
246
247 ReferenceList listWorkgroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );
248
249 String strMailingListId = request.getParameter( PARAMETER_MAILINGLIST_ID );
250
251 if ( !StringUtils.isNumeric( strMailingListId ) )
252 {
253 AppLogService.error( strMailingListId + " is not a valid mailing list id." );
254
255 return getManageMailinglists( request );
256 }
257
258 int nMailingListId = Integer.parseInt( strMailingListId );
259 MailingList mailinglist = MailingListHome.findByPrimaryKey( nMailingListId );
260
261 if ( mailinglist == null )
262 {
263 AppLogService.error( strMailingListId + " is not a valid mailing list id." );
264
265 return getManageMailinglists( request );
266 }
267
268 Map<String, Object> model = new HashMap<String, Object>( );
269 model.put( MARK_WORKGROUPS_LIST, listWorkgroups );
270 model.put( MARK_MAILINGLIST, mailinglist );
271
272 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_MAILINGLIST, getLocale( ), model );
273
274 return getAdminPage( template.getHtml( ) );
275 }
276
277
278
279
280
281
282
283 public String doModifyMailingList( HttpServletRequest request )
284 {
285 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
286 int nId = Integer.parseInt( strId );
287 MailingList mailinglist = MailingListHome.findByPrimaryKey( nId );
288
289 String strErrors = processFormData( request, mailinglist );
290
291 if ( strErrors != null )
292 {
293 return AdminMessageService.getMessageUrl( request, strErrors, AdminMessage.TYPE_STOP );
294 }
295
296 MailingListHome.update( mailinglist );
297
298 return getHomeUrl( request );
299 }
300
301
302
303
304
305
306
307 public String getConfirmRemoveMailingList( HttpServletRequest request )
308 {
309 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
310 String strUrlRemove = JSP_URL_REMOVE_MAILINGLIST + "?" + PARAMETER_MAILINGLIST_ID + "=" + strId;
311
312 ArrayList<String> listErrors = new ArrayList<String>( );
313 String strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE, strUrlRemove,
314 AdminMessage.TYPE_CONFIRMATION );
315
316 if ( !MailingListRemovalListenerService.getService( ).checkForRemoval( strId, listErrors, getLocale( ) ) )
317 {
318 String strCause = AdminMessageService.getFormattedList( listErrors, getLocale( ) );
319 Object[] args = { strCause };
320 strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CANNOT_REMOVE, args, AdminMessage.TYPE_STOP );
321 }
322
323 return strUrl;
324 }
325
326
327
328
329
330
331
332 public String doRemoveMailingList( HttpServletRequest request )
333 {
334 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
335 int nId = Integer.parseInt( strId );
336
337 MailingListHome.remove( nId );
338
339 return getHomeUrl( request );
340 }
341
342
343
344
345
346
347 public String getViewUsers( HttpServletRequest request )
348 {
349 setPageTitleProperty( PROPERTY_VIEW_USERS_PAGETITLE );
350
351 HashMap<String, Object> model = new HashMap<String, Object>( );
352 Collection<Recipient> listRecipients;
353 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
354
355 if ( strId != null )
356 {
357 int nIdMailingList = Integer.parseInt( strId );
358 listRecipients = AdminMailingListService.getRecipients( nIdMailingList );
359 }
360 else
361 {
362 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
363 String strRole = request.getParameter( PARAMETER_ROLE );
364 listRecipients = AdminMailingListService.getRecipients( strWorkgroup, strRole );
365 }
366
367 model.put( MARK_RECIPIENTS_LIST, listRecipients );
368
369 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_VIEW_USERS, getLocale( ), model );
370
371 return getAdminPage( template.getHtml( ) );
372 }
373
374
375
376
377
378
379 public String getAddUsers( HttpServletRequest request )
380 {
381 setPageTitleProperty( PROPERTY_ADD_USERS_PAGETITLE );
382
383 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
384 int nId = Integer.parseInt( strId );
385 MailingList mailinglist = MailingListHome.findByPrimaryKey( nId );
386
387 if ( mailinglist == null )
388 {
389 return getManageMailinglists( request );
390 }
391
392 ReferenceList listWorkgroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );
393 ReferenceList listRoles = AdminRoleHome.getRolesList( );
394 listRoles.addItem( AdminMailingListService.ALL_ROLES, AdminMailingListService.ALL_ROLES );
395
396 Map<String, Object> model = new HashMap<String, Object>( );
397 model.put( MARK_WORKGROUPS_LIST, listWorkgroups );
398 model.put( MARK_ROLES_LIST, listRoles );
399 model.put( MARK_MAILINGLIST, mailinglist );
400
401 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_ADD_USERS, getLocale( ), model );
402
403 return getAdminPage( template.getHtml( ) );
404 }
405
406
407
408
409
410
411
412 public String doAddUsers( HttpServletRequest request )
413 {
414 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
415 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
416 String strRole = request.getParameter( PARAMETER_ROLE );
417
418 int nId = Integer.parseInt( strId );
419 MailingListUsersFilter filter = new MailingListUsersFilter( );
420 filter.setWorkgroup( strWorkgroup );
421 filter.setRole( strRole );
422
423 if ( !AdminMailingListService.checkFilter( filter, nId ) )
424 {
425 MailingListHome.addFilterToMailingList( filter, nId );
426
427
428 UrlItem urlModify = new UrlItem( JSP_MODIFY_MAILINGLIST );
429 urlModify.addParameter( PARAMETER_MAILINGLIST_ID, nId );
430
431 return urlModify.getUrl( );
432 }
433
434 return AdminMessageService.getMessageUrl( request, MESSAGE_FILTER_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
435 }
436
437
438
439
440
441
442
443 public String doDeleteFilter( HttpServletRequest request )
444 {
445 String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
446 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
447 String strRole = request.getParameter( PARAMETER_ROLE );
448
449 int nId = Integer.parseInt( strId );
450 MailingListUsersFilter filter = new MailingListUsersFilter( );
451 filter.setWorkgroup( strWorkgroup );
452 filter.setRole( strRole );
453 MailingListHome.deleteFilterToMailingList( filter, nId );
454
455
456 UrlItem urlModify = new UrlItem( JSP_MODIFY_MAILINGLIST );
457 urlModify.addParameter( PARAMETER_MAILINGLIST_ID, nId );
458
459 return urlModify.getUrl( );
460 }
461
462
463
464
465
466
467
468 private String processFormData( HttpServletRequest request, MailingList mailinglist )
469 {
470 String strErrors = null;
471 String strName = request.getParameter( PARAMETER_NAME );
472 String strDescription = request.getParameter( PARAMETER_DESCRIPTION );
473 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
474
475 if ( ( strName == null ) || ( strName.equals( "" ) ) || ( strDescription == null ) ||
476 ( strDescription.equals( "" ) ) )
477 {
478 return Messages.MANDATORY_FIELDS;
479 }
480
481 mailinglist.setName( strName );
482 mailinglist.setDescription( strDescription );
483 mailinglist.setWorkgroup( strWorkgroup );
484
485 return strErrors;
486 }
487 }