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

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.     private RequestParameterFactory $requestParameterFactory;
  22.     private EntityRepositoryInterface $languageRepository;
  23.     private AbstractCardRoute $cardRoute;
  24.     public function __construct(
  25.         RequestParameterFactory $requestParameterFactory,
  26.         EntityRepositoryInterface $languageRepository,
  27.         AbstractCardRoute $cardRoute
  28.     ) {
  29.         $this->requestParameterFactory $requestParameterFactory;
  30.         $this->languageRepository $languageRepository;
  31.         $this->cardRoute $cardRoute;
  32.     }
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return [
  36.             CheckoutConfirmPageLoadedEvent::class => 'addPayonePageData',
  37.             AccountEditOrderPageLoadedEvent::class => 'addPayonePageData',
  38.         ];
  39.     }
  40.     public function addPayonePageData(PageLoadedEvent $event): void
  41.     {
  42.         $page $event->getPage();
  43.         $context $event->getSalesChannelContext();
  44.         if ($context->getPaymentMethod()->getId() !== PayoneCreditCard::UUID) {
  45.             return;
  46.         }
  47.         $cardRequest $this->requestParameterFactory->getRequestParameter(
  48.             new CreditCardCheckStruct(
  49.                 $event->getSalesChannelContext(),
  50.                 PayoneCreditCardPaymentHandler::class
  51.             )
  52.         );
  53.         if ($context->getCustomer() !== null) {
  54.             $savedCards $this->cardRoute->load($context)->getSearchResult();
  55.         }
  56.         $language $this->getCustomerLanguage($context->getContext());
  57.         if ($page->hasExtension(CheckoutCartPaymentData::EXTENSION_NAME)) {
  58.             $payoneData $page->getExtension(CheckoutCartPaymentData::EXTENSION_NAME);
  59.         } else {
  60.             $payoneData = new CheckoutConfirmPaymentData();
  61.         }
  62.         if ($payoneData !== null) {
  63.             $payoneData->assign([
  64.                 'cardRequest' => $cardRequest,
  65.                 'language' => $language,
  66.                 'savedCards' => !empty($savedCards) ? $savedCards null,
  67.             ]);
  68.         }
  69.         $page->addExtension(CheckoutConfirmPaymentData::EXTENSION_NAME$payoneData);
  70.     }
  71.     private function getCustomerLanguage(Context $context): string
  72.     {
  73.         $languages $context->getLanguageId();
  74.         $criteria = new Criteria([$languages]);
  75.         $criteria->addAssociation('locale');
  76.         /** @var LanguageEntity|null $language */
  77.         $language $this->languageRepository->search($criteria$context)->first();
  78.         if ($language === null || $language->getLocale() === null) {
  79.             return 'en';
  80.         }
  81.         return substr($language->getLocale()->getCode(), 02);
  82.     }
  83. }