src/EventListener/CustomerNewsletterListener.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Handler\NewsletterSubscriptionHandler;
  5. use Sylius\Component\Core\Model\CustomerInterface;
  6. use Sylius\Component\Resource\Exception\UnexpectedTypeException;
  7. use Symfony\Component\EventDispatcher\GenericEvent;
  8. final class CustomerNewsletterListener
  9. {
  10.     /**
  11.      * @var NewsletterSubscriptionHandler
  12.      */
  13.     private $newsletterSubscriptionHandler;
  14.     /**
  15.      * @param NewsletterSubscriptionHandler $newsletterSubscriptionHandler
  16.      */
  17.     public function __construct(NewsletterSubscriptionHandler $newsletterSubscriptionHandler)
  18.     {
  19.         $this->newsletterSubscriptionHandler $newsletterSubscriptionHandler;
  20.     }
  21.     /**
  22.      * @param GenericEvent $event
  23.      */
  24.     public function customerCreateEvent(GenericEvent $event)
  25.     {
  26.         /** @var CustomerInterface $customer */
  27.         $customer $event->getSubject();
  28.         if (!$customer instanceof CustomerInterface) {
  29.             throw new UnexpectedTypeException(
  30.                 $customer,
  31.                 CustomerInterface::class
  32.             );
  33.         }
  34.         $customer->isSubscribedToNewsletter() ? $this->unsubscribe($customer) : $this->subscribe($customer);
  35.     }
  36.     /**
  37.      * @param GenericEvent $event
  38.      */
  39.     public function customerUpdateEvent(GenericEvent $event)
  40.     {
  41.         $this->customerCreateEvent($event);
  42.     }
  43.     private function subscribe(CustomerInterface $customer)
  44.     {
  45.         $this->newsletterSubscriptionHandler->subscribe($customer->getEmail());
  46.     }
  47.     private function unsubscribe(CustomerInterface $customer)
  48.     {
  49.         $this->newsletterSubscriptionHandler->unsubscribe($customer);
  50.     }
  51. }