<?php
declare(strict_types=1);
namespace Harmonizely\EventSubscriber;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\FOSUserEvents;
use Harmonizely\Entity\Company\UserTermsAcceptanceEntity;
use Harmonizely\Repository\Company\Contract\IUserTermsAcceptanceRepository;
use Harmonizely\Service\Panel\Terms\Contract\ITermsVersionProvider;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
final class AcceptTermsOnRegistrationSubscriber implements EventSubscriberInterface
{
private IUserTermsAcceptanceRepository $repository;
private ITermsVersionProvider $versionProvider;
public function __construct(
IUserTermsAcceptanceRepository $repository,
ITermsVersionProvider $versionProvider
) {
$this->repository = $repository;
$this->versionProvider = $versionProvider;
}
public static function getSubscribedEvents(): array
{
return [
FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm',
];
}
public function onRegistrationConfirm(GetResponseUserEvent $event): void
{
$user = $event->getUser();
$ip = $event->getRequest()->getClientIp();
$this->repository->save(new UserTermsAcceptanceEntity($user, UserTermsAcceptanceEntity::TYPE_TERMS, $this->versionProvider->getTermsVersion(), $ip));
$this->repository->save(new UserTermsAcceptanceEntity($user, UserTermsAcceptanceEntity::TYPE_PRIVACY, $this->versionProvider->getPrivacyVersion(), $ip));
}
}