<?php declare(strict_types=1);
namespace Wexo\ShoppingExperiences\Subscriber;
use Shopware\Core\Content\ContactForm\Event\ContactFormEvent;
use Shopware\Core\Content\Newsletter\SalesChannel\AbstractNewsletterSubscribeRoute;
use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
use Shopware\Core\System\SalesChannel\Context\SalesChannelContextServiceInterface;
use Shopware\Core\System\SalesChannel\Context\SalesChannelContextServiceParameters;
use Shopware\Storefront\Controller\FormController;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class NewsletterSignupSubscriber implements EventSubscriberInterface
{
/**
* @var AbstractNewsletterSubscribeRoute
*/
private $subscribeRoute;
/**
* @var SalesChannelContextServiceInterface
*/
private $salesChannelContextService;
public function __construct(
AbstractNewsletterSubscribeRoute $subscribeRoute,
SalesChannelContextServiceInterface $salesChannelContextService
) {
$this->subscribeRoute = $subscribeRoute;
$this->salesChannelContextService = $salesChannelContextService;
}
public static function getSubscribedEvents(): array
{
return [
ContactFormEvent::EVENT_NAME => "onContactFormEvent"
];
}
/**
* @param ContactFormEvent $event
*/
public function onContactFormEvent(ContactFormEvent $event): void
{
$signupNewsletter = $event->getContactFormData()['signupNewsletter'] ?? null;
if (!$signupNewsletter) {
return;
}
$salesChannelContextParameters = new SalesChannelContextServiceParameters(
$event->getSalesChannelId(),
"",
$event->getContext()->getLanguageId()
);
$salesChannelContext = $this->salesChannelContextService->get(
$salesChannelContextParameters
);
$data = $event->getContactFormData();
$data['option'] = FormController::SUBSCRIBE;
$data['signupNewsletter'] = null;
$data['storefrontUrl'] = $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl();
$newsletterData = new RequestDataBag($data);
$this->subscribeRoute->subscribe($newsletterData, $salesChannelContext, false);
}
}