custom/plugins/PayonePayment/src/EventListener/CheckoutConfirmCreditCardEventListener.php line 52

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace PayonePayment\EventListener;
  4. use PayonePayment\PaymentHandler\PayoneCreditCardPaymentHandler;
  5. use PayonePayment\PaymentMethod\PayoneCreditCard;
  6. use PayonePayment\Payone\RequestParameter\RequestParameterFactory;
  7. use PayonePayment\Payone\RequestParameter\Struct\CreditCardCheckStruct;
  8. use PayonePayment\StoreApi\Route\AbstractCardRoute;
  9. use PayonePayment\Storefront\Struct\CheckoutCartPaymentData;
  10. use PayonePayment\Storefront\Struct\CheckoutConfirmPaymentData;
  11. use Shopware\Core\Framework\Context;
  12. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  14. use Shopware\Core\System\Language\LanguageEntity;
  15. use Shopware\Storefront\Page\Account\Order\AccountEditOrderPageLoadedEvent;
  16. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  17. use Shopware\Storefront\Page\PageLoadedEvent;
  18. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  19. class CheckoutConfirmCreditCardEventListener implements EventSubscriberInterface
  20. {
  21.     /** @var RequestParameterFactory */
  22.     private $requestParameterFactory;
  23.     /** @var EntityRepositoryInterface */
  24.     private $languageRepository;
  25.     /** @var AbstractCardRoute */
  26.     private $cardRoute;
  27.     public function __construct(
  28.         RequestParameterFactory $requestParameterFactory,
  29.         EntityRepositoryInterface $languageRepository,
  30.         AbstractCardRoute $cardRoute
  31.     ) {
  32.         $this->requestParameterFactory $requestParameterFactory;
  33.         $this->languageRepository      $languageRepository;
  34.         $this->cardRoute               $cardRoute;
  35.     }
  36.     public static function getSubscribedEvents(): array
  37.     {
  38.         return [
  39.             CheckoutConfirmPageLoadedEvent::class  => 'addPayonePageData',
  40.             AccountEditOrderPageLoadedEvent::class => 'addPayonePageData',
  41.         ];
  42.     }
  43.     public function addPayonePageData(PageLoadedEvent $event): void
  44.     {
  45.         $page    $event->getPage();
  46.         $context $event->getSalesChannelContext();
  47.         if ($context->getPaymentMethod()->getId() !== PayoneCreditCard::UUID) {
  48.             return;
  49.         }
  50.         $cardRequest $this->requestParameterFactory->getRequestParameter(
  51.             new CreditCardCheckStruct(
  52.                 $event->getSalesChannelContext(),
  53.                 PayoneCreditCardPaymentHandler::class
  54.             )
  55.         );
  56.         if (null !== $context->getCustomer()) {
  57.             $savedCards $this->cardRoute->load($context)->getSearchResult();
  58.         }
  59.         $language $this->getCustomerLanguage($context->getContext());
  60.         if ($page->hasExtension(CheckoutCartPaymentData::EXTENSION_NAME)) {
  61.             $payoneData $page->getExtension(CheckoutCartPaymentData::EXTENSION_NAME);
  62.         } else {
  63.             $payoneData = new CheckoutConfirmPaymentData();
  64.         }
  65.         if (null !== $payoneData) {
  66.             $payoneData->assign([
  67.                 'cardRequest' => $cardRequest,
  68.                 'language'    => $language,
  69.                 'savedCards'  => !empty($savedCards) ? $savedCards null,
  70.             ]);
  71.         }
  72.         $page->addExtension(CheckoutConfirmPaymentData::EXTENSION_NAME$payoneData);
  73.     }
  74.     private function getCustomerLanguage(Context $context): string
  75.     {
  76.         $languages $context->getLanguageId();
  77.         $criteria  = new Criteria([$languages]);
  78.         $criteria->addAssociation('locale');
  79.         /** @var null|LanguageEntity $language */
  80.         $language $this->languageRepository->search($criteria$context)->first();
  81.         if (null === $language || null === $language->getLocale()) {
  82.             return 'en';
  83.         }
  84.         return substr($language->getLocale()->getCode(), 02);
  85.     }
  86. }