<?php declare(strict_types=1);
namespace Samson\Subscriber;
/***
*
* This file is part of the "SAMSON Shop" project.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2023
*
***/
use Samson\Api\C4C\Service\Ne53NewsletterService;
use Samson\Entities\NE53NewsletterRecipient\NE53NewsletterRecipientEntity;
use Samson\Event\NE53NewsletterChangeEvent;
use Samson\Event\NE53NewsletterConfirmEvent;
use Samson\Event\NE53NewsletterUnsubscribeEvent;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
class NE53NewsletterSubscriber implements EventSubscriberInterface
{
private Ne53NewsletterService $ne53NewsletterService;
private EntityRepositoryInterface $ne53NewsletterRecipientRepository;
private bool $disableSendingNewsletterDataToC4C;
public function __construct(Ne53NewsletterService $ne53NewsletterService,
EntityRepositoryInterface $ne53NewsletterRecipientRepository,
bool $disableSendingNewsletterDataToC4C)
{
$this->ne53NewsletterService = $ne53NewsletterService;
$this->ne53NewsletterRecipientRepository = $ne53NewsletterRecipientRepository;
$this->disableSendingNewsletterDataToC4C = $disableSendingNewsletterDataToC4C;
}
public static function getSubscribedEvents(): array
{
return [
NE53NewsletterConfirmEvent::EVENT_NAME => 'onNE53NewsletterConfirm',
NE53NewsletterUnsubscribeEvent::EVENT_NAME => 'onNE53NewsletterUnsubscribe',
NE53NewsletterChangeEvent::EVENT_NAME => 'onNE53NewsletterChange'
];
}
public function onNE53NewsletterConfirm(NE53NewsletterConfirmEvent $event)
{
if ($this->disableSendingNewsletterDataToC4C) {
return;
}
$recipient = $this->loadRecipient($event->getNewsletterRecipient(), $event->getContext());
$this->ne53NewsletterService->createNewsletterRecipient($recipient);
}
public function onNE53NewsletterUnsubscribe(NE53NewsletterUnsubscribeEvent $event)
{
if ($this->disableSendingNewsletterDataToC4C) {
return;
}
$recipient = $this->loadRecipient($event->getNewsletterRecipient(), $event->getContext());
$this->ne53NewsletterService->deleteMarketingAttributesForRecipient($recipient);
}
public function onNE53NewsletterChange(NE53NewsletterChangeEvent $event)
{
if ($this->disableSendingNewsletterDataToC4C) {
return;
}
$recipient = $this->loadRecipient($event->getNewsletterRecipient(), $event->getContext());
$this->ne53NewsletterService->createNewsletterRecipient($recipient, true);
}
private function loadRecipient(NE53NewsletterRecipientEntity $NE53NewsletterRecipientEntity, Context $context): NE53NewsletterRecipientEntity
{
$criteria = new Criteria([$NE53NewsletterRecipientEntity->getId()]);
$criteria->addAssociations(['salutation', 'language.locale']);
return $this->ne53NewsletterRecipientRepository->search($criteria, $context)->first();
}
}