<?php
/**
* Created by PhpStorm.
* User: uwethiess
* Date: 30.01.17
* Time: 14:28
*/
namespace App\EventListener;
use App\Controller\RequireFullUserdataController;
use App\Entity\User;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class UserDataCompletionListener
{
/** @var TokenStorage */
private $storage;
/** @var RouterInterface */
private $router;
public function __construct(TokenStorageInterface $storage, RouterInterface $router)
{
$this->storage = $storage;
$this->router = $router;
}
public function onKernelController(ControllerEvent $event) {
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
if ($controller[0] instanceof RequireFullUserdataController) {
if ($this->storage->getToken()) {
/** @var User $user */
$user = $this->storage->getToken()->getUser();
if ($user instanceof User && $user->getId()) {
//only check if user is logged on
$isComplete = $user->isUserdataComplete();
if (!$isComplete) {
$redirectUrl = $this->router->generate('user_edit');
$event->setController(function () use ($redirectUrl) {
return new RedirectResponse($redirectUrl);
});
}
}
}
}
}
}