<?php
namespace App\Controller;
use App\Entity\SiteBannedEmails;
use App\Form\BannedEmailsForm;
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\BannedEmailFilter;
use App\Repository\BannedEmailsRepository;
#[Route('/banned/email')]
class BannedEmailController extends AbstractController
{
#[Route('/', defaults: ['page' => '1'], methods: ['GET'], name: 'banned_email_index')]
#[Route('/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'banned_email_index_paginated')]
#[Cache(smaxage: 10)]
public function index(Request $request,int $page,EntityManagerInterface $entityManager,BannedEmailsRepository $bannedEmailsRepository): Response
{
$params = $request->query->all();
$filter = [];
$filterForm = $this->createForm(BannedEmailFilter::class);
if(isset($params['email'])) {
$filterForm['email']->setData($params['email']);
$filter['email'] = $params['email'];
}
if(isset($params['reason'])) {
$filterForm['reason']->setData($params['reason']);
$filter['reason'] = $params['reason'];
}
$data = $bannedEmailsRepository->adminPaginatorFetchAll($page, $filter);
return $this->render('banned-email/index.html.twig', [
'paginator' => $data,
'filter' => $filter,
'form' => $filterForm->createView(),
]);
}
#[Route('/new', name: 'banned_email_new', methods: ['GET', 'POST'])]
public function new(Request $request, EntityManagerInterface $entityManager): Response
{
$bannedEmail = new SiteBannedEmails();
$form = $this->createForm(BannedEmailsForm::class, $bannedEmail);
$form->handleRequest($request);
$redirectPage = $request->query->get('redirect_page');
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$redirectPage = $request->request->get('redirect_page');
$ipData = $entityManager->getRepository(\App\Entity\SiteBannedEmails::class)->findOneBy(array('email' => $data->getEmail()));
if($ipData){
$this->addFlash('error', 'This email is already exists.');
if($redirectPage){
return $this->redirectToRoute('banned_email_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('banned_email_index', [], Response::HTTP_SEE_OTHER);
}
$entityManager->persist($bannedEmail);
$entityManager->flush();
$this->addFlash('success', 'Created successfully.');
if($redirectPage){
return $this->redirectToRoute('banned_email_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('banned_email_index', [], Response::HTTP_SEE_OTHER);
}else if($form->isSubmitted() && !$form->isValid()){
$this->addFlash('error', 'Something went wrong.');
if($redirectPage){
return $this->redirectToRoute('banned_email_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('banned_email_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('banned-email/new.html.twig', [
'banned_email' => $bannedEmail,
'form' => $form,
'redirect_page' => $redirectPage
]);
}
#[Route('/{id}/edit', name: 'banned_email_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, SiteBannedEmails $bannedEmail, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(BannedEmailsForm::class, $bannedEmail);
$form->handleRequest($request);
$redirectPage = $request->query->get('redirect_page');
if ($form->isSubmitted() && $form->isValid()) {
$redirectPage = $request->request->get('redirect_page');
$entityManager->flush();
$this->addFlash('success', 'Update successfully.');
if($redirectPage){
return $this->redirectToRoute('banned_email_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('banned_email_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('banned-email/edit.html.twig', [
'bannedEmail' => $bannedEmail,
'form' => $form,
'redirect_page' => $redirectPage
]);
}
#[Route('/delete/{id}', name: 'banned_email_delete', methods: ['POST','GET'])]
public function delete(Request $request, SiteBannedEmails $bannedEmail, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$bannedEmail->getEmailId(), $request->request->get('_token'))) {
$entityManager->remove($bannedEmail);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
if($request->request->get('redirect_page')){
return $this->redirectToRoute('banned_email_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('banned_email_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('banned-email/_delete_form.html.twig', [
'bannedEmail' => $bannedEmail,
'redirect_page' => $request->query->get('redirect_page')
]);
}
}