<?php
declare(strict_types=1);
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestMatcherInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\KernelInterface;
final class HomepageSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => [['onKernelRequest', 1]],
];
}
public function __construct(private KernelInterface $kernel)
{
}
public function onKernelRequest(RequestEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$request = $event->getRequest();
// routes de debug
if (str_contains($request->attributes->get('_route'), '_wdt') || str_contains($request->attributes->get('_route'), '_profiler')) {
return;
}
if (\in_array($this->kernel->getEnvironment(), ['dev', 'test'], true)) {
return;
}
$routeChecker = false;
$route = "";
if ($request->attributes->get('_route') === "sylius_shop_homepage" ||
$request->attributes->get('_route') === "sylius_shop_order_after_pay" ||
$request->attributes->get('_route') === "sylius_paypal_plugin_payment_error" ||
$request->attributes->get('_route') === "sylius_paypal_plugin_cancel_checkout_payment" ||
$request->attributes->get('_route') === "sylius_paypal_plugin_cancel_payment" ||
$request->attributes->get('_route') === "sylius_paypal_plugin_cancel_order" ||
$request->attributes->get('_route') === "payum_capture_do_session" ||
$request->attributes->get('_route') === "payum_notify_do" ||
$request->attributes->get('_route') === "sylius_paypal_plugin_complete_paypal_order"
) {
$route = $request->attributes->get('_route');
$routeChecker = true;
// HS, mais permet de supprimer une variable de session si on sort du panier
if (in_array($request->getMethod(), ['GET'], true) && $request->getSession()->has('promotion_coupon_error') && $request->attributes->get('_route') !== "sylius_shop_cart_summary" && $request->attributes->get('_route') !== "sylius_shop_checkout_address") {
$request->getSession()->remove('promotion_coupon_error');
}
}
if (!$routeChecker) {
return;
}
if ($request->getMethod() === Request::METHOD_POST) {
$this->writeLogFromBank($request, $route);
}
}
private function writeLogFromBank(Request $request, string $route): void {
$date = new \DateTime();
$logFile = $this->kernel->getProjectDir().'/var/log/homepage/post_response_'.$date->format('Y_m_d').'.log';
if (!file_exists($logFile)) {
touch($logFile);
}
$write = false;
$errorMessage = "------------------------------------\n";
$errorMessage .= "POST response ". "\n";
$errorMessage .= "date : ".$date->format('d/m/Y H:i:s') . "\n";
$errorMessage .= "route : ".$route . "\n";
foreach ($request->request->all() as $key => $value) {
if (is_array($value)) {
$value = json_encode($value);
}
if ($key !== "cookie_consent") {
$write = true;
}
$errorMessage .= $key ." : ".$value . "\n";
}
if ($write) {
error_log($errorMessage, 3, $logFile);
}
}
}