UserListener.php 2.74 KB
Newer Older
Julien Jorry committed
1
<?php
2

Julien Jorry committed
3 4 5 6
namespace App\EventListener;

use Doctrine\ORM\EntityManagerInterface;
use FOS\UserBundle\Event\FormEvent;
7
use FOS\UserBundle\Event\GetResponseNullableUserEvent;
Julien Jorry committed
8 9 10 11 12 13 14 15 16
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;

/**
17
 * Listener responsible to change the redirection at the end of the password resetting.
Julien Jorry committed
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 */
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()
    {
36
        return [
Julien Jorry committed
37 38 39 40
            FOSUserEvents::CHANGE_PASSWORD_SUCCESS => 'onChangePasswordSuccess',
            FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
            FOSUserEvents::REGISTRATION_FAILURE => 'onRegistrationFailure',
            FOSUserEvents::RESETTING_RESET_SUCCESS => 'onResetSuccess',
41
            FOSUserEvents::RESETTING_SEND_EMAIL_INITIALIZE => 'onResetInitialize',
Julien Jorry committed
42
            FOSUserEvents::USER_CREATED => 'onUserCreated',
43
        ];
Julien Jorry committed
44 45
    }

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

Julien Jorry committed
57 58
    public function onChangePasswordSuccess(FormEvent $event)
    {
59
        $url = $this->router->generate('index') . '?upswd=success';
Julien Jorry committed
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
        $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 ?
    }
}