custom/plugins/BssCheckoutCustomField/src/Subscriber/OrderLoadedSubscriber.php line 68

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Bss\CheckoutCustomField\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\System\SystemConfig\SystemConfigService;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  11. class OrderLoadedSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var EntityRepositoryInterface
  15.      */
  16.     protected $customFieldRepository;
  17.     /**
  18.      * @var EntityRepositoryInterface
  19.      */
  20.     protected $customFieldSetRepository;
  21.     /**
  22.      * @var EntityRepositoryInterface
  23.      */
  24.     protected $customFieldSetRelationRepository;
  25.     /**
  26.      * @var SystemConfigService
  27.      */
  28.     protected $systemConfig;
  29.     /**
  30.      * @param EntityRepositoryInterface $customFieldRepository
  31.      * @param EntityRepositoryInterface $customFieldSetRepository
  32.      * @param EntityRepositoryInterface $customFieldSetRelationRepository
  33.      * @param SystemConfigService $systemConfig
  34.      */
  35.     public function __construct(
  36.         SystemConfigService $systemConfig,
  37.         EntityRepositoryInterface $customFieldRepository,
  38.         EntityRepositoryInterface $customFieldSetRepository,
  39.         EntityRepositoryInterface $customFieldSetRelationRepository
  40.     )
  41.     {
  42.         $this->systemConfig $systemConfig;
  43.         $this->customFieldRepository $customFieldRepository;
  44.         $this->customFieldSetRepository $customFieldSetRepository;
  45.         $this->customFieldSetRelationRepository $customFieldSetRelationRepository;
  46.     }
  47.     /**
  48.      * @return array
  49.      */
  50.     public static function getSubscribedEvents(): array
  51.     {
  52.         return [
  53.             CheckoutConfirmPageLoadedEvent::class => 'onOrderLoaded'
  54.         ];
  55.     }
  56.     /**
  57.      * @return void
  58.      */
  59.     public function onOrderLoaded(CheckoutConfirmPageLoadedEvent $event): void
  60.     {
  61.         if ($this->systemConfig->get('BssCheckoutCustomField.config.active')) {
  62.             $request $event->getRequest();
  63.             $criteria = new Criteria();
  64.             $criteria->addFilter(new EqualsFilter('entityName''checkout_page'));
  65.             $customFieldSets $this->customFieldSetRelationRepository->search($criteria$event->getContext())->getEntities();
  66.             $ids = array();
  67.             foreach ($customFieldSets as $key => $customFieldSet) {
  68.                 $ids[] = $customFieldSet->getCustomFieldSetId();
  69.             }
  70.             $criteria = new Criteria();
  71.             $criteria->addFilter(new EqualsAnyFilter('id'$ids));
  72.             $criteria->addSorting(new FieldSorting('position'FieldSorting::ASCENDING));
  73.             $customFieldSets2 $this->customFieldSetRepository->search($criteria$event->getContext())->getEntities();
  74.             $sets = [];
  75.             $customerGroupShow null;
  76.             $currentCustomerGoup $event->getSalesChannelContext()->getCurrentCustomerGroup()->getId();
  77.             foreach ($customFieldSets2->getElements() as $key => $cus) {
  78.                 if(!isset($cus->getConfig()['bssCustomerGroup']) || empty($cus->getConfig()['bssCustomerGroup']) || in_array($currentCustomerGoup,$cus->getConfig()['bssCustomerGroup'])) {
  79.                     $criteria = new Criteria();
  80.                     $criteria->addFilter(new EqualsFilter('customFieldSetId'$cus->getId()));
  81.                     $customFields $this->customFieldRepository->search($criteria$event->getContext())->getEntities();
  82.                     $elements $customFields->getElements();
  83.                     usort($elements, function($a$b) {
  84.                         return $a->getConfig()['customFieldPosition'] > $b->getConfig()['customFieldPosition'];
  85.                     });
  86.                     $sets[$key]['name'] = $cus->getName();
  87.                     $sets[$key]['config'] = $cus->getConfig();
  88.                     $sets[$key]['active'] = $cus->active;
  89.                     $sets[$key]['customFields'] = $elements;
  90.                     $customerGroupShow true;
  91.                 }
  92.             }
  93.             $request->request->set('showBssCustomField'$customerGroupShow count($customFieldSets) : 0);
  94.             $request->request->set('bssCustomField'$sets);
  95.         }
  96.     }
  97. }