<?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);
}
}