<?php
namespace FlexApp\EventSubscriber;
use DateInterval;
use DateTime;
use FlexApp\Entity\BannedIp;
use FlexApp\Events\CommentEvent;
use FlexApp\Events\Style43\UserUsedStopWordsEvent;
use FlexApp\Repository\BannedIpRepository;
use FlexApp\Service\EntitySaver;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class BanIpSubscriber implements EventSubscriberInterface
{
/**
* @var BannedIpRepository
*/
private $bannedIpRepository;
/**
* @var \FlexApp\Service\EntitySaver
*/
private $entitySaver;
/**
* BanIpSubscriber constructor.
*
* @param \FlexApp\Repository\BannedIpRepository $bannedIpRepository
* @param EntitySaver $entitySaver
*/
public function __construct(BannedIpRepository $bannedIpRepository, EntitySaver $entitySaver)
{
$this->bannedIpRepository = $bannedIpRepository;
$this->entitySaver = $entitySaver;
}
public static function getSubscribedEvents()
{
return [
UserUsedStopWordsEvent::class => [
['banUserIps', 0],
],
];
}
public function banUserIps(CommentEvent $commentEvent)
{
$comment = $commentEvent->getComment();
$ips = $comment->getIps();
foreach ($ips as $ipString) {
$currentDateTime = new DateTime();
$dateTimeTill = clone $currentDateTime;
$dateTimeTill->add(new DateInterval('P1M'));
$bannedIpEntity = $this->bannedIpRepository->findOneBy(['ip' => $ipString]);
if (!$bannedIpEntity) {
$bannedIpEntity = new BannedIp();
$bannedIpEntity->setIp($ipString);
}
$bannedIpEntity->setBannedTill($dateTimeTill);
$this->entitySaver->save($bannedIpEntity);
}
}
}