Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MailQueueBundle/Controller/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/MailQueueBundle/Controller/MailQueueController.php

<?php

namespace App\MailQueueBundle\Controller;

use App\MailQueueBundle\Service\MailQueueService;
use Doctrine\DBAL\Exception as DbalException;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\Expression;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;

class MailQueueController extends AbstractController
{
    #[Route('/admin-tools/mail-queue.html', name: 'mail_queue_list')]
    #[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MAIL_QUEUE_ADMIN")'))]
    public function list(MailQueueService $mailQueueService): Response
    {
        try {
            $summary = $mailQueueService->getGlobalSummary();
            $messages = $mailQueueService->listMessages();
        } catch (DbalException $e) {
            return $this->render('@MailQueueBundle/queue/error.html.twig', [
                'errorMessage' => 'Unable to connect to the mail queue database. Please check MAIL_DATABASE_* configuration.',
            ]);
        }

        return $this->render('@MailQueueBundle/queue/list.html.twig', [
            'summary' => $summary,
            'messages' => $messages,
        ]);
    }

    #[Route('/admin-tools/mail-queue/{messageId}.html', name: 'mail_queue_detail', requirements: ['messageId' => '\d+'])]
    #[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MAIL_QUEUE_ADMIN")'))]
    public function detail(
        int $messageId,
        Request $request,
        MailQueueService $mailQueueService,
        PaginatorInterface $paginator,
    ): Response {
        try {
            $message = $mailQueueService->findMessage($messageId);
            $messageBody = $mailQueueService->findMessageBody($messageId);
            $messageBodySrcdoc = MailQueueService::buildMessageBodySrcdoc($messageBody);
        } catch (DbalException $e) {
            return $this->render('@MailQueueBundle/queue/error.html.twig', [
                'errorMessage' => 'Unable to connect to the mail queue database. Please check MAIL_DATABASE_* configuration.',
            ]);
        }

        if ($message === null) {
            throw new NotFoundHttpException('Mail campaign not found.');
        }

        $toSendQuery = $mailQueueService->getToSendQueryForMessage($messageId);
        $toSendPage = $paginator->paginate($toSendQuery, $request->query->getInt('page', 1), 50);

        return $this->render('@MailQueueBundle/queue/detail.html.twig', [
            'message' => $message,
            'messageBody' => $messageBody,
            'messageBodySrcdoc' => $messageBodySrcdoc,
            'toSendPage' => $toSendPage,
        ]);
    }
}