<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\Organization\EventListener;
use BitBag\OpenMarketplace\Component\Customer\Model\CustomerInterface;
use BitBag\OpenMarketplace\Component\Organization\Entity\Organization;
use BitBag\OpenMarketplace\Component\Organization\Manager\RegistrationConflictManagerInterface;
use BitBag\OpenMarketplace\Component\Vendor\Entity\ShopUserInterface;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
use Sylius\Bundle\UserBundle\Security\UserLoginInterface;
use Sylius\Component\User\Repository\UserRepositoryInterface;
use Webmozart\Assert\Assert;
final class FinishRegistrationEventListener
{
public function __construct(
private RegistrationConflictManagerInterface $registrationConflictManager,
private UserRepositoryInterface $userRepository,
private UserLoginInterface $userLogin,
private string $firewallContextName,
) {
}
public function preRegister(ResourceControllerEvent $event): void
{
$this->registrationConflictManager->manage($event);
}
public function postRegister(ResourceControllerEvent $event): void
{
$customer = $event->getSubject();
Assert::isInstanceOf($customer, CustomerInterface::class);
$user = $customer->getUser();
Assert::isInstanceOf($user, ShopUserInterface::class);
$user->setEnabled(true);
$user->setEmailVerificationToken(null);
$user->setVerifiedAt(new \DateTime());
$user->addRole(Organization::ROLE_ADMIN);
$user->setActivationToken(null);
$this->userRepository->add($user);
$this->userLogin->login($user, $this->firewallContextName);
}
}