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

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