<?php
namespace App\Controller;
use App\Entity\NewsletterSubscription;
use App\Form\NewsletterSubscriptionType;
use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class NewsletterSubscriptionController extends ResourceController
{
/**
* @Route("/_ajax/newsletter/subscribe", name="app_newsletter_subscribe_form", methods={"GET", "POST"})
*/
public function subscribeAction(Request $request)
{
if ($request->cookies->get('newsletter_modal_shown')) {
return new Response();
}
$newsletterSubscription = new NewsletterSubscription();
$newsletterSubscription->setChannel($this->container->get('sylius.context.channel')->getChannel());
$form = $this->createForm(NewsletterSubscriptionType::class, $newsletterSubscription, [
'action' => $this->generateUrl('app_newsletter_subscribe_form'),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->repository->add($newsletterSubscription);
$this->setCookie();
return $this->render('@SyliusShop/Newsletter/success.html.twig');
}
return $this->render('@SyliusShop/Newsletter/subscribe.html.twig', [
'form' => $form->createView(),
]);
}
private function setCookie()
{
$cookie = new Cookie('newsletter_modal_shown', TRUE, time() + 3600 * 24 * 365);
$response = new Response();
$response->headers->setCookie($cookie);
$response->sendHeaders();
return $response;
}
/**
* @Route("/_ajax/newsletter/subscribe/set-cookie", name="app_newsletter_set_cookie", methods={"POST"}, condition="request.isXmlHttpRequest()")
*/
public function setCookieAction(): Response
{
return $this->setCookie();
}
}