src/Controller/NewsletterController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Newsletter;
  4. use Doctrine\DBAL\Connection;
  5. use Doctrine\ORM\NoResultException;
  6. use App\Entity\CustomerHistoryEntry;
  7. use App\Repository\PersonRepository;
  8. use App\Repository\NewsletterRepository;
  9. use Doctrine\Persistence\ManagerRegistry;
  10. use App\Repository\ClientConfigRepository;
  11. use Menke\UserBundle\Service\MailerService;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use App\Repository\ManualNewsletterRepository;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Menke\UserBundle\Controller\AbstractClientableController;
  17. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  18. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  19. /**
  20.  * @Route("/newsletter")
  21.  */
  22. class NewsletterController extends AbstractClientableController
  23. {
  24.     const LISTING_LIMIT 20;
  25.     private $moment;
  26.     public function __construct()
  27.     {
  28.         $this->moment = new \DateTime();
  29.     }
  30.     /**
  31.      * @Route("/unsubscribe/{hash}", name="newsletter_unsubscribe", methods="GET")
  32.      */
  33.     public function unsubscribe(Request $request$hashPersonRepository $personRepoClientConfigRepository $clientConfigRepo)
  34.     {
  35.         $status 'not_found';
  36.         try {
  37.             $person $personRepo->getOneByHash($hash);
  38.             $status 'found';
  39.         } catch (NoResultException $e) {
  40.             $status 'not_found';
  41.         }
  42.         if ($status == 'found') {
  43.             $em $this->getDoctrine()->getManager();
  44.             if ($person->getReceiveNewsletter()) {
  45.                 $person->setReceiveNewsletter(false);
  46.                 $entry CustomerHistoryEntry::createForNewsletterDeregister($person'link_unsubscribe');
  47.                 $em->persist($entry);
  48.                 $em->flush();
  49.                 $config $clientConfigRepo->getSingleByClient($person->getClient());
  50.                 if ($config->getNewsletterDeregisterRedirect()) {
  51.                    
  52.                     return $this->redirect($config->getNewsletterDeregisterRedirect());
  53.                 }
  54.             } else {
  55.                 $status 'already_unsubscribed';
  56.             }
  57.         }
  58.         
  59.     }
  60.     /**
  61.      * @Route("/", name="newsletter_index", methods="GET")
  62.      */
  63.     public function index(
  64.         NewsletterRepository $newsletterRepository
  65.     ): Response {
  66.         $newsletter $newsletterRepository->getAllPaged();
  67.         return $this->render('newsletter/index.html.twig', [
  68.             'newsletter' => $newsletter->getIterator(),
  69.             'total' => $newsletter->count(),
  70.             'pages' => ceil($newsletter->count() / self::LISTING_LIMIT),
  71.             'page' => 1,
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/{page}/{orderby}/{order}", name="newsletter_index_listing", methods="GET", requirements={"page"="\d+", "order"="asc|desc"})
  76.      */
  77.     public function indexListing(
  78.         NewsletterRepository $newsletterRepo,
  79.         $page,
  80.         $orderby,
  81.         $order
  82.     ): Response {
  83.         $newsletter $newsletterRepo->getAllPaged(self::LISTING_LIMIT$page);
  84.         return $this->render('newsletter/_index_listing.html.twig', [
  85.             'newsletter' => $newsletter->getIterator(),
  86.             'total' => $newsletter->count(),
  87.             'pages' => ceil($newsletter->count() / self::LISTING_LIMIT),
  88.             'page' => $page,
  89.         ]);
  90.     }
  91.     /**
  92.      * @Route("/create", name="new_newsletter_without_client", methods="POST")
  93.      */
  94.     public function registerNewsletterWithoutClient(
  95.         Request $request,
  96.         TokenGeneratorInterface $generator,
  97.         NewsletterRepository $newsletterRepository,
  98.         MailerService $mailer,
  99.         Connection $connection
  100.     ) {
  101.         $email $request->request->get('email');
  102.         if (is_null($email)) {
  103.             return $this->json([
  104.                 'success' => false,
  105.                 'error' => "E-Mail Adresse muss ausgefüllt sein.",
  106.             ], Response::HTTP_BAD_REQUEST);
  107.         }
  108.         $this->moment = new \DateTime();
  109.         $alreadyAsked $newsletterRepository->getAlreadyAsked($this->moment$email);
  110.         $alreadyOrdered $newsletterRepository->getAlreadyOrdered($email);
  111.         $sql 
  112.         SELECT email
  113.           FROM client";
  114.         $stmt $connection->prepare($sql);
  115.         $stmt->execute();
  116.         $emailFrom $stmt->fetchAll()[0]['email'];
  117.         if (!empty($alreadyAsked) || !empty($alreadyOrdered)) {
  118.             return $this->json([
  119.                 'success' => false,
  120.                 'error' => "Sie haben sich bereits zum Newsletter angemeldet",
  121.             ], Response::HTTP_BAD_REQUEST);
  122.         }
  123.         $em $this->getDoctrine()->getManager();
  124.         $newsletter = new Newsletter();
  125.         $newsletter->setEmail($email);
  126.         $newsletter->setActivateToken(
  127.             $generator->generateToken()
  128.         );
  129.         $newsletter->setActivated(false);
  130.         $newsletter->setKeyExpired(
  131.             $this->moment->add(new \DateInterval('P1D'))
  132.         );
  133.         $em->persist($newsletter);
  134.         $em->flush();
  135.         $url null;
  136.         $url $this->generateUrl(
  137.             'activate_newsletter_without_client',
  138.             ['token' => $newsletter->getActivateToken()],
  139.             UrlGeneratorInterface::ABSOLUTE_URL
  140.         );
  141.         $mailer->sendNewsletterActivateMessage(
  142.             $emailFrom,
  143.             $url,
  144.             $newsletter->getEmail(),
  145.         );
  146.         return $this->json([
  147.             'success' => true,
  148.             'text' => "Sie erhalten in Kürze eine E-Mail.",
  149.         ], Response::HTTP_OK);
  150.     }
  151.     /**
  152.      * @Route("/activate", name="activate_newsletter_without_client", methods="GET")
  153.      */
  154.     public function activateNewsletterWithoutClient(
  155.         Request $request,
  156.         NewsletterRepository $newsletterRepository
  157.     ) {
  158.         $token $request->get('token');
  159.         if (is_null($token)) {
  160.             return $this->json([
  161.                 'success' => false,
  162.                 'error' => "Der Token muss gesetzt sein.",
  163.             ], Response::HTTP_BAD_REQUEST);
  164.         }
  165.         $customer $newsletterRepository->activateIfNotExpired($token$this->moment);
  166.         if ($customer) {
  167.             $em $this->getDoctrine()->getManager();
  168.             $customer->setActivated(true);
  169.             $customer->setEmailConfirmedAt(new \DateTime());
  170.             $em->persist($customer);
  171.             $em->flush();
  172.                 return $this->render('/user/email_confirm.html.twig', [
  173.                     'confirmed' => "Sie haben Ihre E-Mail Adresse erfolgreich bestätigt.",
  174.                     'newsletter' => '1',
  175.                 ]);
  176.                 
  177.             
  178. //
  179. //            return $this->json([
  180. //                'success' => true,
  181. //                'error' => "Sie haben Ihre E-Mail Adresse erfolgreich bestätigt.",
  182. //            ], Response::HTTP_BAD_REQUEST);
  183.         } else {
  184.             return $this->render('/user/email_confirm.html.twig', [
  185.                 'error' => "Der Token ist ungültig oder abgelaufen.",
  186.                 'newsletter' => '1',
  187.             ]);
  188. //            return $this->json([
  189. //                'success' => false,
  190. //                'error' => "Der Token ist ungültig oder abgelaufen.",
  191. //            ], Response::HTTP_BAD_REQUEST);
  192.         }
  193.     }
  194.     /**
  195.      * @Route("/delete", name="delete_newsletter_without_client", methods="GET")
  196.      */
  197.     public function deleteNewsletter(
  198.         Request $request,
  199.         NewsletterRepository $newsletterRepository
  200.     ) {
  201.         $email $request->get('email');
  202.         $case $request->get('case');
  203.         $newsletterRepository->deleteCustomerEntries($email);
  204.         if($case != 'backend'){
  205.         return $this->render('/user/email_confirm.html.twig', [
  206.             'confirmed' => "Ihr Eintrag wurde erfolgreich gelöscht.",
  207.             'newsletter' => '1',
  208.         ]);}
  209.         else  {
  210.             $newsletter $newsletterRepository->getAllPaged();
  211.             return $this->render('newsletter/index.html.twig', [
  212.                 'newsletter' => $newsletter->getIterator(),
  213.                 'total' => $newsletter->count(),
  214.                 'pages' => ceil($newsletter->count() / self::LISTING_LIMIT),
  215.                 'page' => 1,
  216.             ]);
  217.            
  218.  //       return $this->json([
  219.  //           'success' => true,
  220.  //           'error' => "Ihr Eintrag wurde erfolgreich gelöscht.",
  221.  //       ], Response::HTTP_BAD_REQUEST);
  222.     }}
  223.     /**
  224.      * @Route("/subscribe", name="subscribe_newsletter_set_by_admin", methods="GET")
  225.      * 
  226.      * If an admin set the Newsletter for each user, then he get an email.
  227.      * Click on "OK" Button lands here and activate the Newsletter.
  228.      */
  229.     public function verifiyNewsletterSubscription(
  230.         Request $request,
  231.         ManualNewsletterRepository $manualNewsletterRepo,
  232.         ClientConfigRepository $clientConfigRepo,
  233.     ) {
  234.         $token $request->get('token');
  235.         if (is_null($token)) {
  236.             return $this->json([
  237.                 'success' => false,
  238.                 'error' => "Der Token muss gesetzt sein.",
  239.             ], Response::HTTP_BAD_REQUEST);
  240.         }
  241.         $manualNewsletter $manualNewsletterRepo->findEntry($token$this->moment);
  242.         $em $this->getDoctrine()->getManager();
  243.         if ($manualNewsletter) {
  244.             $person $manualNewsletter->getPerson();
  245.             $manualNewsletter->setActivated(true);
  246.             $manualNewsletter->setEmailConfirmedAt($this->moment);
  247.             $em->persist($manualNewsletter);
  248.             $person->setReceiveNewsletter(true);
  249.             $em->persist($person);
  250.         }
  251.         $em->flush();
  252.         $config $clientConfigRepo->getSingleByClient($person->getClient());
  253.       /*  if ($config->getNewsletterDeregisterRedirect()) {
  254.             return $this->redirect($config->getNewsletterDeregisterRedirect());
  255.         }
  256.         */
  257.         return $this->json([
  258.             'success' => true,
  259.             'message' => "newsletter erfolgreich verifiziert",
  260.         ], Response::HTTP_BAD_REQUEST);
  261.     }
  262. }