<?php
namespace App\EventListener\Web;
use App\Application\Service\Tapfiliate\TapfiliateService;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
class TapfiliateCookieListener
{
public const TIME_EXPIRED_COOKIE_4_MONTH = 10_519_200;
private TapfiliateService $tapfiliateService;
private RequestStack $requestStack;
public function __construct(
TapfiliateService $tapfiliateService,
RequestStack $requestStack
) {
$this->tapfiliateService = $tapfiliateService;
$this->requestStack = $requestStack;
}
public function onKernelResponse(ResponseEvent $event): void
{
$request = $event->getRequest();
$response = $event->getResponse();
$refTapfiliate = $request->get('ref');
if (!$refTapfiliate) {
return;
}
$time = time() + self::TIME_EXPIRED_COOKIE_4_MONTH;
$cookieData = json_encode(['data' => $refTapfiliate, 'expiry' => $time]);
$this->requestStack->getSession()->set('ref', $refTapfiliate);
$_SESSION['ref'] = $refTapfiliate;
if (isset($_COOKIE['ref_tapfiliate'])) {
$cookie = $this->tapfiliateService->getDataCookieTapFiliate($request->cookies->get('ref_tapfiliate'));
if ($refTapfiliate === $cookie['dataCookie']) {
return;
}
$response->headers->clearCookie('ref_tapfiliate');
}
$response->headers->setCookie(
new Cookie(
'ref_tapfiliate',
$cookieData,
time() + self::TIME_EXPIRED_COOKIE_4_MONTH,
'/',
null,
null,
false
)
);
}
}