custom/plugins/BstRegisterType6/src/Storefront/Subscriber/Frontend.php line 71

Open in your IDE?
  1. <?php
  2. /**
  3.  * NOTICE OF LICENSE
  4.  *
  5.  * @copyright  Copyright (c) 11.01.2021 brainstation GbR
  6.  * @author     Mike Becker<mike@brainstation.de>
  7.  */
  8. declare(strict_types=1);
  9. namespace BstRegisterType6\Storefront\Subscriber;
  10. use Psr\Log\LoggerInterface;
  11. use Shopware\Core\Content\Media\MediaService;
  12. use Shopware\Core\Framework\Validation\BuildValidationEvent;
  13. use Shopware\Core\PlatformRequest;
  14. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  15. use Shopware\Storefront\Page\Address\Listing\AddressListingPageLoadedEvent;
  16. use Shopware\Storefront\Pagelet\Header\HeaderPageletLoadedEvent;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use BstRegisterType6\Settings\Service\SettingsService;
  20. use BstRegisterType6\Settings\Struct\SettingsStruct;
  21. use Symfony\Component\Validator\Constraints\Optional;
  22. class Frontend implements EventSubscriberInterface
  23. {
  24.     /** @var SettingsService */
  25.     private $settingsService;
  26.     /** @var LoggerInterface */
  27.     private $logger;
  28.     /** @var SettingsStruct */
  29.     private $settings;
  30.     /** @var RequestStack */
  31.     private $requestStack;
  32.     /**
  33.      * @param SettingsService $settingsService
  34.      * @param RequestStack $requestStack
  35.      * @param LoggerInterface $logger
  36.      */
  37.     public function __construct(
  38.         SettingsService $settingsService,
  39.         RequestStack $requestStack,
  40.         LoggerInterface $logger
  41.     )
  42.     {
  43.         $this->settingsService = $settingsService;
  44.         $this->requestStack = $requestStack;
  45.         $this->logger = $logger;
  46.     }
  47.     /**
  48.      * @return array
  49.      */
  50.     public static function getSubscribedEvents(): array
  51.     {
  52.         return [
  53.             HeaderPageletLoadedEvent::class => 'onPageLoaded',
  54.             AddressListingPageLoadedEvent::class => 'onAddressLoaded',
  55.             'framework.validation.customer.profile.update' => 'onValidationEvent',
  56.             'framework.validation.address.create' => 'onValidationEvent',
  57.         ];
  58.     }
  59.     /**
  60.      * @param HeaderPageletLoadedEvent $event
  61.      */
  62.     public function onPageLoaded(HeaderPageletLoadedEvent $event): void
  63.     {
  64.         $this->settings = $this->settingsService->getSettings($event->getSalesChannelContext()->getSalesChannel()->getId());
  65.         $event->getPagelet()->addExtension('BstRegisterType6', $this->settings);
  66.     }
  67.     /**
  68.      * @param AddressListingPageLoadedEvent $event
  69.      */
  70.     public function onAddressLoaded(AddressListingPageLoadedEvent $event): void
  71.     {
  72.         $this->settings = $this->settingsService->getSettings($event->getSalesChannelContext()->getSalesChannel()->getId());
  73.         $event->getPage()->addExtension('BstRegisterType6', $this->settings);
  74.     }
  75.     /**
  76.      * @param BuildValidationEvent $event
  77.      */
  78.     public function onValidationEvent(BuildValidationEvent $event): void
  79.     {
  80.         try {
  81.             // get current saleschannel context
  82.             /** @var SalesChannelContext $context */
  83.             if (!$context = $this->requestStack->getCurrentRequest()->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT, false)) {
  84.                 return;
  85.             }
  86.             $salesChannelId = null;
  87.             if ($context->getSalesChannel()) {
  88.                 $salesChannelId = $context->getSalesChannel()->getId();
  89.             }
  90.             $this->settings = $this->settingsService->getSettings($salesChannelId);
  91.             if (!$context->getCustomer()) {
  92.                 if (!$this->settings->isCompanyOptional()) {
  93.                     return;
  94.                 }
  95.             } else {
  96.                 if (!$this->settings->isCompanyOptional() && !$this->settings->isCompanyOptionalInAccount()) {
  97.                     return;
  98.                 }
  99.             }
  100.             $event->getDefinition()->set('company', new Optional());
  101.         } catch (\Exception $e) {}
  102.     }
  103. }