<?php
namespace App\EventSubscriber;
use App\Helper\EnvironmentHelper;
use App\Service\Features;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\KernelInterface;
class BadWordsReplaceSubscriber implements EventSubscriberInterface
{
const LIST = [
'Проститут' => 'Маршрут',
'Шлюх' => 'Рюх',
'Путан' => 'Гитан',
'Секс' => 'Индекс',
'Минет' => 'Кларнет',
'Презерватив' => 'Мотив',
'Окончани' => 'Вещани',
'Массаж' => 'Дренаж',
'Анал' => 'Овал',
'Стриптиз' => 'Тиз',
'Куннилингус' => 'Тунгус',
'Интим' => 'Оптим',
'Транс' => 'Нюанс',
'Жиголо' => 'Жерло',
'Фистинг' => 'Фитинг',
'Анилингус' => 'Аспарагус',
];
public function __construct(
private EnvironmentHelper $environmentHelper,
private Features $features,
) {}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => 'replaceBadWords',
];
}
public function replaceBadWords(ResponseEvent $event): void
{
if(false === $this->environmentHelper->isDevOrReviewEnvironment())
return;
if(false === $this->features->replace_bad_words())
return;
$content = $event->getResponse()->getContent();
if(false === $content)
return;
$list = self::LIST;
$searchesCapitalized = array_keys($list);
$replacesCapitalized = array_values($list);
$searchesLower = array_map(fn(string $value): string => mb_strtolower($value), $searchesCapitalized);
$replacesLower = array_map(fn(string $value): string => mb_strtolower($value), $replacesCapitalized);
$searchesUpper = array_map(fn(string $value): string => mb_strtoupper($value), $searchesCapitalized);
$replacesUpper = array_map(fn(string $value): string => mb_strtoupper($value), $replacesCapitalized);
$searches = array_merge($searchesCapitalized, $searchesLower, $searchesUpper);
$replaces = array_merge($replacesCapitalized, $replacesLower, $replacesUpper);
$content = str_replace($searches, $replaces, $content);
$event->getResponse()->setContent($content);
}
}