custom/plugins/EsmComputer/src/Storefront/Subscriber/OrderSubscriber.php line 32

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace EsmComputer\Storefront\Subscriber;
  3. use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
  4. use Shopware\Core\Content\Newsletter\SalesChannel\AbstractNewsletterSubscribeRoute;
  5. use Shopware\Core\Content\Newsletter\SalesChannel\NewsletterSubscribeRoute;
  6. use Shopware\Core\Framework\Validation\DataBag\DataBag;
  7. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  8. use Shopware\Storefront\Framework\Routing\RequestTransformer;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. class OrderSubscriber implements EventSubscriberInterface
  12. {
  13.     private RequestStack $requestStack;
  14.     private AbstractNewsletterSubscribeRoute $subscribeRoute;
  15.     public function __construct(RequestStack $requestStackAbstractNewsletterSubscribeRoute $subscribeRoute)
  16.     {
  17.         $this->requestStack $requestStack;
  18.         $this->subscribeRoute $subscribeRoute;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             CartConvertedEvent::class => 'addCustomFieldsToOrder'
  24.         ];
  25.     }
  26.     public function addCustomFieldsToOrder(CartConvertedEvent $event): void
  27.     {
  28.         $orderData $event->getConvertedCart();
  29.         $orderCustomFields $orderData['customFields'] ?? [];
  30.         $customNewsletter $this->requestStack->getCurrentRequest()->request->get('custom_order_newsletter');
  31.         $hasNewsletter $customNewsletter === 'on';
  32.         if ($customNewsletter) {
  33.             $orderCustomFields['custom_order_newsletter'] = $hasNewsletter;
  34.         }
  35.         if ($hasNewsletter) {
  36.             $data = new RequestDataBag();
  37.             $data->set('storefrontUrl'$this->requestStack->getCurrentRequest()->attributes->get(RequestTransformer::STOREFRONT_URL));
  38.             $data->set('email'$event->getSalesChannelContext()->getCustomer()->getEmail());
  39.             $data->set('firstName'$event->getSalesChannelContext()->getCustomer()->getFirstName());
  40.             $data->set('lastName'$event->getSalesChannelContext()->getCustomer()->getLastName());
  41.             $data->set('salutationId'$event->getSalesChannelContext()->getCustomer()->getSalutationId());
  42.             $data->set('option'NewsletterSubscribeRoute::OPTION_SUBSCRIBE);
  43.             $this->subscribeRoute->subscribe($data$event->getSalesChannelContext(), false);
  44.         }
  45.         $orderData['customFields'] = $orderCustomFields;
  46.         $event->setConvertedCart($orderData);
  47.     }
  48. }