custom/plugins/MolliePayments/src/Subscriber/AccountPaymentMethodPageSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Kiener\MolliePayments\Subscriber;
  4. use Kiener\MolliePayments\Service\MandateServiceInterface;
  5. use Kiener\MolliePayments\Service\SettingsService;
  6. use Kiener\MolliePayments\Setting\MollieSettingStruct;
  7. use Shopware\Core\Checkout\Customer\CustomerEntity;
  8. use Shopware\Storefront\Page\Account\PaymentMethod\AccountPaymentMethodPageLoadedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class AccountPaymentMethodPageSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var SettingsService
  14.      */
  15.     private $settingsService;
  16.     /**
  17.      * @var MollieSettingStruct
  18.      */
  19.     private $settings;
  20.     /**
  21.      * @var MandateServiceInterface
  22.      */
  23.     private $mandateService;
  24.     public function __construct(
  25.         SettingsService $settingsService,
  26.         MandateServiceInterface $mandateService
  27.     ) {
  28.         $this->settingsService $settingsService;
  29.         $this->mandateService $mandateService;
  30.     }
  31.     /**
  32.      * @return array<mixed>
  33.      */
  34.     public static function getSubscribedEvents(): array
  35.     {
  36.         return [
  37.             AccountPaymentMethodPageLoadedEvent::class => ['addDataToPage'10],
  38.         ];
  39.     }
  40.     public function addDataToPage(AccountPaymentMethodPageLoadedEvent $args): void
  41.     {
  42.         // load our settings for the
  43.         // current request
  44.         $this->settings $this->settingsService->getSettings($args->getSalesChannelContext()->getSalesChannel()->getId());
  45.         $this->addMollieSingleClickPaymentDataToPage($args);
  46.     }
  47.     /**
  48.      * Adds the components variable to the storefront.
  49.      */
  50.     private function addMollieSingleClickPaymentDataToPage(AccountPaymentMethodPageLoadedEvent $args): void
  51.     {
  52.         $args->getPage()->assign([
  53.             'enable_one_click_payments' => $this->settings->isOneClickPaymentsEnabled(),
  54.         ]);
  55.         if (! $this->settings->isOneClickPaymentsEnabled()) {
  56.             return;
  57.         }
  58.         try {
  59.             $salesChannelContext $args->getSalesChannelContext();
  60.             $loggedInCustomer $salesChannelContext->getCustomer();
  61.             if (! $loggedInCustomer instanceof CustomerEntity) {
  62.                 return;
  63.             }
  64.             $mandates $this->mandateService->getCreditCardMandatesByCustomerId($loggedInCustomer->getId(), $salesChannelContext);
  65.             $args->getPage()->setExtensions([
  66.                 'MollieCreditCardMandateCollection' => $mandates,
  67.             ]);
  68.         } catch (\Exception $e) {
  69.         }
  70.     }
  71. }