src/Controller/ProfileController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\Type\RegistrationType;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use FOS\UserBundle\Event\FilterUserResponseEvent;
  7. use FOS\UserBundle\Event\FormEvent;
  8. use FOS\UserBundle\Event\GetResponseUserEvent;
  9. use FOS\UserBundle\Form\Factory\FactoryInterface;
  10. use FOS\UserBundle\FOSUserEvents;
  11. use FOS\UserBundle\Model\UserInterface;
  12. use FOS\UserBundle\Model\UserManagerInterface;
  13. use FOS\UserBundle\Controller\ProfileController as BaseController;
  14. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  15. use Symfony\Component\HttpFoundation\RedirectResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  19. use Tellaw\SunshineAdminBundle\Service\EntityService;
  20. /**
  21.  * Controller managing the user profile.
  22.  */
  23. class ProfileController extends BaseController
  24. {
  25.     /**
  26.      * @var FactoryInterface
  27.      */
  28.     private $formFactory;
  29.     /**
  30.      * @var UserManagerInterface
  31.      */
  32.     private $userManager;
  33.     /**
  34.      * @var EventDispatcherInterface
  35.      */
  36.     private $eventDispatcher;
  37.     /**
  38.      * ProfileController constructor.
  39.      */
  40.     public function __construct(EventDispatcherInterface $eventDispatcherFactoryInterface $formFactoryUserManagerInterface $userManager)
  41.     {
  42.         parent::__construct($eventDispatcher$formFactory$userManager);
  43.         $this->formFactory $formFactory;
  44.         $this->userManager $userManager;
  45.         $this->eventDispatcher $eventDispatcher;
  46.     }
  47.     /**
  48.      * Show the user.
  49.      * @param User $user
  50.      * @return Response
  51.      * @throws \Exception
  52.      */
  53.     public function viewAction(User $userEntityService $entityServiceEntityManagerInterface $em)
  54.     {
  55.         if (!$user) {
  56.             $user $this->getUser();
  57.         }
  58.         if (!is_object($user) || !$user instanceof UserInterface) {
  59.             throw new AccessDeniedException('This user does not have access to this section.');
  60.         }
  61.         return $this->render('@FOSUser/Profile/show.html.twig', array(
  62.             'user' => $user,
  63.             'fields' => $entityService->getFormConfiguration('User'),
  64.             'userArticles' => $em->getRepository('App:Article')->getArticlesByAuthor($user),
  65.             'userFiches' => $em->getRepository('App:PracticalFile')->getFichesByAuthor($user)
  66.         ));
  67.     }
  68.     /**
  69.      * Edit the user.
  70.      *
  71.      * @param Request $request
  72.      *
  73.      * @param User $user
  74.      * @return Response
  75.      */
  76.     public function editUserAction(Request $requestUser $user)
  77.     {
  78.         if (!$user) {
  79.             $user $this->getUser();
  80.         }
  81.         if (!is_object($user) || !$user instanceof UserInterface) {
  82.             throw new AccessDeniedException('This user does not have access to this section.');
  83.         }
  84.         $event = new GetResponseUserEvent($user$request);
  85.         $this->eventDispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_INITIALIZE$event);
  86.         if (null !== $event->getResponse()) {
  87.             return $event->getResponse();
  88.         }
  89.         $form =$this->createForm(RegistrationType::class, $user);
  90.         $form->handleRequest($request);
  91.         if ($form->isSubmitted() && $form->isValid()) {
  92.             $event = new FormEvent($form$request);
  93.             $this->eventDispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_SUCCESS$event);
  94.             $this->userManager->updateUser($user);
  95.             if (null === $response $event->getResponse()) {
  96.                 $url $this->generateUrl('sunshine_page', ['pageId' => 'userGrid']);
  97.                 $response = new RedirectResponse($url);
  98.             }
  99.             $this->eventDispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_COMPLETED, new FilterUserResponseEvent($user$request$response));
  100.             return $response;
  101.         }
  102.         return $this->render('@FOSUser/Profile/edit.html.twig', array(
  103.             'form' => $form->createView(),
  104.             'user' => $user
  105.         ));
  106.     }
  107.     /**
  108.      * Mise à jour du mot de passe
  109.      *
  110.      * @param Request $request
  111.      * @return null|RedirectResponse|Response
  112.      * @throws AccessDeniedException
  113.      */
  114.     public function changePasswordAction(Request $requestUser $user)
  115.     {
  116.         $this->denyAccessUnlessGranted('ICO_EDIT_USER'$user);
  117.         $event = new GetResponseUserEvent($user$request);
  118.         $this->eventDispatcher->dispatch(FOSUserEvents::CHANGE_PASSWORD_INITIALIZE$event);
  119.         if (null !== $event->getResponse()) {
  120.             return $event->getResponse();
  121.         }
  122.         $form $this->formFactory->createForm();
  123.         $form->remove('current_password');
  124.         $form->setData($user);
  125.         $form->handleRequest($request);
  126.         if ($form->isSubmitted() && $form->isValid()) {
  127.             $event = new FormEvent($form$request);
  128.             $this->eventDispatcher->dispatch(FOSUserEvents::CHANGE_PASSWORD_SUCCESS$event);
  129.             $this->userManager->updateUser($user);
  130.             if (null === $response $event->getResponse()) {
  131.                 $url $this->generateUrl('fos_user_profile_edit', ['user' => $user->getId()]);
  132.                 $response = new RedirectResponse($url);
  133.             }
  134.             $this->eventDispatcher->dispatch(FOSUserEvents::CHANGE_PASSWORD_COMPLETED, new FilterUserResponseEvent($user$request$response));
  135.             return $response;
  136.         }
  137.         return $this->render('@FOSUser/ChangePassword/change_password.html.twig', array(
  138.             'form' => $form->createView(),
  139.             'user' => $user
  140.         ));
  141.     }
  142. }