<?php
declare(strict_types=1);
namespace Harmonizely\Service\EventSubscriber;
use Harmonizely\Core\Security\Contract\ISecurityHelper;
use Harmonizely\Service\Event\CreateEventTypeEvent;
use Harmonizely\Service\Event\UpdateEventTypeEvent;
use Harmonizely\Service\RegistrationAbuse\SpamValidationScheduler;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Schedules a delayed spam re-check of the current user whenever they create or
* update an event type — the event-type analog of em calling
* Company_SpamValidator::run() after a service/provider save.
*
* Hooks the same CreateEventTypeEvent / UpdateEventTypeEvent that
* {@see DirectorySubscriber} already listens to, so the scheduling lives next to
* the existing post-save side effects instead of in the controller.
*/
class ValidateEventTypeSpamSubscriber implements EventSubscriberInterface
{
/**
* @var SpamValidationScheduler
*/
private SpamValidationScheduler $spamValidationScheduler;
/**
* @var ISecurityHelper
*/
private ISecurityHelper $securityHelper;
public function __construct(
SpamValidationScheduler $spamValidationScheduler,
ISecurityHelper $securityHelper
) {
$this->spamValidationScheduler = $spamValidationScheduler;
$this->securityHelper = $securityHelper;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
CreateEventTypeEvent::NAME => 'onEventTypeSaved',
UpdateEventTypeEvent::NAME => 'onEventTypeSaved',
];
}
public function onEventTypeSaved(): void
{
$user = $this->securityHelper->getUser();
if (null !== $user) {
$this->spamValidationScheduler->schedule($user->getId());
}
}
}