123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Vault\Model\Ui\Adminhtml;
- use Magento\Framework\Api\FilterBuilder;
- use Magento\Framework\Api\SearchCriteriaBuilder;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\Exception\InputException;
- use Magento\Framework\Exception\NoSuchEntityException;
- use Magento\Framework\Intl\DateTimeFactory;
- use Magento\Framework\Session\SessionManagerInterface;
- use Magento\Payment\Helper\Data;
- use Magento\Sales\Api\OrderRepositoryInterface;
- use Magento\Store\Model\StoreManagerInterface;
- use Magento\Vault\Api\Data\PaymentTokenInterface;
- use Magento\Vault\Api\PaymentTokenManagementInterface;
- use Magento\Vault\Api\PaymentTokenRepositoryInterface;
- use Magento\Vault\Model\Ui\TokenUiComponentInterface;
- use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface;
- use Magento\Vault\Model\VaultPaymentInterface;
- /**
- * Class ConfigProvider
- * @api
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- *
- * @api
- * @since 100.1.0
- */
- class TokensConfigProvider
- {
- /**
- * @var PaymentTokenRepositoryInterface
- */
- private $paymentTokenRepository;
- /**
- * @var FilterBuilder
- */
- private $filterBuilder;
- /**
- * @var SearchCriteriaBuilder
- */
- private $searchCriteriaBuilder;
- /**
- * @var SessionManagerInterface
- */
- private $session;
- /**
- * @var StoreManagerInterface
- */
- private $storeManager;
- /**
- * @var TokenUiComponentProviderInterface[]
- */
- private $tokenUiComponentProviders;
- /**
- * @var DateTimeFactory
- */
- private $dateTimeFactory;
- /**
- * @var Data
- */
- private $paymentDataHelper;
- /**
- * @var OrderRepositoryInterface
- */
- private $orderRepository;
- /**
- * @var PaymentTokenManagementInterface
- */
- private $paymentTokenManagement;
- /**
- * Constructor
- *
- * @param SessionManagerInterface $session
- * @param PaymentTokenRepositoryInterface $paymentTokenRepository
- * @param FilterBuilder $filterBuilder
- * @param SearchCriteriaBuilder $searchCriteriaBuilder
- * @param StoreManagerInterface $storeManager
- * @param DateTimeFactory $dateTimeFactory
- * @param TokenUiComponentProviderInterface[] $tokenUiComponentProviders
- */
- public function __construct(
- SessionManagerInterface $session,
- PaymentTokenRepositoryInterface $paymentTokenRepository,
- FilterBuilder $filterBuilder,
- SearchCriteriaBuilder $searchCriteriaBuilder,
- StoreManagerInterface $storeManager,
- DateTimeFactory $dateTimeFactory,
- array $tokenUiComponentProviders = []
- ) {
- $this->paymentTokenRepository = $paymentTokenRepository;
- $this->filterBuilder = $filterBuilder;
- $this->searchCriteriaBuilder = $searchCriteriaBuilder;
- $this->session = $session;
- $this->storeManager = $storeManager;
- $this->tokenUiComponentProviders = $tokenUiComponentProviders;
- $this->dateTimeFactory = $dateTimeFactory;
- }
- /**
- * @param string $vaultPaymentCode
- * @return TokenUiComponentInterface[]
- * @since 100.1.0
- */
- public function getTokensComponents($vaultPaymentCode)
- {
- $result = [];
- $customerId = $this->session->getCustomerId();
- $vaultPayment = $this->getVaultPayment($vaultPaymentCode);
- if ($vaultPayment === null) {
- return $result;
- }
- $vaultProviderCode = $vaultPayment->getProviderCode();
- $componentProvider = $this->getComponentProvider($vaultProviderCode);
- if ($componentProvider === null) {
- return $result;
- }
- if ($customerId) {
- $this->searchCriteriaBuilder->addFilters(
- [
- $this->filterBuilder->setField(PaymentTokenInterface::CUSTOMER_ID)
- ->setValue($customerId)
- ->create(),
- ]
- );
- } else {
- try {
- $this->searchCriteriaBuilder->addFilters(
- [
- $this->filterBuilder->setField(PaymentTokenInterface::ENTITY_ID)
- ->setValue($this->getPaymentTokenEntityId())
- ->create(),
- ]
- );
- } catch (InputException $e) {
- return $result;
- } catch (NoSuchEntityException $e) {
- return $result;
- }
- }
- $this->searchCriteriaBuilder->addFilters(
- [
- $this->filterBuilder->setField(PaymentTokenInterface::PAYMENT_METHOD_CODE)
- ->setValue($vaultProviderCode)
- ->create(),
- ]
- );
- $this->searchCriteriaBuilder->addFilters(
- [
- $this->filterBuilder->setField(PaymentTokenInterface::IS_ACTIVE)
- ->setValue(1)
- ->create(),
- ]
- );
- $this->searchCriteriaBuilder->addFilters(
- [
- $this->filterBuilder->setField(PaymentTokenInterface::EXPIRES_AT)
- ->setConditionType('gt')
- ->setValue(
- $this->dateTimeFactory->create(
- 'now',
- new \DateTimeZone('UTC')
- )->format('Y-m-d 00:00:00')
- )
- ->create(),
- ]
- );
- $searchCriteria = $this->searchCriteriaBuilder->create();
- foreach ($this->paymentTokenRepository->getList($searchCriteria)->getItems() as $token) {
- $result[] = $componentProvider->getComponentForToken($token);
- }
- return $result;
- }
- /**
- * @param string $vaultProviderCode
- * @return TokenUiComponentProviderInterface|null
- */
- private function getComponentProvider($vaultProviderCode)
- {
- $componentProvider = isset($this->tokenUiComponentProviders[$vaultProviderCode])
- ? $this->tokenUiComponentProviders[$vaultProviderCode]
- : null;
- return $componentProvider instanceof TokenUiComponentProviderInterface
- ? $componentProvider
- : null;
- }
- /**
- * Get active vault payment by code
- * @param string $vaultPaymentCode
- * @return VaultPaymentInterface|null
- */
- private function getVaultPayment($vaultPaymentCode)
- {
- $storeId = $this->storeManager->getStore()->getId();
- $vaultPayment = $this->getPaymentDataHelper()->getMethodInstance($vaultPaymentCode);
- return $vaultPayment->isActive($storeId) ? $vaultPayment : null;
- }
- /**
- * Returns payment token entity id by order payment id
- * @return int|null
- */
- private function getPaymentTokenEntityId()
- {
- $paymentToken = $this->getPaymentTokenManagement()->getByPaymentId($this->getOrderPaymentEntityId());
- if ($paymentToken === null) {
- throw new NoSuchEntityException(__('No payment tokens are available for the specified order payment.'));
- }
- return $paymentToken->getEntityId();
- }
- /**
- * Returns order payment entity id
- * Using 'getReordered' for Reorder action
- * Using 'getOrder' for Edit action
- * @return int
- */
- private function getOrderPaymentEntityId()
- {
- $orderId = $this->session->getReordered()
- ?: $this->session->getOrder()->getEntityId();
- $order = $this->getOrderRepository()->get($orderId);
- return (int) $order->getPayment()->getEntityId();
- }
- /**
- * Get payment data helper instance
- * @return Data
- * @deprecated 100.1.0
- */
- private function getPaymentDataHelper()
- {
- if ($this->paymentDataHelper === null) {
- $this->paymentDataHelper = ObjectManager::getInstance()->get(Data::class);
- }
- return $this->paymentDataHelper;
- }
- /**
- * Returns order repository instance
- * @return OrderRepositoryInterface
- * @deprecated 100.2.0
- */
- private function getOrderRepository()
- {
- if ($this->orderRepository === null) {
- $this->orderRepository = ObjectManager::getInstance()
- ->get(OrderRepositoryInterface::class);
- }
- return $this->orderRepository;
- }
- /**
- * Returns payment token management instance
- * @return PaymentTokenManagementInterface
- * @deprecated 100.2.0
- */
- private function getPaymentTokenManagement()
- {
- if ($this->paymentTokenManagement === null) {
- $this->paymentTokenManagement = ObjectManager::getInstance()
- ->get(PaymentTokenManagementInterface::class);
- }
- return $this->paymentTokenManagement;
- }
- }
|