<?php declare(strict_types=1);
namespace Compra\NewsletterOnRegistrationSW6\Storefront\Subscriber;
use Shopware\Core\Checkout\Customer\Event\CustomerRegisterEvent;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class FrontendSubscriber implements EventSubscriberInterface
{
/** @var EntityRepositoryInterface */
protected $customerRepository;
/** @var Request */
protected $request;
public function __construct(
EntityRepositoryInterface $customerRepository,
RequestStack $requestStack
)
{
$this->customerRepository = $customerRepository;
$this->request = $requestStack->getCurrentRequest();
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
CustomerRegisterEvent::class => 'onCustomerRegister'
];
}
/**
* @param CustomerRegisterEvent $event
*/
public function onCustomerRegister(CustomerRegisterEvent $event): void
{
$newsletter = (bool) $this->request->get('newsletterCheckbox');
$customer =$event->getCustomer();
if (!$customer || !$newsletter) {
return;
}
$customer->setNewsletter($newsletter);
$this->customerRepository->upsert([
[
'id' => $customer->getId(),
'newsletter' => $customer->getNewsletter()
]
], $event->getContext());
}
}