vendor/store.shopware.com/spnonewsletterbusiness/src/Subscriber/NewsletterSubscribeSubscriber.php line 45

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. /*
  3.  * (c) webpiloten. <kontakt@web-piloten.de>
  4.  * For the full copyright and license information, please view the LICENSE
  5.  * file that was distributed with this source code.
  6.  */
  7. namespace Spno\NewsletterBusiness\Subscriber;
  8. use Shopware\Core\Content\Newsletter\Event\NewsletterConfirmEvent;
  9. use Shopware\Core\Content\Newsletter\Event\NewsletterRegisterEvent;
  10. use Shopware\Core\Framework\Context;
  11. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. class NewsletterSubscribeSubscriber implements EventSubscriberInterface
  16. {
  17.     private RequestStack $requestStack;
  18.     private EntityRepository $newsletterRecipientRepository;
  19.     public function __construct(
  20.         RequestStack $requestStack,
  21.         EntityRepository $newsletterRecipientRepository
  22.     ) {
  23.         $this->requestStack $requestStack;
  24.         $this->newsletterRecipientRepository $newsletterRecipientRepository;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             NewsletterRegisterEvent::class => 'onNewsletterRegister',
  30.             NewsletterConfirmEvent::class => 'onNewsletterConfirm',
  31.         ];
  32.     }
  33.     public function onNewsletterRegister(NewsletterRegisterEvent $event): void
  34.     {
  35.         $this->addNewsletterRecipientGroups($event->getNewsletterRecipient()->getId());
  36.     }
  37.     public function onNewsletterConfirm(NewsletterConfirmEvent $event): void
  38.     {
  39.         $this->addNewsletterRecipientGroups($event->getNewsletterRecipient()->getId());
  40.     }
  41.     private function addNewsletterRecipientGroups(string $newsletterRecipientId): void
  42.     {
  43.         $request $this->requestStack->getMainRequest();
  44.         if (!$request instanceof Request) {
  45.             return;
  46.         }
  47.         if (!is_array($request->get('newsletterRecipientGroups'))) {
  48.             return;
  49.         }
  50.         $newsletterRecipientGroups $request->get('newsletterRecipientGroups');
  51.         if (empty($newsletterRecipientGroups)) {
  52.             return;
  53.         }
  54.         $data['id'] = $newsletterRecipientId;
  55.         $data['newsletterRecipientGroups'] = array_map(function ($el) {
  56.             return [
  57.                 'id' => $el,
  58.             ];
  59.         }, $newsletterRecipientGroups);
  60.         $this->newsletterRecipientRepository->update([$data], Context::createDefaultContext());
  61.     }
  62. }