<?php declare(strict_types=1);
/*
* (c) webpiloten. <kontakt@web-piloten.de>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Spno\NewsletterBusiness\Subscriber;
use Shopware\Core\Content\Newsletter\Event\NewsletterConfirmEvent;
use Shopware\Core\Content\Newsletter\Event\NewsletterRegisterEvent;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class NewsletterSubscribeSubscriber implements EventSubscriberInterface
{
private RequestStack $requestStack;
private EntityRepository $newsletterRecipientRepository;
public function __construct(
RequestStack $requestStack,
EntityRepository $newsletterRecipientRepository
) {
$this->requestStack = $requestStack;
$this->newsletterRecipientRepository = $newsletterRecipientRepository;
}
public static function getSubscribedEvents(): array
{
return [
NewsletterRegisterEvent::class => 'onNewsletterRegister',
NewsletterConfirmEvent::class => 'onNewsletterConfirm',
];
}
public function onNewsletterRegister(NewsletterRegisterEvent $event): void
{
$this->addNewsletterRecipientGroups($event->getNewsletterRecipient()->getId());
}
public function onNewsletterConfirm(NewsletterConfirmEvent $event): void
{
$this->addNewsletterRecipientGroups($event->getNewsletterRecipient()->getId());
}
private function addNewsletterRecipientGroups(string $newsletterRecipientId): void
{
$request = $this->requestStack->getMainRequest();
if (!$request instanceof Request) {
return;
}
if (!is_array($request->get('newsletterRecipientGroups'))) {
return;
}
$newsletterRecipientGroups = $request->get('newsletterRecipientGroups');
if (empty($newsletterRecipientGroups)) {
return;
}
$data['id'] = $newsletterRecipientId;
$data['newsletterRecipientGroups'] = array_map(function ($el) {
return [
'id' => $el,
];
}, $newsletterRecipientGroups);
$this->newsletterRecipientRepository->update([$data], Context::createDefaultContext());
}
}