<?php
namespace CioMasterdata\Subscriber;
use CioMasterdata\Definition\Masterdata\MasterdataEntity;
use CioMasterdata\Service\MasterdataService;
use Shopware\Core\Checkout\Customer\Event\CustomerLoginEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Contracts\Translation\TranslatorInterface;
class CustomerLoginSubscriber implements EventSubscriberInterface
{
private MasterdataService $masterdataService;
private RequestStack $requestStack;
private TranslatorInterface $translator;
public function __construct(MasterdataService $masterdataService, RequestStack $requestStack, TranslatorInterface $translator)
{
$this->masterdataService = $masterdataService;
$this->requestStack = $requestStack;
$this->translator = $translator;
}
public static function getSubscribedEvents(): array
{
return [
CustomerLoginEvent::class => 'onCustomerLoginEvent'
];
}
/**
* @param CustomerLoginEvent $event
* @return void
*/
public function onCustomerLoginEvent(CustomerLoginEvent $event)
{
$salesChannelContext = $event->getSalesChannelContext();
$customer = $salesChannelContext->getCustomer() ?? null;
if(!$customer){
return;
}
$mainRequest = $this->requestStack->getMainRequest();
if ($mainRequest->hasSession() === false) {
return;
}
$session = $mainRequest->getSession();
if (!method_exists($session, 'getFlashBag')) {
return;
}
/** @var MasterdataEntity $masterData */
$masterData = $this->masterdataService->getMasterdatasForCustomer($customer);
if(is_array($masterData) && empty($masterData)){
$session->getFlashBag()->add('danger', $this->translator->trans('masterdata.missinginformation.flashbag'));
return;
}
$masterDatas = $masterData->getElements();
//Wenn die Adresse unvollständig ist, wird ein Flashbag ausgegeben
foreach($masterDatas as $masterData){
if(!$masterData->getName() || !$masterData->getStreet() || !$masterData->getZip() || !$masterData->getCity()){
$session->getFlashBag()->add('danger', $this->translator->trans('masterdata.missinginformation.flashbag'));
return;
}
}
}
}