UserListener.php 2.67 KB
Newer Older
Julien Jorry committed
1 2 3 4 5
<?php
namespace App\EventListener;

use Doctrine\ORM\EntityManagerInterface;
use FOS\UserBundle\Event\FormEvent;
6
use FOS\UserBundle\Event\GetResponseNullableUserEvent;
Julien Jorry committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use FOS\UserBundle\Event\UserEvent;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;

/**
 * Listener responsible to change the redirection at the end of the password resetting
 */
class UserListener implements EventSubscriberInterface
{
    protected $em;
    protected $router;
    protected $session;
    protected $tokenGenerator;

    public function __construct(EntityManagerInterface $em, RouterInterface $router, SessionInterface $session, TokenGeneratorInterface $tokenGenerator)
    {
        $this->em = $em;
        $this->router = $router;
        $this->session = $session;
        $this->tokenGenerator = $tokenGenerator;
    }

    public static function getSubscribedEvents()
    {
        return array(
            FOSUserEvents::CHANGE_PASSWORD_SUCCESS => 'onChangePasswordSuccess',
            FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
            FOSUserEvents::REGISTRATION_FAILURE => 'onRegistrationFailure',
            FOSUserEvents::RESETTING_RESET_SUCCESS => 'onResetSuccess',
40
            FOSUserEvents::RESETTING_SEND_EMAIL_INITIALIZE => 'onResetInitialize',
Julien Jorry committed
41 42 43 44
            FOSUserEvents::USER_CREATED => 'onUserCreated',
        );
    }

45 46 47 48 49 50 51 52 53
    public function onResetInitialize(GetResponseNullableUserEvent $event)
    {
        $user = $event->getUser();
        $user->setPasswordRequestedAt(null);
        $user->setConfirmationToken(null);
        $this->em->persist($user);
        $this->em->flush();
    }

Julien Jorry committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
    public function onChangePasswordSuccess(FormEvent $event)
    {
        $url = $this->router->generate('index');
        $event->setResponse(new RedirectResponse($url));
    }

    public function onRegistrationSuccess(FormEvent $event)
    {
        $url = $this->router->generate('index');
        $event->setResponse(new RedirectResponse($url));
    }

    public function onRegistrationFailure(FormEvent $event)
    {
        $url = $this->router->generate('index');
        $event->setResponse(new RedirectResponse($url));
    }

    public function onResetSuccess(FormEvent $event)
    {
        $url = $this->router->generate('index');
        $event->setResponse(new RedirectResponse($url));
    }

    public function onUserCreated(UserEvent $event)
    {
        // @TODO : notification ?
    }
}