<?php
namespace FlexApp\EventListener;
use FlexApp\Service\BBCodeManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use WebBundle\Helper\CookieHelper;
class ResponseListener
{
private ContainerInterface $container;
private BBCodeManager $bbCodeManager;
/**
* @param ContainerInterface $container
*/
public function __construct(ContainerInterface $container, BBCodeManager $bbCodeManager)
{
$this->container = $container;
$this->bbCodeManager = $bbCodeManager;
}
public function onKernelResponse(ResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
$response = $this->parseCodes($response, $request);
if ($this->container->getParameter('kernel.environment') == 'prod') {
$response = $this->process($response);
}
$response = CookieHelper::save($response);
return $response;
}
private function parseCodes(Response $response, Request $request): Response
{
$route = $request->attributes->get('_route');
$query = $request->getPathInfo();
if ((strripos($route, 'adm.') === false) and (strripos($query, '/import/') === false) and $route != '_wdt') {
$html = $response->getContent();
$html = $this->bbCodeManager->parse($html);
if (!($response instanceof BinaryFileResponse)) {
$response->setContent($html);
}
}
return $response;
}
private function process(Response $response): Response
{
$contentType = $response->headers->get('Content-Type', 'text/html');
if (0 !== stripos($contentType, 'text/html')) {
return $response;
}
$html = $response->getContent();
//$html = preg_replace(['#[\n]*#u'], [''], $html);
$html = preg_replace(['#[\t]*#u', '#[\s]+#u', '#[\s]+=[\s]+#u'], ['', ' ', '='], $html);
$html = preg_replace(['#(>)\s(<)#u', '#(")\s(/?>)#u', '#(;)\s(<)#u', /*'#(>)\s([A-Za-z])#u', '#([A-Za-z])\s(<)#u'*/], '$1$2', $html);
$response->setContent($html);
return $response;
}
}