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.mylutece.modules.database.authentication.web;
35
36 import fr.paris.lutece.api.user.User;
37 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseHome;
38 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseUser;
39 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseUserFilter;
40 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseUserHome;
41 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.Group;
42 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.GroupFilter;
43 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.GroupHome;
44 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.GroupRoleHome;
45 import fr.paris.lutece.plugins.mylutece.modules.database.authentication.service.DatabaseService;
46 import fr.paris.lutece.portal.business.role.Role;
47 import fr.paris.lutece.portal.business.role.RoleHome;
48 import fr.paris.lutece.portal.service.message.AdminMessage;
49 import fr.paris.lutece.portal.service.message.AdminMessageService;
50 import fr.paris.lutece.portal.service.template.AppTemplateService;
51 import fr.paris.lutece.portal.service.util.AppPathService;
52 import fr.paris.lutece.portal.service.util.AppPropertiesService;
53 import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
54 import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
55 import fr.paris.lutece.portal.web.constants.Messages;
56 import fr.paris.lutece.portal.web.constants.Parameters;
57 import fr.paris.lutece.portal.web.util.LocalizedPaginator;
58 import fr.paris.lutece.util.ReferenceItem;
59 import fr.paris.lutece.util.ReferenceList;
60 import fr.paris.lutece.util.html.AbstractPaginator;
61 import fr.paris.lutece.util.html.HtmlTemplate;
62 import fr.paris.lutece.util.html.ItemNavigator;
63 import fr.paris.lutece.util.sort.AttributeComparator;
64 import fr.paris.lutece.util.url.UrlItem;
65
66 import org.apache.commons.collections.CollectionUtils;
67 import org.apache.commons.lang3.StringUtils;
68
69 import java.util.ArrayList;
70 import java.util.Collection;
71 import java.util.Collections;
72 import java.util.HashMap;
73 import java.util.List;
74 import java.util.Map;
75
76 import javax.servlet.http.HttpServletRequest;
77
78
79
80
81 public class GroupJspBean extends PluginAdminPageJspBean
82 {
83 private static final long serialVersionUID = -3940937010700725590L;
84
85
86 public static final String RIGHT_GROUPS_MANAGEMENT = "DATABASE_GROUPS_MANAGEMENT";
87
88
89 private static final String QUESTION_MARK = "?";
90 private static final String EQUAL = "=";
91 private static final String AMPERSAND = "&";
92 private static final String SPACE = " ";
93 private static final String OPEN_BRACKET = "(";
94 private static final String CLOSED_BRACKET = ")";
95 private static final String SHARP = "#";
96
97
98 private static final String JSP_URL_DO_REMOVE_GROUP = "jsp/admin/plugins/mylutece/modules/database/DoRemoveGroup.jsp";
99 private static final String JSP_URL_MODIFY_GROUP = "jsp/admin/plugins/mylutece/modules/database/ModifyGroup.jsp";
100 private static final String JSP_URL_MANAGE_ROLES_GROUP = "jsp/admin/plugins/mylutece/modules/database/ManageRolesGroup.jsp";
101 private static final String JSP_URL_MANAGE_USERS_GROUP = "jsp/admin/plugins/mylutece/modules/database/ManageUsersGroup.jsp";
102 private static final String JSP_MODIFY_GROUP = "ModifyGroup.jsp";
103 private static final String JSP_MANAGE_ROLES_GROUP = "ManageRolesGroup.jsp";
104 private static final String JSP_MANAGE_GROUPS = "ManageGroups.jsp";
105 private static final String JSP_MANAGE_USERS_GROUP = "ManageUsersGroup.jsp";
106
107
108 private static final String MARK_GROUPS_LIST = "groups_list";
109 private static final String MARK_GROUP = "group";
110 private static final String MARK_ROLES_LIST = "role_list";
111 private static final String MARK_ROLES_LIST_FOR_GROUP = "group_role_list";
112 private static final String MARK_PAGINATOR = "paginator";
113 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
114 private static final String MARK_ITEM_NAVIGATOR = "item_navigator";
115 private static final String MARK_SEARCH_IS_SEARCH = "search_is_search";
116 private static final String MARK_SORT_SEARCH_ATTRIBUTE = "sort_search_attribute";
117 private static final String MARK_SEARCH_GROUP_FILTER = "search_group_filter";
118 private static final String MARK_AVAILABLE_USERS = "available_users";
119 private static final String MARK_ASSIGNED_USERS = "assigned_users";
120 private static final String MARK_ASSIGNED_USERS_NUMBER = "assigned_users_number";
121
122
123 private static final String PARAMETER_GROUP_KEY = "group_key";
124 private static final String PARAMETER_GROUP_DESCRIPTION = "group_description";
125 private static final String PARAMETER_ROLE_KEY = "role_key";
126 private static final String PARAMETER_CANCEL = "cancel";
127 private static final String PARAMETER_MYLUTECE_DATABASE_USER_ID = "mylutece_database_user_id";
128 private static final String PARAMETER_ANCHOR = "anchor";
129 private static final String PARAMETER_AVAILABLE_USERS = "available_users";
130 private static final String PARAMETER_MODIFY_GROUP = "modify_group";
131 private static final String PARAMETER_ASSIGN_USER = "assign_user";
132 private static final String PARAMETER_ASSIGN_ROLE = "assign_role";
133
134
135 private static final String TEMPLATE_MANAGE_GROUPS = "admin/plugins/mylutece/modules/database/manage_groups.html";
136 private static final String TEMPLATE_CREATE_GROUP = "admin/plugins/mylutece/modules/database/create_group.html";
137 private static final String TEMPLATE_GROUP_MODIFY = "admin/plugins/mylutece/modules/database/modify_group.html";
138 private static final String TEMPLATE_MANAGE_ROLES_GROUP = "admin/plugins/mylutece/modules/database/manage_roles_group.html";
139 private static final String TEMPLATE_MANAGE_USERS_GROUP = "admin/plugins/mylutece/modules/database/manage_users_group.html";
140
141
142 private static final String PROPERTY_PAGE_TITLE_CREATE_GROUP = "module.mylutece.database.create_group.pageTitle";
143 private static final String PROPERTY_PAGE_TITLE_MODIFY_GROUP = "module.mylutece.database.modify_group.pageTitle";
144 private static final String PROPERTY_PAGE_TITLE_MANAGE_ROLES_GROUP = "module.mylutece.database.manage_roles_group.pageTitle";
145 private static final String PROPERTY_GROUPS_PER_PAGE = "paginator.groups.itemsPerPage";
146 private static final String PROPERTY_PAGE_TITLE_MANAGE_USERS_GROUP = "module.mylutece.database.manage_users_group.pageTitle";
147 private static final String PROPERTY_USERS_PER_PAGE = "paginator.users.itemsPerPage";
148
149
150 private static final String MESSAGE_GROUP_EXIST = "module.mylutece.database.message.groupExist";
151 private static final String MESSAGE_CONFIRM_REMOVE = "module.mylutece.database.message.confirmRemoveGroup";
152 private static final String MESSAGE_ERROR_MODIFY = "module.mylutece.database.message.errorModifyGroup";
153 private static final String MESSAGE_ERROR_REMOVE = "module.mylutece.database.message.errorRemoveGroup";
154 private static final String MESSAGE_ERROR_MANAGE_GROUPS = "module.mylutece.database.message.errorManageGroups";
155 private int _nItemsPerPage;
156 private int _nDefaultItemsPerPage;
157 private String _strCurrentPageIndex;
158 private Map<String, ItemNavigator> _itemNavigators = new HashMap<>( );
159 private GroupFilter _gFilter;
160 private String _strSortedAttributeName;
161 private boolean _bIsAscSort;
162 private DatabaseService _databaseService = DatabaseService.getService( );
163
164
165
166
167
168
169
170
171 public String getManageGroups( HttpServletRequest request )
172 {
173 setPageTitleProperty( null );
174
175
176 reinitItemNavigators( );
177
178 List<Group> listGroups = getAuthorizedGroups( );
179
180
181 _gFilter = new GroupFilter( );
182
183 boolean bIsSearch = _gFilter.setGroupFilter( request );
184 List<Group> listFilteredGroups = GroupHome.findByFilter( _gFilter, getPlugin( ) );
185 List<Group> listAvailableGroups = new ArrayList<>( );
186
187 for ( Group filteredGroup : listFilteredGroups )
188 {
189 for ( Group group : listGroups )
190 {
191 if ( filteredGroup.getGroupKey( ).equals( group.getGroupKey( ) ) )
192 {
193 listAvailableGroups.add( group );
194 }
195 }
196 }
197
198
199 _strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
200
201 String strAscSort = null;
202
203 if ( _strSortedAttributeName != null )
204 {
205 strAscSort = request.getParameter( Parameters.SORTED_ASC );
206
207 _bIsAscSort = Boolean.parseBoolean( strAscSort );
208
209 Collections.sort( listAvailableGroups, new AttributeComparator( _strSortedAttributeName, _bIsAscSort ) );
210 }
211
212 String strURL = getHomeUrl( request );
213 UrlItem url = new UrlItem( strURL );
214
215 if ( _strSortedAttributeName != null )
216 {
217 url.addParameter( Parameters.SORTED_ATTRIBUTE_NAME, _strSortedAttributeName );
218 }
219
220 if ( strAscSort != null )
221 {
222 url.addParameter( Parameters.SORTED_ASC, strAscSort );
223 }
224
225 String strSortSearchAttribute = StringUtils.EMPTY;
226
227 if ( bIsSearch )
228 {
229 _gFilter.setUrlAttributes( url );
230
231 if ( StringUtils.isNotBlank( _gFilter.getUrlAttributes( ) ) )
232 {
233 strSortSearchAttribute = AMPERSAND + _gFilter.getUrlAttributes( );
234 }
235 }
236
237 _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_GROUPS_PER_PAGE, 50 );
238 _strCurrentPageIndex = AbstractPaginator.getPageIndex( request, AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
239 _nItemsPerPage = AbstractPaginator.getItemsPerPage( request, AbstractPaginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage );
240
241 LocalizedPaginator<Group> paginator = new LocalizedPaginator<>( listAvailableGroups, _nItemsPerPage, url.getUrl( ),
242 AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale( ) );
243
244 Map<String, Object> model = new HashMap<>( );
245 model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
246 model.put( MARK_PAGINATOR, paginator );
247 model.put( MARK_GROUPS_LIST, paginator.getPageItems( ) );
248 model.put( MARK_SEARCH_IS_SEARCH, bIsSearch );
249 model.put( MARK_SEARCH_GROUP_FILTER, _gFilter );
250 model.put( MARK_SORT_SEARCH_ATTRIBUTE, strSortSearchAttribute );
251
252 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_GROUPS, getLocale( ), model );
253
254 return getAdminPage( template.getHtml( ) );
255 }
256
257
258
259
260
261
262
263
264 public String getCreateGroup( HttpServletRequest request )
265 {
266 setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE_GROUP );
267
268 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_GROUP, getLocale( ) );
269
270 return getAdminPage( template.getHtml( ) );
271 }
272
273
274
275
276
277
278
279
280 public String doCreateGroup( HttpServletRequest request )
281 {
282 String strGroupKey = request.getParameter( PARAMETER_GROUP_KEY );
283 String strGroupDescription = request.getParameter( PARAMETER_GROUP_DESCRIPTION );
284
285
286 if ( strGroupKey.length( ) == 0 )
287 {
288 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
289 }
290
291
292 if ( GroupHome.findByPrimaryKey( strGroupKey, getPlugin( ) ) != null )
293 {
294 return AdminMessageService.getMessageUrl( request, MESSAGE_GROUP_EXIST, AdminMessage.TYPE_STOP );
295 }
296
297 Grouptece/plugins/mylutece/modules/database/authentication/business/Group.html#Group">Group group = new Group( );
298 group.setGroupKey( strGroupKey );
299 group.setGroupDescription( strGroupDescription );
300 GroupHome.create( group, getPlugin( ) );
301
302 return getHomeUrl( request );
303 }
304
305
306
307
308
309
310
311 public String getModifyGroup( HttpServletRequest request )
312 {
313 setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY_GROUP );
314
315 Group selectedGroup = getGroupFromRequest( request );
316
317 if ( selectedGroup == null )
318 {
319 return getCreateGroup( request );
320 }
321
322
323 List<DatabaseUser> listAllAssignedUsers = DatabaseHome.findGroupUsersFromGroupKey( selectedGroup.getGroupKey( ), getPlugin( ) );
324 int nAssignedUsersNumber = listAllAssignedUsers.size( );
325
326
327 setItemNavigator( PARAMETER_MODIFY_GROUP, selectedGroup.getGroupKey( ), AppPathService.getBaseUrl( request ) + JSP_URL_MODIFY_GROUP );
328
329 Map<String, Object> model = new HashMap<>( );
330 model.put( MARK_GROUP, selectedGroup );
331 model.put( MARK_ITEM_NAVIGATOR, _itemNavigators.get( PARAMETER_MODIFY_GROUP ) );
332 model.put( MARK_ASSIGNED_USERS_NUMBER, nAssignedUsersNumber );
333
334 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_GROUP_MODIFY, getLocale( ), model );
335
336 return getAdminPage( template.getHtml( ) );
337 }
338
339
340
341
342
343
344
345
346 public String doModifyGroup( HttpServletRequest request )
347 {
348 String strReturn;
349
350 String strActionCancel = request.getParameter( PARAMETER_CANCEL );
351
352 if ( strActionCancel != null )
353 {
354 strReturn = JSP_MANAGE_GROUPS;
355 }
356 else
357 {
358 String strGroupKey = request.getParameter( PARAMETER_GROUP_KEY );
359 String strGroupDescription = request.getParameter( PARAMETER_GROUP_DESCRIPTION );
360
361 Group group = getGroupFromRequest( request );
362
363 if ( group == null )
364 {
365 return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_MODIFY, AdminMessage.TYPE_ERROR );
366 }
367
368
369 if ( strGroupKey.length( ) == 0 )
370 {
371 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
372 }
373
374 group.setGroupKey( strGroupKey );
375 group.setGroupDescription( strGroupDescription );
376 GroupHome.update( group, getPlugin( ) );
377 strReturn = JSP_MODIFY_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + group.getGroupKey( );
378 }
379
380 return strReturn;
381 }
382
383
384
385
386
387
388
389
390 public String getRemoveGroup( HttpServletRequest request )
391 {
392 UrlItem url = new UrlItem( JSP_URL_DO_REMOVE_GROUP );
393 url.addParameter( PARAMETER_GROUP_KEY, request.getParameter( PARAMETER_GROUP_KEY ) );
394
395 return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
396 }
397
398
399
400
401
402
403
404
405 public String doRemoveGroup( HttpServletRequest request )
406 {
407 Group group = getGroupFromRequest( request );
408
409 if ( group == null )
410 {
411 return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_REMOVE, AdminMessage.TYPE_ERROR );
412 }
413
414 GroupHome.remove( group.getGroupKey( ), getPlugin( ) );
415
416 return getHomeUrl( request );
417 }
418
419
420
421
422
423
424
425
426 public String getManageRolesGroup( HttpServletRequest request )
427 {
428 setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_ROLES_GROUP );
429
430 Group selectedGroup = getGroupFromRequest( request );
431
432 if ( selectedGroup == null )
433 {
434 return getManageGroups( request );
435 }
436
437
438 List<DatabaseUser> listAllAssignedUsers = DatabaseHome.findGroupUsersFromGroupKey( selectedGroup.getGroupKey( ), getPlugin( ) );
439 int nAssignedUsersNumber = listAllAssignedUsers.size( );
440
441 Collection<Role> allRoleList = RoleHome.findAll( );
442 allRoleList = AdminWorkgroupService.getAuthorizedCollection( allRoleList, (User) getUser( ) );
443
444 List<String> groupRoleKeyList = GroupRoleHome.findGroupRoles( selectedGroup.getGroupKey( ), getPlugin( ) );
445 Collection<Role> groupRoleList = new ArrayList<>( );
446
447 for ( String strRoleKey : groupRoleKeyList )
448 {
449 for ( Role role : allRoleList )
450 {
451 if ( role.getRole( ).equals( strRoleKey ) )
452 {
453 groupRoleList.add( RoleHome.findByPrimaryKey( strRoleKey ) );
454 }
455 }
456 }
457
458
459 setItemNavigator( PARAMETER_ASSIGN_ROLE, selectedGroup.getGroupKey( ), AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_ROLES_GROUP );
460
461 Map<String, Object> model = new HashMap<>( );
462 model.put( MARK_ROLES_LIST, allRoleList );
463 model.put( MARK_ROLES_LIST_FOR_GROUP, groupRoleList );
464 model.put( MARK_GROUP, selectedGroup );
465 model.put( MARK_ITEM_NAVIGATOR, _itemNavigators.get( PARAMETER_ASSIGN_ROLE ) );
466 model.put( MARK_ASSIGNED_USERS_NUMBER, nAssignedUsersNumber );
467
468 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ROLES_GROUP, getLocale( ), model );
469
470 return getAdminPage( template.getHtml( ) );
471 }
472
473
474
475
476
477
478
479
480 public String doAssignRoleGroup( HttpServletRequest request )
481 {
482 String strReturn;
483
484 String strActionCancel = request.getParameter( PARAMETER_CANCEL );
485
486 if ( strActionCancel != null )
487 {
488 strReturn = JSP_MANAGE_GROUPS;
489 }
490 else
491 {
492
493 Group group = getGroupFromRequest( request );
494
495 if ( group == null )
496 {
497 return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_MANAGE_GROUPS, AdminMessage.TYPE_ERROR );
498 }
499
500 String [ ] roleArray = request.getParameterValues( PARAMETER_ROLE_KEY );
501
502 GroupRoleHome.removeRoles( group.getGroupKey( ), getPlugin( ) );
503
504 if ( roleArray != null )
505 {
506 for ( int i = 0; i < roleArray.length; i++ )
507 {
508 GroupRoleHome.addRole( group.getGroupKey( ), roleArray [i], getPlugin( ) );
509 }
510 }
511
512 strReturn = JSP_MANAGE_ROLES_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + group.getGroupKey( );
513 }
514
515 return strReturn;
516 }
517
518
519
520
521
522
523
524 private Group getGroupFromRequest( HttpServletRequest request )
525 {
526 String strGroupKey = request.getParameter( PARAMETER_GROUP_KEY );
527
528 if ( ( strGroupKey == null ) || ( strGroupKey.length( ) == 0 ) )
529 {
530 return null;
531 }
532
533 return GroupHome.findByPrimaryKey( strGroupKey, getPlugin( ) );
534 }
535
536
537
538
539
540
541 private List<Group> getAuthorizedGroups( )
542 {
543 Collection<Group> allGroupList = GroupHome.findAll( getPlugin( ) );
544 List<Group> groupList = new ArrayList<>( );
545
546 for ( Group group : allGroupList )
547 {
548 List<String> groupRoleKeyList = GroupRoleHome.findGroupRoles( group.getGroupKey( ), getPlugin( ) );
549
550 if ( CollectionUtils.isEmpty( groupRoleKeyList ) )
551 {
552 groupList.add( group );
553
554 continue;
555 }
556
557 for ( String groupRoleKey : groupRoleKeyList )
558 {
559 Role role = RoleHome.findByPrimaryKey( groupRoleKey );
560
561 if ( AdminWorkgroupService.isAuthorized( role, (User) getUser( ) ) )
562 {
563 groupList.add( group );
564
565 break;
566 }
567 }
568 }
569
570 return groupList;
571 }
572
573
574
575
576
577
578
579
580 public String getManageUsersGroup( HttpServletRequest request )
581 {
582 setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_USERS_GROUP );
583
584 Map<String, Object> model = new HashMap<>( );
585 String strURL = AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_USERS_GROUP;
586 UrlItem url = new UrlItem( strURL );
587
588
589 Group selectedGroup = getGroupFromRequest( request );
590
591 if ( selectedGroup == null )
592 {
593 return getManageGroups( request );
594 }
595
596
597 List<DatabaseUser> listAllAssignedUsers = DatabaseHome.findGroupUsersFromGroupKey( selectedGroup.getGroupKey( ), getPlugin( ) );
598 List<DatabaseUser> listAssignedUsers = getListAssignedUsers( listAllAssignedUsers );
599
600 DatabaseUserFilterutece/modules/database/authentication/business/DatabaseUserFilter.html#DatabaseUserFilter">DatabaseUserFilter duFilter = new DatabaseUserFilter( );
601 boolean bIsSearch = duFilter.setDatabaseUserFilter( request );
602 List<DatabaseUser> listFilteredUsers = _databaseService.getFilteredUsersInterface( duFilter, bIsSearch, listAssignedUsers, request, model, url );
603
604
605 ReferenceList listAvailableUsers = getAvailableUsers( listAssignedUsers );
606
607
608 String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
609 String strAscSort = null;
610
611 if ( strSortedAttributeName != null )
612 {
613 strAscSort = request.getParameter( Parameters.SORTED_ASC );
614
615 boolean bIsAscSort = Boolean.parseBoolean( strAscSort );
616
617 Collections.sort( listFilteredUsers, new AttributeComparator( strSortedAttributeName, bIsAscSort ) );
618 }
619
620 _strCurrentPageIndex = AbstractPaginator.getPageIndex( request, AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
621 _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_USERS_PER_PAGE, 50 );
622 _nItemsPerPage = AbstractPaginator.getItemsPerPage( request, AbstractPaginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage );
623
624 if ( strSortedAttributeName != null )
625 {
626 url.addParameter( Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName );
627 }
628
629 if ( strAscSort != null )
630 {
631 url.addParameter( Parameters.SORTED_ASC, strAscSort );
632 }
633
634
635 setItemNavigator( PARAMETER_ASSIGN_USER, selectedGroup.getGroupKey( ), url.getUrl( ) );
636
637 LocalizedPaginator<DatabaseUser> paginator = new LocalizedPaginator<>( listFilteredUsers, _nItemsPerPage, url.getUrl( ),
638 AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale( ) );
639
640 model.put( MARK_GROUP, selectedGroup );
641 model.put( MARK_ITEM_NAVIGATOR, _itemNavigators.get( PARAMETER_ASSIGN_USER ) );
642 model.put( MARK_PAGINATOR, paginator );
643 model.put( MARK_NB_ITEMS_PER_PAGE, Integer.toString( _nItemsPerPage ) );
644 model.put( MARK_AVAILABLE_USERS, listAvailableUsers );
645 model.put( MARK_ASSIGNED_USERS, paginator.getPageItems( ) );
646 model.put( MARK_ASSIGNED_USERS_NUMBER, listAllAssignedUsers.size( ) );
647
648 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_USERS_GROUP, getLocale( ), model );
649
650 return getAdminPage( template.getHtml( ) );
651 }
652
653
654
655
656
657
658
659
660 public String doAssignUsersGroup( HttpServletRequest request )
661 {
662 String strReturn;
663
664 String strActionCancel = request.getParameter( PARAMETER_CANCEL );
665
666 if ( strActionCancel != null )
667 {
668 strReturn = JSP_MANAGE_GROUPS;
669 }
670 else
671 {
672 Group selectedGroup = getGroupFromRequest( request );
673
674 if ( selectedGroup == null )
675 {
676 return getCreateGroup( request );
677 }
678
679
680 String [ ] arrayUsersIds = request.getParameterValues( PARAMETER_AVAILABLE_USERS );
681
682 if ( ( arrayUsersIds != null ) )
683 {
684 for ( int i = 0; i < arrayUsersIds.length; i++ )
685 {
686 int nUserId = Integer.parseInt( arrayUsersIds [i] );
687 DatabaseUser user = DatabaseUserHome.findByPrimaryKey( nUserId, getPlugin( ) );
688 DatabaseHome.addGroupForUser( user.getUserId( ), selectedGroup.getGroupKey( ), getPlugin( ) );
689 }
690 }
691
692 strReturn = JSP_MANAGE_USERS_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + selectedGroup.getGroupKey( );
693 }
694
695 return strReturn;
696 }
697
698
699
700
701
702
703
704
705 public String doUnAssignUserGroup( HttpServletRequest request )
706 {
707 Group selectedGroup = getGroupFromRequest( request );
708
709 if ( selectedGroup == null )
710 {
711 return getCreateGroup( request );
712 }
713
714 int nIdUser = Integer.parseInt( request.getParameter( PARAMETER_MYLUTECE_DATABASE_USER_ID ) );
715 String strAnchor = request.getParameter( PARAMETER_ANCHOR );
716
717 DatabaseUser user = DatabaseUserHome.findByPrimaryKey( nIdUser, getPlugin( ) );
718
719 if ( user != null )
720 {
721 DatabaseHome.removeGroupsForUser( user.getUserId( ), getPlugin( ) );
722 }
723
724 return JSP_MANAGE_USERS_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + selectedGroup.getGroupKey( ) + SHARP + strAnchor;
725 }
726
727
728
729
730
731
732
733
734 private List<DatabaseUser> getListAssignedUsers( List<DatabaseUser> listAllAssignedUsers )
735 {
736 List<DatabaseUser> listAssignedUsers = new ArrayList<>( );
737
738 for ( DatabaseUser user : listAllAssignedUsers )
739 {
740 if ( _databaseService.isAuthorized( user, getUser( ), getPlugin( ) ) )
741 {
742 listAssignedUsers.add( user );
743 }
744 }
745
746 return listAssignedUsers;
747 }
748
749
750
751
752
753
754
755
756 private ReferenceList getAvailableUsers( List<DatabaseUser> listAssignedUsers )
757 {
758 ReferenceList listAvailableUsers = new ReferenceList( );
759
760 for ( DatabaseUser user : DatabaseUserHome.findDatabaseUsersList( getPlugin( ) ) )
761 {
762 boolean bIsAvailable = Boolean.TRUE;
763
764 for ( DatabaseUser assignedUser : listAssignedUsers )
765 {
766 if ( !_databaseService.isAuthorized( user, getUser( ), getPlugin( ) ) || ( user.getUserId( ) == assignedUser.getUserId( ) ) )
767 {
768 bIsAvailable = Boolean.FALSE;
769
770 break;
771 }
772 }
773
774 if ( bIsAvailable )
775 {
776 ReferenceItem userItem = new ReferenceItem( );
777 userItem.setCode( String.valueOf( user.getUserId( ) ) );
778 userItem.setName( user.getLastName( ) + SPACE + user.getFirstName( ) + SPACE + OPEN_BRACKET + user.getLogin( ) + CLOSED_BRACKET );
779 listAvailableUsers.add( userItem );
780 }
781 }
782
783 return listAvailableUsers;
784 }
785
786
787
788
789
790
791
792
793
794
795
796 private void setItemNavigator( String strItemNavigatorKey, String strGroupKey, String strUrl )
797 {
798 ItemNavigator itemNavigator = _itemNavigators.get( strItemNavigatorKey );
799
800 if ( itemNavigator == null )
801 {
802 List<Group> listGroups = getAuthorizedGroups( );
803
804
805 if ( _gFilter == null )
806 {
807 _gFilter = new GroupFilter( );
808 }
809
810 List<Group> listFilteredGroups = GroupHome.findByFilter( _gFilter, getPlugin( ) );
811 List<Group> listAvailableGroups = new ArrayList<>( );
812
813 for ( Group filteredGroup : listFilteredGroups )
814 {
815 for ( Group group : listGroups )
816 {
817 if ( filteredGroup.getGroupKey( ).equals( group.getGroupKey( ) ) )
818 {
819 listAvailableGroups.add( group );
820 }
821 }
822 }
823
824
825 if ( StringUtils.isNotBlank( _strSortedAttributeName ) )
826 {
827 Collections.sort( listAvailableGroups, new AttributeComparator( _strSortedAttributeName, _bIsAscSort ) );
828 }
829
830 List<String> listIdsDatabaseUser = new ArrayList<>( );
831 int nCurrentItemId = 0;
832 int nIndex = 0;
833
834 for ( Group group : listAvailableGroups )
835 {
836 if ( group != null )
837 {
838 listIdsDatabaseUser.add( group.getGroupKey( ) );
839
840 if ( group.getGroupKey( ).equals( strGroupKey ) )
841 {
842 nCurrentItemId = nIndex;
843 }
844
845 nIndex++;
846 }
847 }
848
849 itemNavigator = new ItemNavigator( listIdsDatabaseUser, nCurrentItemId, strUrl, PARAMETER_GROUP_KEY );
850 }
851 else
852 {
853 itemNavigator.setCurrentItemId( strGroupKey );
854 }
855
856 _itemNavigators.put( strItemNavigatorKey, itemNavigator );
857 }
858
859
860
861
862 private void reinitItemNavigators( )
863 {
864 _itemNavigators = new HashMap<>( );
865 _strSortedAttributeName = StringUtils.EMPTY;
866 _bIsAscSort = true;
867 }
868 }