<?php
/**
* Copyright (c) 2019-2022, MND Next GmbH - www.mndnext.de
*/
namespace App\EventListener;
use App\Entity\Admin;
use App\Entity\Company;
use App\Entity\Employee;
use App\Entity\User;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterCrudActionEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Model\UserManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class EasyAdminListener implements EventSubscriberInterface
{
/**
* @var UrlGeneratorInterface
*/
private $router;
private $userManager;
public function __construct(UserManagerInterface $userManager, UrlGeneratorInterface $router)
{
$this->userManager = $userManager;
$this->router = $router;
}
public static function getSubscribedEvents()
{
return array(
AfterCrudActionEvent::class => array('onAfterNewUser'),
FOSUserEvents::REGISTRATION_CONFIRM => array('onRegistrationConfirm')
);
}
public function onAfterNewUser(AfterCrudActionEvent $event)
{
$entity = $event->getAdminContext()->getEntity();
if (!($entity instanceof Admin) && !($entity instanceof Company) && !($entity instanceof Employee)) {
return;
}
if ($entity instanceof Admin) {
/** @var Admin $admin */
$admin = $entity;
$admin->addRole('ROLE_NEW_ADMIN');
} elseif ($entity instanceof Company) {
/** @var Company $company */
$company = $entity;
} else {
/** @var Employee $employee */
$employee = $entity;
$employee->addRole('ROLE_NEW_EMPLOYEE');
}
}
public function onRegistrationConfirm(GetResponseUserEvent $event)
{
if ($event->getUser()->getRegisterState() == User::REGISTERED_ADMIN) {
$url = $this->router->generate('new_password');
$event->setResponse(new RedirectResponse($url));
} elseif ($event->getUser()->getRegisterState() == User::REGISTERED_SELF) {
$event->getUser()->setRegisterState(User::REGISTERED_CONFIRMED);
}
}
}