custom/plugins/MasterFFLCheckout/src/Subscriber/AddressSubscriber.php line 59

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace MasterFFL\Checkout\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Psr\Log\LoggerInterface;
  7. class AddressSubscriber implements EventSubscriberInterface
  8. {
  9.     private RequestStack $requestStack;
  10.     private EntityRepositoryInterface $customerRepository;
  11.     private LoggerInterface $logger;
  12.     public function __construct(
  13.         RequestStack $requestStack,
  14.         EntityRepositoryInterface $customerRepository,
  15.         LoggerInterface $logger
  16.     ) {
  17.         $this->requestStack $requestStack;
  18.         $this->customerRepository $customerRepository;
  19.         $this->logger $logger;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             'checkout.customer.before_login' => 'onCustomerBeforeLogin',
  25.             'checkout.customer.login' => 'onCustomerLogin'
  26.         ];
  27.     }
  28.     public function onCustomerBeforeLogin($event): void
  29.     {
  30.         try {
  31.             $request $this->requestStack->getCurrentRequest();
  32.             if (!$request) return;
  33.             $session $request->getSession();
  34.             $fflData $session->get('ffl_dealer_address');
  35.             if ($fflData) {
  36.                 $this->logger->info('FFL: Preserving FFL data before customer login', [
  37.                     'dealerId' => $fflData['dealerId'] ?? 'unknown'
  38.                 ]);
  39.                 
  40.                 // Store temporarily to preserve through login
  41.                 $session->set('ffl_temp_preserve'$fflData);
  42.             }
  43.         } catch (\Exception $e) {
  44.             $this->logger->error('FFL: Error in onCustomerBeforeLogin', [
  45.                 'error' => $e->getMessage()
  46.             ]);
  47.         }
  48.     }
  49.     public function onCustomerLogin($event): void
  50.     {
  51.         try {
  52.             $request $this->requestStack->getCurrentRequest();
  53.             if (!$request) return;
  54.             $session $request->getSession();
  55.             $preservedData $session->get('ffl_temp_preserve');
  56.             if ($preservedData) {
  57.                 $this->logger->info('FFL: Restoring FFL data after customer login');
  58.                 
  59.                 // Restore FFL data
  60.                 $session->set('ffl_dealer_address'$preservedData);
  61.                 $session->set('ffl_dealer_info', [
  62.                     'dealerId' => $preservedData['dealerId'] ?? '',
  63.                     'dealerName' => $preservedData['firstName'] ?? 'FFL Dealer',
  64.                     'dealerData' => $preservedData
  65.                 ]);
  66.                 
  67.                 // Clean up temporary data
  68.                 $session->remove('ffl_temp_preserve');
  69.             }
  70.         } catch (\Exception $e) {
  71.             $this->logger->error('FFL: Error in onCustomerLogin', [
  72.                 'error' => $e->getMessage()
  73.             ]);
  74.         }
  75.     }
  76. }