<?php declare(strict_types=1);
/*
* (c) shopware AG <info@shopware.com>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Swag\PayPal\Storefront\Data;
use Shopware\Storefront\Pagelet\Footer\FooterPageletLoadedEvent;
use Swag\PayPal\Setting\Exception\PayPalSettingsInvalidException;
use Swag\PayPal\Setting\Service\SettingsValidationServiceInterface;
use Swag\PayPal\Storefront\Data\Service\FundingEligibilityDataService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @internal
*/
class FundingSubscriber implements EventSubscriberInterface
{
public const FUNDING_ELIGIBILITY_EXTENSION = 'swagPayPalFundingEligibility';
private FundingEligibilityDataService $fundingEligibilityDataService;
private SettingsValidationServiceInterface $settingsValidationService;
public function __construct(
SettingsValidationServiceInterface $settingsValidationService,
FundingEligibilityDataService $fundingEligibilityDataService
) {
$this->settingsValidationService = $settingsValidationService;
$this->fundingEligibilityDataService = $fundingEligibilityDataService;
}
public static function getSubscribedEvents(): array
{
return [
FooterPageletLoadedEvent::class => 'addFundingAvailabilityData',
];
}
public function addFundingAvailabilityData(FooterPageletLoadedEvent $event): void
{
try {
$this->settingsValidationService->validate($event->getSalesChannelContext()->getSalesChannelId());
} catch (PayPalSettingsInvalidException $e) {
return;
}
$data = $this->fundingEligibilityDataService->buildData($event->getSalesChannelContext());
if ($data === null) {
return;
}
$event->getPagelet()->addExtension(self::FUNDING_ELIGIBILITY_EXTENSION, $data);
}
}