* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\PrestashopCheckout\FundingSource; use PrestaShop\Module\PrestashopCheckout\PayPal\PayPalConfiguration; use PrestaShop\Module\PrestashopCheckout\Repository\PaymentTokenRepository; class FundingSourceProvider { /** * @var FundingSourceCollection */ private $collection; /** * @var FundingSourcePresenter */ private $presenter; /** * @var PaymentTokenRepository */ private $paymentTokenRepository; /** * @var PayPalConfiguration */ private $payPalConfiguration; /** * @param FundingSourceCollectionBuilder $fundingSourceCollectionBuilder * @param FundingSourcePresenter $presenter * @param PaymentTokenRepository $paymentTokenRepository * @param PayPalConfiguration $payPalConfiguration */ public function __construct( FundingSourceCollectionBuilder $fundingSourceCollectionBuilder, FundingSourcePresenter $presenter, PaymentTokenRepository $paymentTokenRepository, PayPalConfiguration $payPalConfiguration ) { $this->collection = new FundingSourceCollection($fundingSourceCollectionBuilder->create()); $this->presenter = $presenter; $this->paymentTokenRepository = $paymentTokenRepository; $this->payPalConfiguration = $payPalConfiguration; } /** * Get all the funding sources * * @param bool $isAdmin * * @return FundingSource[] */ public function getAll($isAdmin = false) { $fundingSources = []; $collection = $this->collection->sortByPosition(); if (false === $isAdmin) { $collection = $collection->filterEligibility(); } foreach ($collection->get() as $fundingSource) { $fundingSources[] = $this->presenter->present($fundingSource, $isAdmin); } return $fundingSources; } /** * @param int $customerId * * @return FundingSource[] * * @throws \PrestaShopDatabaseException */ public function getSavedTokens($customerId) { if ((int) $customerId && $this->payPalConfiguration->isVaultingEnabled()) { return array_map(function ($paymentToken) { return $this->presenter->presentPaymentToken($paymentToken); }, $this->paymentTokenRepository->findByPrestaShopCustomerId((int) $customerId, true, $this->payPalConfiguration->getMerchantId())); } return []; } }