custom/static-plugins/checkout/src/Subscriber/CheckoutSubscriber.php line 48

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\Checkout\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Core\System\CustomField\Aggregate\CustomFieldSet\CustomFieldSetEntity;
  8. use Shopware\Core\System\CustomField\CustomFieldEntity;
  9. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Wexo\Checkout\WexoCheckout;
  12. /**
  13.  * Class CheckoutSubscriber
  14.  * @package Wexo\Checkout\Subscriber
  15.  */
  16. class CheckoutSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var EntityRepositoryInterface
  20.      */
  21.     protected $customFieldSetRepository;
  22.     /**
  23.      * CheckoutSubscriber constructor.
  24.      * @param EntityRepositoryInterface $customFieldSetRepository
  25.      */
  26.     public function __construct(EntityRepositoryInterface $customFieldSetRepository)
  27.     {
  28.         $this->customFieldSetRepository $customFieldSetRepository;
  29.     }
  30.     /**
  31.      * @return string[]
  32.      */
  33.     public static function getSubscribedEvents()
  34.     {
  35.         return [
  36.             CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirmPage'
  37.         ];
  38.     }
  39.     /**
  40.      * @param CheckoutConfirmPageLoadedEvent $event
  41.      */
  42.     public function onCheckoutConfirmPage(CheckoutConfirmPageLoadedEvent $event)
  43.     {
  44.         $salesChannelId $event->getSalesChannelContext()->getSalesChannel()->getId();
  45.         $salesChannelField WexoCheckout::CHECKOUT_ADDITIONAL_FIELDS
  46.             '_' $salesChannelId;
  47.         // TODO: Make a class to handle checkout_additional_fields instead.
  48.         $context $event->getContext();
  49.         foreach ([WexoCheckout::CHECKOUT_ADDITIONAL_FIELDS$salesChannelField] as $field) {
  50.             $criteria = new Criteria();
  51.             $criteria->addFilter(
  52.                 new EqualsFilter('name'$field)
  53.             );
  54.             $criteria->addAssociation('customFields');
  55.             /** @var CustomFieldSetEntity|null $checkoutAdditionalFields */
  56.             $checkoutAdditionalFields $this->customFieldSetRepository->search($criteria$context)->first();
  57.             if ($checkoutAdditionalFields) {
  58.                 $customFields $checkoutAdditionalFields->getCustomFields();
  59.                 if ($customFields->count()) {
  60.                     $customFields->sort(function ($a$b) {
  61.                         return $a->getConfig()['customFieldPosition'] - $b->getConfig()['customFieldPosition'];
  62.                     });
  63.                     $event->getPage()->addExtension(
  64.                         $field,
  65.                         $customFields
  66.                     );
  67.                 }
  68.             }
  69.         }
  70.     }
  71. }