findBy([], ['id' => 'ASC']); return $this->render('game/admin/users/index.html.twig', [ 'users' => $users, 'marketingOptInCount' => count(array_filter($users, static fn (User $user) => $user->isMarketingOptIn())), ]); } #[Route('/{id}/edit', name: 'game_admin_user_edit', methods: ['GET', 'POST'])] public function edit( User $user, Request $request, EntityManagerInterface $em, UserPasswordHasherInterface $passwordHasher, ): Response { $form = $this->createForm(AdminUserType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $plainPassword = $form->get('plainPassword')->getData(); if ($plainPassword) { $user->setPassword($passwordHasher->hashPassword($user, $plainPassword)); } $em->flush(); $this->addFlash('success', sprintf('User "%s" updated.', $user->getUsername())); return $this->redirectToRoute('game_admin_users'); } return $this->render('game/admin/users/edit.html.twig', [ 'user' => $user, 'form' => $form, ]); } #[Route('/{id}/delete', name: 'game_admin_user_delete', methods: ['POST'])] public function delete(User $user, Request $request, EntityManagerInterface $em): Response { if (!$this->isCsrfTokenValid('delete_user_' . $user->getId(), $request->request->get('_token'))) { $this->addFlash('danger', 'Invalid CSRF token.'); return $this->redirectToRoute('game_admin_users'); } if (!$user->isDeleted()) { $user->setDeletedAt(new \DateTimeImmutable()); $em->flush(); } $this->addFlash('success', sprintf('User "%s" deleted.', $user->getUsername())); return $this->redirectToRoute('game_admin_users'); } }