custom/static-plugins/shopping-experiences/src/Subscriber/NewsletterSignupSubscriber.php line 43

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\ShoppingExperiences\Subscriber;
  3. use Shopware\Core\Content\ContactForm\Event\ContactFormEvent;
  4. use Shopware\Core\Content\Newsletter\SalesChannel\AbstractNewsletterSubscribeRoute;
  5. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  6. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextServiceInterface;
  7. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextServiceParameters;
  8. use Shopware\Storefront\Controller\FormController;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class NewsletterSignupSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var AbstractNewsletterSubscribeRoute
  14.      */
  15.     private $subscribeRoute;
  16.     /**
  17.      * @var SalesChannelContextServiceInterface
  18.      */
  19.     private $salesChannelContextService;
  20.     public function __construct(
  21.         AbstractNewsletterSubscribeRoute $subscribeRoute,
  22.         SalesChannelContextServiceInterface $salesChannelContextService
  23.     ) {
  24.         $this->subscribeRoute $subscribeRoute;
  25.         $this->salesChannelContextService $salesChannelContextService;
  26.     }
  27.     public static function getSubscribedEvents(): array
  28.     {
  29.         return [
  30.             ContactFormEvent::EVENT_NAME => "onContactFormEvent"
  31.         ];
  32.     }
  33.     /**
  34.      * @param ContactFormEvent $event
  35.      */
  36.     public function onContactFormEvent(ContactFormEvent $event): void
  37.     {
  38.         $signupNewsletter $event->getContactFormData()['signupNewsletter'] ?? null;
  39.         if (!$signupNewsletter) {
  40.             return;
  41.         }
  42.         $salesChannelContextParameters = new SalesChannelContextServiceParameters(
  43.             $event->getSalesChannelId(),
  44.             "",
  45.             $event->getContext()->getLanguageId()
  46.         );
  47.         $salesChannelContext $this->salesChannelContextService->get(
  48.             $salesChannelContextParameters
  49.         );
  50.         $data $event->getContactFormData();
  51.         $data['option'] = FormController::SUBSCRIBE;
  52.         $data['signupNewsletter'] = null;
  53.         $data['storefrontUrl'] = $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl();
  54.         $newsletterData = new RequestDataBag($data);
  55.         $this->subscribeRoute->subscribe($newsletterData$salesChannelContextfalse);
  56.     }
  57. }