<?php
namespace App\Controller;
use App\Repository\EmailRecipientRepository;
use App\Services\EmailTrackingService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class EmailTrackingController extends AbstractController
{
#[Route('/email/track/open/{token}.png', name: 'email_tracking_open', methods: ['GET'])]
public function trackOpen(
string $token,
Request $request,
EmailRecipientRepository $recipientRepository,
EmailTrackingService $emailTrackingService
): Response {
$recipient = $recipientRepository->findOneBy(['openToken' => $token]);
if ($recipient) {
$emailTrackingService->handleOpenEvent(
$recipient,
$request->getClientIp(),
$request->headers->get('User-Agent')
);
}
$pixel = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==');
$response = new Response($pixel);
$response->headers->set('Content-Type', 'image/png');
$response->headers->set('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');
return $response;
}
}