vendor/menke/user-bundle/Controller/UserController.php line 156

Open in your IDE?
  1. <?php
  2. namespace Menke\UserBundle\Controller;
  3. use Menke\UserBundle\Entity\User;
  4. use Menke\UserBundle\Form\UserType;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. use Menke\UserBundle\Service\MailerService;
  7. use Menke\UserBundle\Form\PasswordResetType;
  8. use Menke\UserBundle\Form\PasswordForgotType;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Menke\UserBundle\Event\UserActivatedEvent;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Menke\UserBundle\Repository\UserRepository;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Menke\UserBundle\Security\TokenGeneratorInterface;
  15. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  16. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  17. class UserController extends AbstractClientableController
  18. {
  19.     /**
  20.      * @Route("/user/", name="user_index", methods="GET")
  21.      */
  22.     public function index(UserRepository $userRepository): Response
  23.     {
  24.         return $this->render('@MenkeUser/user/index.html.twig', [
  25.             'users' => $userRepository->findBy(['client' => $this->getCurrentClient(), 'role' => [User::ROLE_SUPER_USERUser::ROLE_ADMINUser::ROLE_MANAGERUser::ROLE_PROVIDER]]),
  26.         ]);
  27.     }
  28.     /**
  29.      * @Route("/user/new", name="user_new", methods="GET|POST")
  30.      */
  31.     public function new(Request $requestUserPasswordHasherInterface $passwordHasherManagerRegistry $managerRegistry): Response
  32.     {
  33.         $user = new User();
  34.         $form $this->createForm(UserType::class, $user, [
  35.             'be_role_selectable' => true,
  36.             'pw_editable' => true,
  37.         ]);
  38.         $form->handleRequest($request);
  39.         if ($form->isSubmitted() && $form->isValid()) {
  40.             $user $form->getData();
  41.             $hash $passwordHasher->hashPassword($user$user->getPassword());
  42.             $user->setPassword($hash);
  43.             $em $managerRegistry->getManager();
  44.             // ToDo: remove this assignment when client system is expanded
  45.             $client $this->getCurrentClient();
  46.             $user->setClient($client);
  47.             $user->setActivatedAt(new \DateTime());
  48.             
  49.             $user->setCreated(new \DateTime());
  50.             $em->persist($user);
  51.             $em->flush();
  52.             $this->addFlash('notice''Benutzer angelegt');
  53.             return $this->redirectToRoute('user_index');
  54.         }
  55.         return $this->render('@MenkeUser/user/new.html.twig', [
  56.             'user' => $user,
  57.             'form' => $form->createView(),
  58.         ]);
  59.     }
  60.     /**
  61.      * @Route("/user/{id}", name="user_show", methods="GET")
  62.      */
  63.     public function show(User $user): Response
  64.     {
  65.         $this->denyAccessUnlessGranted('ROLE_ADMIN'$user);
  66.         return $this->render('@MenkeUser/user/show.html.twig', ['user' => $user]);
  67.     }
  68.     /**
  69.      * @Route("/user/{id}/edit", name="user_edit", methods="GET|POST")
  70.      */
  71.     public function edit(Request $requestUser $userUserPasswordHasherInterface $passwordHasherManagerRegistry $managerRegistry): Response
  72.     {
  73.         $this->denyAccessUnlessGranted('ROLE_ADMIN'$user);
  74.         $password $user->getPassword();
  75.         $form $this->createForm(UserType::class, $user, [
  76.             'required_pw' => false,
  77.             'pw_editable' => true,
  78.             'be_role_selectable' => true
  79.         ]);
  80.         $form->handleRequest($request);
  81.         if ($form->isSubmitted() && $form->isValid()) {
  82.             $user $form->getData();
  83.             if (!empty($user->getPassword())) {
  84.                 $hash $passwordHasher->hashPassword($user$user->getPassword());
  85.                 $user->setPassword($hash);
  86.             } else {
  87.                 $user->setPassword($password);
  88.             }
  89.             $managerRegistry->getManager()->flush();
  90.             $this->addFlash('notice''Benutzer gespeichert');
  91.             return $this->redirectToRoute('user_edit', ['id' => $user->getId()]);
  92.         }
  93.         return $this->render('@MenkeUser/user/edit.html.twig', [
  94.             'user' => $user,
  95.             'form' => $form->createView(),
  96.         ]);
  97.     }
  98.     /**
  99.      * @Route("/user/{id}", name="user_delete", methods="DELETE", requirements={"id"="\d+"})
  100.      */
  101.     public function delete(Request $requestUser $userManagerRegistry $managerRegistry): Response
  102.     {
  103.         $this->denyAccessUnlessGranted('ROLE_ADMIN'$user);
  104.         if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
  105.             $em $managerRegistry->getManager();
  106.             $em->remove($user);
  107.             $em->flush();
  108.         }
  109.         return $this->redirectToRoute('user_index');
  110.     }
  111.     /**
  112.      * @Route("/user/multiple", name="user_delete-multiple", methods="DELETE")
  113.      */
  114.     public function deleteMultiple(Request $requestUserRepository $userRepoManagerRegistry $managerRegistry): Response
  115.     {
  116.         if ($this->isCsrfTokenValid('delete_users'$request->request->get('_token'))) {
  117.             $em $managerRegistry->getManager();
  118.             /** @var array $deleteIds */
  119.             $deleteIds $request->request->get('delete');
  120.             foreach ($deleteIds as $id => $value) {
  121.                 if ($value) {
  122.                     $user $userRepo->find($id);
  123.                     $this->denyAccessUnlessGranted('ROLE_ADMIN'$user);
  124.                     $em->remove($user);
  125.                 }
  126.             }
  127.             $em->flush();
  128.         }
  129.         return $this->redirectToRoute('user_index');
  130.     }
  131.     /**
  132.      * @Route("/forgot-password", name="user_forgot", methods="GET|POST")
  133.      */
  134.     public function forgotPassword(
  135.         Request $request,
  136.         TokenGeneratorInterface $generator,
  137.         UserRepository $repo,
  138.         MailerService $mailer
  139.         ManagerRegistry $managerRegistry
  140.     ) {
  141.         $form $this->createForm(PasswordForgotType::class);
  142.         $form->handleRequest($request);
  143.         $userNotFound false;
  144.         $emailSent false;
  145.         if ($form->isSubmitted() && $form->isValid()) {
  146.             $em $managerRegistry->getManager();
  147.             $data $form->getData();
  148.             $user $repo->findOneBy(array('username' => $data['email']));
  149.             if ($user) {
  150.                 $user->setPasswordResetToken($generator->generateToken());
  151.                 $user->setPasswordRequestedAt(new \DateTime());
  152.                 $em->flush();
  153.                 $mailer->sendPasswordForgotMessage($user$user->getPasswordResetToken());
  154.                 $emailSent true;
  155.             } else {
  156.                 $userNotFound true;
  157.             }
  158.         }
  159.         return $this->render('@MenkeUser/user/forgot.html.twig', array(
  160.             'form' => $form->createView(),
  161.             'userNotFound' => $userNotFound,
  162.             'emailSent' => $emailSent,
  163.         ));
  164.     }
  165.     /**
  166.      * @Route("/reset-password/{token}", name="user_reset", methods="GET|POST")
  167.      */
  168.     public function resetPasswordAction(
  169.         Request $request,
  170.         UserRepository $repo,
  171.         MailerService $mailer,
  172.         UserPasswordHasherInterface $passwordHasher,
  173.         $token,
  174.         ManagerRegistry $managerRegistry
  175.     ) {
  176.         $user $repo->findOneBy(array('passwordResetToken' => $token));
  177.         $passwordReset false;
  178.         if (!$user) {
  179.             $response = new Response();
  180.             $response->setStatusCode(Response::HTTP_NOT_FOUND);
  181.             return $response;
  182.         }
  183.         $form $this->createForm(PasswordResetType::class);
  184.         $form->handleRequest($request);
  185.         if ($form->isSubmitted() && $form->isValid()) {
  186.             $data $form->getData();
  187.             $em $managerRegistry->getManager();
  188.             $hash $passwordHasher->hashPassword($user$data['password']);
  189.             $user->setPassword($hash);
  190.             $user->setPasswordResetToken(null);
  191.             $user->setPasswordResetAt(new \DateTime());
  192.             $em->flush();
  193.             $mailer->sendPasswordResetMessage($user);
  194.             $passwordReset true;
  195.         }
  196.         return $this->render('@MenkeUser/user/reset.html.twig', array(
  197.             'form' => $form->createView(),
  198.             'passwordReset' => $passwordReset
  199.         ));
  200.     }
  201.     /**
  202.      * @Route("/activate/{token}", name="user_activate", methods="GET")
  203.      */
  204.     public function activateAccountAction($tokenUserRepository $repo,  EventDispatcherInterface $dispatcherManagerRegistry $managerRegistry)
  205.     {
  206.         $user $repo->findOneBy(array('activateToken' => $token));
  207.         if (!$user) {
  208.             $response = new Response();
  209.             $response->setStatusCode(Response::HTTP_NOT_FOUND);
  210.             return $response;
  211.         }
  212.         $user->setActivateToken(null);
  213.         $user->setActivatedAt(new \DateTime());
  214.         $event = new UserActivatedEvent($user);
  215.         $dispatcher->dispatch($eventUserActivatedEvent::NAME);
  216.         $em $managerRegistry->getManager();
  217.         $em->flush();
  218.         return $this->render('@MenkeUser/user/activated.html.twig');
  219.     }
  220. }