custom/plugins/EmcgnGewerbeschein/src/Resources/Subscriber/StorefrontData.php line 154

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace EmcgnGewerbeschein\Resources\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  6. use Shopware\Core\Framework\Struct\ArrayEntity;
  7. use Shopware\Core\System\SystemConfig\SystemConfigService;
  8. use Shopware\Storefront\Page\Account\CustomerGroupRegistration\CustomerGroupRegistrationPageLoadedEvent;
  9. use Shopware\Storefront\Page\Account\Login\AccountLoginPageLoadedEvent;
  10. use Shopware\Storefront\Page\Account\Overview\AccountOverviewPageLoadedEvent;
  11. use Shopware\Storefront\Page\Account\Profile\AccountProfilePageLoadedEvent;
  12. use Shopware\Storefront\Page\Checkout\Register\CheckoutRegisterPageLoadedEvent;
  13. use Shopware\Storefront\Page\PageLoadedEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. class StorefrontData implements EventSubscriberInterface
  16. {
  17.     private $systemConfigService;
  18.     private $mediaRepository;
  19.     private $gewerbescheinRepository;
  20.     public function __construct(
  21.         SystemConfigService $systemConfigService,
  22.         EntityRepositoryInterface $mediaRepository,
  23.         EntityRepositoryInterface $gewerbescheinRepository
  24.     )
  25.     {
  26.         $this->systemConfigService $systemConfigService;
  27.         $this->mediaRepository $mediaRepository;
  28.         $this->gewerbescheinRepository $gewerbescheinRepository;
  29.     }
  30.     public static function getSubscribedEvents(): array
  31.     {
  32.         return [
  33.             CustomerGroupRegistrationPageLoadedEvent::class => 'registerEvent',
  34.             AccountLoginPageLoadedEvent::class => 'loginEvent',
  35.             CheckoutRegisterPageLoadedEvent::class => 'loginEvent',
  36.             AccountOverviewPageLoadedEvent::class => 'profileOverview',
  37.             AccountProfilePageLoadedEvent::class => 'profileEdit'
  38.         ];
  39.     }
  40.     /**
  41.      * Show/Hide input field in profile edit
  42.      * @param AccountProfilePageLoadedEvent $event
  43.      */
  44.     public function profileEdit(AccountProfilePageLoadedEvent $event){
  45.         /* GruppenId des Kunden auslesen */
  46.         $groupId $event->getSalesChannelContext()->getCustomer()->getGroupId();
  47.         /* Prüft, ob Kundengruppe mit Kundengruppe(n) aus PluginConfig übereinstimmt */
  48.         $enableOutput $this->checkCustomerGroup($groupId);
  49.         if($enableOutput == false){
  50.             /* Angefragte KundengruppenID des Kunden auslesen */
  51.             $groupId $event->getSalesChannelContext()->getCustomer()->getRequestedGroupId();
  52.             if(!empty($groupId)){
  53.                 $enableOutput $this->checkCustomerGroup($groupId);
  54.             }
  55.         }
  56.         $emcgnTlInfo = new ArrayEntity();
  57.         $emcgnTlInfo->set('isEnabled'$enableOutput);
  58.         $event->getPage()->addExtension('emcgnTradeLicense'$emcgnTlInfo);
  59.     }
  60.     /**
  61.      * Show/Hide card in profile overview, handle trade license data
  62.      * @param AccountOverviewPageLoadedEvent $event
  63.      */
  64.     public function profileOverview(AccountOverviewPageLoadedEvent $event){
  65.         /* GruppenId des Kunden auslesen */
  66.         $groupId $event->getPage()->getCustomer()->getGroupId();
  67.         /* Prüft, ob Kundengruppe mit Kundengruppe(n) aus PluginConfig übereinstimmt */
  68.         $enableOutput $this->checkCustomerGroup($groupId);
  69.         if($enableOutput == false){
  70.             /* Angefragte KundengruppenID des Kunden auslesen */
  71.             $groupId $event->getPage()->getCustomer()->getRequestedGroupId();
  72.             if(!empty($groupId)){
  73.                 $enableOutput $this->checkCustomerGroup($groupId);
  74.             }
  75.         }
  76.         $emcgnTlInfo = new ArrayEntity();
  77.         if($enableOutput == true) {
  78.             $customerId $event->getPage()->getCustomer()->getId();
  79.             $criteria = new Criteria();
  80.             $criteria->addFilter(new EqualsFilter('customerId'$customerId));
  81.             $tl $this->gewerbescheinRepository->search($criteria$event->getContext());
  82.             $elements $tl->getElements();
  83.             $tradeLicenses = [];
  84.             if(!empty($elements)){
  85.                 foreach($elements as $element){
  86.                     $mediaId $element->getFileId();
  87.                     if(!empty($mediaId)){
  88.                         $media $this->mediaRepository->search(new Criteria([$mediaId]), $event->getContext())->first();
  89.                         $url $media->getUrl();
  90.                         $uploadDate date('d.m.Y'$media->getUploadedAt()->getTimestamp());
  91.                         $data = [
  92.                             'url' => $url,
  93.                             'uploadDate' => $uploadDate
  94.                         ];
  95.                         array_push($tradeLicenses$data);
  96.                     }
  97.                 }
  98.             }
  99.             $emcgnTlInfo->set('tradeLicenses'$tradeLicenses);
  100.         }
  101.         $emcgnTlInfo->set('isEnabled'$enableOutput);
  102.         $event->getPage()->addExtension('emcgnTradeLicense'$emcgnTlInfo);
  103.     }
  104.     /**
  105.      * Check plugin config, show/hide input field in customerGroup register form
  106.      * @param CustomerGroupRegistrationPageLoadedEvent $event
  107.      */
  108.     public function registerEvent(CustomerGroupRegistrationPageLoadedEvent $event){
  109.         /* Plugin Config auslesen */
  110.         $isRequired $this->systemConfigService->get('EmcgnGewerbeschein.config.required');
  111.         /* KundengruppenID des Registrierungsformulars auslesen */
  112.         $customerGroupId $event->getPage()->getGroup()->getId();
  113.         /* Prüft, ob Kundengruppe mit Kundengruppe(n) aus PluginConfig übereinstimmt */
  114.         $enableFormField $this->checkCustomerGroup($customerGroupId);
  115.         $emcgnTlInfo = new ArrayEntity();
  116.         $emcgnTlInfo->set('isEnabled'$enableFormField);
  117.         $emcgnTlInfo->set('isRequired'$isRequired);
  118.         $event->getPage()->addExtension('emcgnTradeLicense'$emcgnTlInfo);
  119.     }
  120.     /**
  121.      * Check plugin config, show/hide input field in standard register form
  122.      * @param PageLoadedEvent $event
  123.      */
  124.     public function loginEvent(PageLoadedEvent $event){
  125.         /* Plugin Config auslesen */
  126.         $isRequired $this->systemConfigService->get('EmcgnGewerbeschein.config.required');
  127.         /* KundengruppenID des Registrierungsformulars auslesen */
  128.         $customerGroupId $event->getSalesChannelContext()->getCurrentCustomerGroup()->getId();
  129.         /* Prüft, ob Kundengruppe mit Kundengruppe(n) aus PluginConfig übereinstimmt */
  130.         $enableFormField $this->checkCustomerGroup($customerGroupId);
  131.         $emcgnTlInfo = new ArrayEntity();
  132.         $emcgnTlInfo->set('isEnabled'$enableFormField);
  133.         $emcgnTlInfo->set('isRequired'$isRequired);
  134.         $event->getPage()->addExtension('emcgnTradeLicense'$emcgnTlInfo);
  135.     }
  136.     /**
  137.      * Check if plugin config contains given customer group
  138.      * @param string $customerGroupId
  139.      * @return boolean
  140.      */
  141.     private function checkCustomerGroup(string $customerGroupId){
  142.         /* Plugin Config auslesen */
  143.         $selectedCustomerGroups $this->systemConfigService->get('EmcgnGewerbeschein.config.customerGroups');
  144.         /* Wenn ausgewählte Kundengruppe(n) mit Kundengruppe aus Registrierungsformular übereinstimmt.. */
  145.         if(!empty($selectedCustomerGroups)) {
  146.             foreach ($selectedCustomerGroups as $group) {
  147.                 if ($group == $customerGroupId) {
  148.                     return true;
  149.                 }
  150.             }
  151.             return false;
  152.         }
  153.         return false;
  154.     }
  155. }