src/Controller/Manager/UserController.php line 78

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Manager;
  3. use App\Constants;
  4. use App\Entity\Itinerary;
  5. use App\Entity\Sound;
  6. use App\Entity\User;
  7. use App\Form\BatchType;
  8. use App\Form\Model\ChangePassword;
  9. use App\Form\SoundType;
  10. use App\Form\UserPasswordType;
  11. use App\Form\UserType;
  12. use App\Repository\UserRepository;
  13. use App\Security\ItineraryVoter;
  14. use App\Service\UploaderService;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\File\UploadedFile;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  23. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  24. use Symfony\Contracts\Translation\TranslatorInterface;
  25. /**
  26.  * Class UserController
  27.  * @package App\Controller\Manager
  28.  * @Route("/{_locale}")
  29.  */
  30. class UserController extends AbstractManagerController
  31. {
  32.     /**
  33.      * @Route("/account", name="manager_user_account")
  34.      * @param Request $request
  35.      * @param UserPasswordEncoderInterface $passwordEncoder
  36.      * @return Response
  37.      */
  38.     public function account(Request $requestUserPasswordEncoderInterface $passwordEncoderUserRepository $userRepository): Response
  39.     {
  40.         $user $this->getUser();
  41.         $users $this->isGranted(Constants::ROLE_ALLOWED_TO_SWITCH$user) ? $userRepository->findAll() : [];
  42.         $changePasswordModel = new ChangePassword();
  43.         $form $this->createForm(UserPasswordType::class, $changePasswordModel, []);
  44.         $form->handleRequest($request);
  45.         if ($form->isSubmitted() && $form->isValid()) {
  46.             $entityManager $this->getDoctrine()->getManager();
  47.             $user->setPassword(
  48.                 $passwordEncoder->encodePassword(
  49.                     $user,
  50.                     $form->get('newPassword')->getData()
  51.                 )
  52.             );
  53.             $entityManager->persist($user);
  54.             $entityManager->flush();
  55.             $this->addFlash(Constants::FLASH_SUCCESS'user.password.changed');
  56.             return $this->redirectToRoute('manager_user_account');
  57.         }
  58.         return $this->render('manager/manager_user_account.html.twig', [
  59.             'user' => $user,
  60.             'users' => $users,
  61.             'form' => $form->createView(),
  62.         ]);
  63.     }
  64.     /**
  65.      * @Route("/login", name="manager_user_login")
  66.      * @param AuthenticationUtils $authenticationUtils
  67.      * @return Response
  68.      */
  69.     public function login(AuthenticationUtils $authenticationUtils): Response
  70.     {
  71.         // get the login error if there is one
  72.         $error $authenticationUtils->getLastAuthenticationError();
  73.         // last username entered by the user
  74.         $lastUsername $authenticationUtils->getLastUsername();
  75.         return $this->render('manager/manager_user_login.html.twig', [
  76.             'last_username' => $lastUsername,
  77.             'error' => $error,
  78.         ]);
  79.     }
  80.     /**
  81.      * @Route("/logout", name="manager_user_logout")
  82.      */
  83.     public function logout()
  84.     {
  85.         return $this->redirectToRoute('manager_user_login');
  86.     }
  87.     /**
  88.      * @Route("/users", name="manager_user_index")
  89.      *
  90.      * @IsGranted("ROLE_ADMINISTRATOR")
  91.      *
  92.      * @param Request $request
  93.      * @return Response
  94.      */
  95.     public function userIndex(UserRepository $userRepository): Response
  96.     {
  97.         $users $userRepository->findAll();
  98.         return $this->render('manager/manager_user_index.html.twig', [
  99.             'users' => $users,
  100.         ]);
  101.     }
  102.     /**
  103.      * @Route("/users}/create", name="manager_user_create")
  104.      *
  105.      * @IsGranted("ROLE_ADMINISTRATOR")
  106.      *
  107.      * @param Request $request
  108.      * @return Response
  109.      */
  110.     public function userCreate(Request $requestUserPasswordEncoderInterface  $passwordEncoder): Response
  111.     {
  112.         $password md5(random_bytes(10));
  113.         $user = new User();
  114.         $user->setRoles(['ROLE_USER']);
  115.         $user->setPassword($passwordEncoder->encodePassword($user,  $password));
  116.         $form $this->createForm(UserType::class, $user, ['isUpdate' => false]);
  117.         $form->handleRequest($request);
  118.         if ($form->isSubmitted() && $form->isValid()) {
  119.             $this->handleSaveRequest([$user]);
  120.             $this->addFlash('success'sprintf('Password: %s'$password));
  121.             return $this->redirectToRoute('manager_user_detail', [
  122.                 'id' => $user->getId(),
  123.             ]);
  124.         }
  125.         return $this->render('manager/manager_user_form.html.twig', [
  126.             'form' => $form->createView(),
  127.             'user' => $user,
  128.         ]);
  129.     }
  130.     /**
  131.      * @Route("/users/{id}", name="manager_user_detail")
  132.      *
  133.      * @ParamConverter("user")
  134.      *
  135.      * @param Request $request
  136.      * @param User $user
  137.      * @return Response
  138.      */
  139.     public function userDetail(Request $requestUser $userTranslatorInterface $translator): Response
  140.     {
  141.         $form $this->createForm(UserType::class, $user, ['isUpdate' => true]);
  142.         $form->handleRequest($request);
  143.         if ($form->isSubmitted() && $form->isValid()) {
  144.             if ($form->get(Constants::FORM_DELETE)->isClicked()) {
  145.                 if(!$user->getPermissions()->isEmpty()) {
  146.                     $message $translator->trans('user.permissions.not.empty', ['%count%' => $user->getPermissions()->count()]);
  147.                     $this->addFlash('warning'$message);
  148.                     return $this->redirectToRoute('manager_user_detail', ['id' => $user->getId()]);
  149.                 }
  150.                 if(!$user->getItineraries()->isEmpty()) {
  151.                     $message $translator->trans('user.itineraries.not.empty', ['%count%' => $user->getItineraries()->count()]);
  152.                     $this->addFlash('warning'$message);
  153.                     return $this->redirectToRoute('manager_user_detail', ['id' => $user->getId()]);
  154.                 }
  155.                 $this->handleHardDeleteRequest([$user]);
  156.                 return $this->redirectToRoute('manager_user_index');
  157.             }
  158.             $this->handleSaveRequest([$user]);
  159.             return $this->redirectToRoute('manager_user_detail', [
  160.                 'id' => $user->getId(),
  161.             ]);
  162.         }
  163.         return $this->render('manager/manager_user_form.html.twig', [
  164.             'form' => $form->createView(),
  165.             'user' => $user,
  166.         ]);
  167.     }
  168. }