2222use Symfony \Component \HttpFoundation \Response ;
2323use Symfony \Component \HttpFoundation \ResponseHeaderBag ;
2424use Symfony \Component \HttpKernel \Attribute \MapQueryParameter ;
25+ use Symfony \Component \HttpKernel \Exception \BadRequestHttpException ;
2526use Symfony \Component \HttpKernel \Exception \NotFoundHttpException ;
2627use Symfony \Component \HttpKernel \KernelInterface ;
2728use Symfony \Component \PropertyAccess \PropertyAccess ;
@@ -70,6 +71,14 @@ public function indexAction(): Response
7071 'teamid ' => ['title ' => '' , 'sort ' => false , 'render ' => 'entity_id_badge ' ],
7172 'team ' => ['title ' => 'team ' , 'sort ' => true ],
7273 ];
74+
75+ if ($ this ->isGranted ('ROLE_ADMIN ' )) {
76+ $ table_fields = array_merge (
77+ ['checkbox ' => ['title ' => '<input type="checkbox" class="select-all" title="Select all users"> ' , 'sort ' => false , 'search ' => false , 'raw ' => true ]],
78+ $ table_fields
79+ );
80+ }
81+
7382 if (in_array ('ipaddress ' , $ this ->config ->get ('auth_methods ' ))) {
7483 $ table_fields ['ip_address ' ] = ['title ' => 'autologin IP ' , 'sort ' => true ];
7584 }
@@ -83,6 +92,21 @@ public function indexAction(): Response
8392 /** @var User $u */
8493 $ userdata = [];
8594 $ useractions = [];
95+
96+ if ($ this ->isGranted ('ROLE_ADMIN ' )) {
97+ $ canBeDeleted = $ u ->getUserid () !== $ this ->dj ->getUser ()->getUserid ();
98+ if ($ canBeDeleted ) {
99+ $ userdata ['checkbox ' ] = [
100+ 'value ' => sprintf (
101+ '<input type="checkbox" name="ids[]" value="%s" class="user-checkbox"> ' ,
102+ $ u ->getUserid ()
103+ )
104+ ];
105+ } else {
106+ $ userdata ['checkbox ' ] = ['value ' => '' ];
107+ }
108+ }
109+
86110 // Get whatever fields we can from the user object itself.
87111 foreach ($ table_fields as $ k => $ v ) {
88112 if ($ propertyAccessor ->isReadable ($ u , $ k )) {
@@ -386,4 +410,30 @@ public function resetTeamLoginStatus(Request $request): Response
386410 $ this ->addFlash ('success ' , 'Reset login status all ' . $ count . ' users with the team role. ' );
387411 return $ this ->redirectToRoute ('jury_users ' );
388412 }
413+
414+ #[IsGranted('ROLE_ADMIN ' )]
415+ #[Route(path: '/delete-multiple ' , name: 'jury_user_delete_multiple ' , methods: ['GET ' , 'POST ' ])]
416+ public function deleteMultipleAction (Request $ request ): Response
417+ {
418+ $ ids = $ request ->query ->all ('ids ' );
419+ if (empty ($ ids )) {
420+ throw new BadRequestHttpException ('No IDs specified for deletion ' );
421+ }
422+
423+ $ users = $ this ->em ->getRepository (User::class)->findBy (['userid ' => $ ids ]);
424+
425+ $ deletableUsers = [];
426+ foreach ($ users as $ user ) {
427+ if ($ user ->getUserid () !== $ this ->dj ->getUser ()->getUserid ()) {
428+ $ deletableUsers [] = $ user ;
429+ }
430+ }
431+
432+ if (empty ($ deletableUsers )) {
433+ $ this ->addFlash ('warning ' , 'No users could be deleted (you cannot delete your own account). ' );
434+ return $ this ->redirectToRoute ('jury_users ' );
435+ }
436+
437+ return $ this ->deleteEntities ($ request , $ deletableUsers , $ this ->generateUrl ('jury_users ' ));
438+ }
389439}
0 commit comments