<?php declare(strict_types=1);
namespace mediameets\mediameetsFbPixel\Storefront\Subscriber;
use mediameets\mediameetsFbPixel\Components\ContextualConfigReader;
use mediameets\mediameetsFbPixel\Components\Struct\DataStruct;
use mediameets\mediameetsFbPixel\Components\Support\Helper;
use mediameets\mediameetsFbPixel\Domain\MetaEvents;
use mediameets\mediameetsFbPixel\Domain\Plugin;
use mediameets\mediameetsFbPixel\Domain\PluginConfig;
use Shopware\Core\Checkout\Customer\Event\CustomerRegisterEvent;
use Shopware\Core\Checkout\Customer\Event\GuestCustomerRegisterEvent;
use Shopware\Storefront\Event\StorefrontRenderEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class HandleCustomerRegistration implements EventSubscriberInterface
{
protected string $eventSessionKey = 'CustomerRegistered';
/**
* @readonly
*/
private RequestStack $requestStack;
/**
* @readonly
*/
private ContextualConfigReader $contextualConfigReader;
public function __construct(RequestStack $requestStack, ContextualConfigReader $contextualConfigReader)
{
$this->requestStack = $requestStack;
$this->contextualConfigReader = $contextualConfigReader;
}
public static function getSubscribedEvents(): array
{
return [
CustomerRegisterEvent::class => 'setSessionFlagWhenCustomerRegistered',
GuestCustomerRegisterEvent::class => 'setSessionFlagWhenGuestCustomerRegistered',
StorefrontRenderEvent::class => 'addExtensionDataWhenSessionFlagExists',
];
}
public function addExtensionDataWhenSessionFlagExists(StorefrontRenderEvent $event): void
{
$session = $this->requestStack->getCurrentRequest()->getSession();
if (! $session->has(Helper::generateSessionKey($this->eventSessionKey))) {
return;
}
$salesChannelContext = $event->getSalesChannelContext();
$struct = $salesChannelContext->getExtension(Plugin::EXTENSION_NAMESPACE);
if (! $struct instanceof DataStruct) {
$struct = new DataStruct();
}
$struct->addEvent(MetaEvents::COMPLETE_REGISTRATION);
$salesChannelContext->addExtension(Plugin::EXTENSION_NAMESPACE, $struct);
$session->remove(Helper::generateSessionKey($this->eventSessionKey));
}
public function setSessionFlagWhenGuestCustomerRegistered(GuestCustomerRegisterEvent $event): void
{
$config = $this->contextualConfigReader->get();
if (! \is_array($config)) {
return;
}
if (! \array_key_exists(PluginConfig::COMPLETE_REGISTRATION_EVENT_FOR_GUESTS, $config) || $config[PluginConfig::COMPLETE_REGISTRATION_EVENT_FOR_GUESTS] === false) {
return;
}
$this->requestStack
->getSession()
->set(Helper::generateSessionKey($this->eventSessionKey), $event->getName());
}
public function setSessionFlagWhenCustomerRegistered(CustomerRegisterEvent $event): void
{
$this->requestStack
->getSession()
->set(Helper::generateSessionKey($this->eventSessionKey), $event->getName());
}
}