src/Controller/Front/NewsletterSubscriberController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\NewsletterSubscriber;
  4. use App\Form\NewsletterSubscriberType;
  5. use App\Form\UnsubscribeNewsletterType;
  6. use App\Repository\NewsletterSubscriberRepository;
  7. use App\Service\NewsLetterSubscriberService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. #[Route('/front/newsletter/subscriber')]
  15. class NewsletterSubscriberController extends AbstractController
  16. {
  17.     #[Route('/'name'app_front_newsletter_subscriber_index'methods: ['GET'])]
  18.     public function index(Request $request NewsletterSubscriberRepository $newsletterSubscriberRepository): Response
  19.     {
  20.         $template $request->query->get('ajax') ? '_list.html.twig':'index.html.twig';
  21.         return $this->render('front/newsletter_subscriber/' .$template, [
  22.             'newsletter_subscribers' => $newsletterSubscriberRepository->findAll(),
  23.         ]);
  24.     }
  25.     #[Route('/new'name'app_front_newsletter_subscriber_new'methods: ['GET''POST'])]
  26.     public function new(
  27.         Request                     $request,
  28.         EntityManagerInterface      $entityManager,
  29.         TranslatorInterface         $translator,
  30.         NewsLetterSubscriberService $newsLetterSubscriberService,
  31.     ): Response
  32.     {
  33.         $newsletterSubscriber = new NewsletterSubscriber();
  34.         $newsletterSubscriber->setActive(true);
  35.         $form $this->createForm(NewsletterSubscriberType::class, $newsletterSubscriber);
  36.         $form->handleRequest($request);
  37.         if ($form->isSubmitted() && $form->isValid()) {
  38.             if (!$newsLetterSubscriberService->isSubscribed($newsletterSubscriber->getEmail())) {
  39.                 $entityManager->persist($newsletterSubscriber);
  40.             }
  41.             if ($newsLetterSubscriberService->sendWelcomeNewsLetter($newsletterSubscriber)) {
  42.                 $this->addFlash('success''A welcome Email have been sent');
  43.             } else {
  44.                 $this->addFlash('error'"Email didn't send ");
  45.             }
  46.             $entityManager->flush();
  47.             return $this->redirectToRoute('app_main');
  48.         }
  49.         return $this->renderForm('front/newsletter_subscriber/new.html.twig', [
  50.             'newsletter_subscriber' => $newsletterSubscriber,
  51.             'form' => $form,
  52.         ]);
  53.     }
  54.     #[Route('/delete'name'app_front_newsletter_subscriber_delete'methods: ['GET''POST'])]
  55.     public function delete(
  56.         Request                        $request,
  57.         EntityManagerInterface         $entityManager,
  58.         NewsletterSubscriberRepository $subscriberRepository,
  59.     ): Response
  60.     {
  61.         $form $this->createForm(UnsubscribeNewsletterType::class);
  62.         $form->handleRequest($request);
  63.         if ($form->isSubmitted() && $form->isValid()) {
  64.             $newsletterSubscriber $subscriberRepository->findOneBy(['email' => $form->get('email')->getData()]);
  65.             if ($newsletterSubscriber?->isActive()) {
  66.                 $newsletterSubscriber->setActive(false);
  67.                 $entityManager->persist($newsletterSubscriber);
  68.                 $entityManager->flush();
  69.                 $this->addFlash('success''success');
  70.                 return $this->render('front/newsletter_subscriber/_unsubscribe_accept.html.twig');
  71.             }
  72.             $this->addFlash('error'"doesn't exist");
  73.         }
  74.         return $this->render('front/newsletter_subscriber/_delete_form.html.twig', [
  75.             'form' => $form->createView()
  76.         ]);
  77.     }
  78.     #[Route('/{id}'name'app_front_newsletter_subscriber_show'methods: ['GET'])]
  79.     public function show(NewsletterSubscriber $newsletterSubscriber): Response
  80.     {
  81.         return $this->render('front/newsletter_subscriber/show.html.twig', [
  82.             'newsletter_subscriber' => $newsletterSubscriber,
  83.         ]);
  84.     }
  85.     #[Route('/{id}/edit'name'app_front_newsletter_subscriber_edit'methods: ['GET''POST'])]
  86.     public function edit(
  87.         Request                $request,
  88.         NewsletterSubscriber   $newsletterSubscriber,
  89.         EntityManagerInterface $entityManager
  90.     ): Response
  91.     {
  92.         $form $this->createForm(NewsletterSubscriberType::class, $newsletterSubscriber);
  93.         $form->handleRequest($request);
  94.         if ($form->isSubmitted() && $form->isValid()) {
  95.             $entityManager->flush();
  96.             return $this->redirectToRoute('app_front_newsletter_subscriber_index', [], Response::HTTP_SEE_OTHER);
  97.         }
  98.         return $this->renderForm('front/newsletter_subscriber/edit.html.twig', [
  99.             'newsletter_subscriber' => $newsletterSubscriber,
  100.             'form' => $form,
  101.         ]);
  102.     }
  103.     #[Route('/{id}/edit_state'name'app_front_newsletter_subscriber_edit_state'methods: ['GET''POST'])]
  104.     public function editState(
  105.         Request                $request,
  106.         NewsletterSubscriber   $newsletterSubscriber,
  107.         EntityManagerInterface $entityManager
  108.     ): Response
  109.     {
  110.         if ($this->isCsrfTokenValid($newsletterSubscriber->getId(), $request->request->get('_token'))) {
  111.             $newsletterSubscriber->setActive(!$newsletterSubscriber->isActive());
  112.             $entityManager->persist($newsletterSubscriber);
  113.             $entityManager->flush();
  114.             if ($request->isXmlHttpRequest()) {
  115.                 return new Response(nullResponse::HTTP_OK);
  116.             }
  117.         }
  118.         return $this->renderForm('admin/change_state_form.html.twig', [
  119.             'entity' => $newsletterSubscriber,
  120.             'action' => $request->getPathInfo()
  121.         ]);
  122.     }
  123. }