<?php
namespace App\Controller;
use App\Entity\SiteSms;
use App\Entity\SiteMails;
use App\Entity\SiteSmsRecipients;
use App\Entity\SiteMailRecipients;
use App\Form\BannedIpsForm;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\Filters\BannedIpFilter;
use App\Form\Filters\EmailQueueFilter;
use App\Form\Filters\SMSQueueFilter;
use App\Repository\SiteMailsRepository;
use App\Repository\SiteSmsRepository;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
#[Route('/task')]
class QueueController extends AbstractController
{
#[Route('/mail', defaults: ['page' => '1'], methods: ['GET'], name: 'queue_email_index')]
#[Route('/mail/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'queue_email_index_paginated')]
#[Cache(smaxage: 10)]
public function index(Request $request,int $page,EntityManagerInterface $entityManager,SiteMailsRepository $siteMailsRepository): Response
{
$params = $request->query->all();
$filter = [];
$filterForm = $this->createForm(EmailQueueFilter::class);
if(isset($params['start_date'])) {
$filterForm['start_date']->setData($params['start_date']);
$filter['start_date'] = $params['start_date'];
}
if(isset($params['end_date'])) {
$filterForm['end_date']->setData($params['end_date']);
$filter['end_date'] = $params['end_date'];
}
if(isset($params['email'])) {
$filterForm['email']->setData($params['email']);
$filter['email'] = $params['email'];
}
$data = $siteMailsRepository->adminPaginatorFetchAll($page,$filter);
return $this->render('queue/index.html.twig', [
'paginator' => $data,
'filter' => $filter,
'form' => $filterForm->createView(),
]);
}
#[Route('/mail-delete/{id}', name: 'queue_email_delete', methods: ['POST','GET'])]
public function mailDelete(Request $request, SiteMails $siteMails, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$siteMails->getMailId(), $request->request->get('_token'))) {
$siteMailRecipients = $entityManager->getRepository(\App\Entity\SiteMailRecipients::class)->findBy(['mailId' => $siteMails->getMailId()]);
if($siteMailRecipients){
foreach($siteMailRecipients as $rec){
$entityManager->remove($rec);
$entityManager->flush();
}
}
$entityManager->remove($siteMails);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
if($request->request->get('redirect_page')){
return $this->redirectToRoute('queue_email_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('queue_email_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('queue/email_delete_form.html.twig', [
'siteMails' => $siteMails,
'redirect_page' => $request->query->get('redirect_page')
]);
}
#[Route('/empty-queue-email', name: 'queue_email_empty', methods: ['POST','GET'])]
public function emptyDelete(Request $request, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('empty-queue', $request->request->get('_token'))) {
$entityManager->createQueryBuilder()
->delete(SiteMails::class,'c')
->getQuery()->execute();
$entityManager->createQueryBuilder()
->delete(SiteMailRecipients::class,'c')
->getQuery()->execute();
return $this->redirectToRoute('queue_email_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('queue/empty_queue_email.html.twig', []);
}
#[Route('/sms', defaults: ['page' => '1'], methods: ['GET'], name: 'queue_sms_index')]
#[Route('/sms/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'queue_sms_index_paginated')]
#[Cache(smaxage: 10)]
public function smsIndex(Request $request,int $page,EntityManagerInterface $entityManager,SiteSmsRepository $siteSmsRepository): Response
{
$params = $request->query->all();
$filter = [];
$filterForm = $this->createForm(SMSQueueFilter::class);
if(isset($params['start_date'])) {
$filterForm['start_date']->setData($params['start_date']);
$filter['start_date'] = $params['start_date'];
}
if(isset($params['end_date'])) {
$filterForm['end_date']->setData($params['end_date']);
$filter['end_date'] = $params['end_date'];
}
if(isset($params['phone'])) {
$filterForm['phone']->setData($params['phone']);
$filter['phone'] = $params['phone'];
}
if(isset($params['sms_type'])) {
$filterForm['sms_type']->setData($params['sms_type']);
$filter['sms_type'] = $params['sms_type'];
}
$data = $siteSmsRepository->adminPaginatorFetchAll($page,$filter);
return $this->render('queue/sms-index.html.twig', [
'paginator' => $data,
'filter' => $filter,
'form' => $filterForm->createView(),
]);
}
#[Route('/sms-delete/{id}', name: 'queue_sms_delete', methods: ['POST','GET'])]
public function smsDelete(Request $request, SiteSms $siteSms, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$siteSms->getSmsId(), $request->request->get('_token'))) {
$siteSmsRecipients = $entityManager->getRepository(\App\Entity\SiteSmsRecipients::class)->findBy(['smsId' => $siteSms->getSmsId()]);
if($siteSmsRecipients){
foreach($siteSmsRecipients as $rec){
$entityManager->remove($rec);
$entityManager->flush();
}
}
$entityManager->remove($siteSms);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
if($request->request->get('redirect_page')){
return $this->redirectToRoute('queue_sms_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('queue_sms_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('queue/sms_delete_form.html.twig', [
'siteSms' => $siteSms,
'redirect_page' => $request->query->get('redirect_page')
]);
}
#[Route('/empty-queue-sms', name: 'queue_sms_empty', methods: ['POST','GET'])]
public function emptySmsDelete(Request $request, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('empty-queue-sms', $request->request->get('_token'))) {
$entityManager->createQueryBuilder()
->delete(SiteSms::class,'c')
->getQuery()->execute();
$entityManager->createQueryBuilder()
->delete(SiteSmsRecipients::class,'c')
->getQuery()->execute();
return $this->redirectToRoute('queue_sms_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('queue/empty_queue_sms.html.twig', []);
}
}