Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
TokensConfigProvider.php
Go to the documentation of this file.
1 <?php
8 
25 
35 {
39  private $paymentTokenRepository;
40 
44  private $filterBuilder;
45 
49  private $searchCriteriaBuilder;
50 
54  private $session;
55 
59  private $storeManager;
60 
64  private $tokenUiComponentProviders;
65 
69  private $dateTimeFactory;
70 
74  private $paymentDataHelper;
75 
79  private $orderRepository;
80 
84  private $paymentTokenManagement;
85 
97  public function __construct(
98  SessionManagerInterface $session,
99  PaymentTokenRepositoryInterface $paymentTokenRepository,
100  FilterBuilder $filterBuilder,
101  SearchCriteriaBuilder $searchCriteriaBuilder,
102  StoreManagerInterface $storeManager,
103  DateTimeFactory $dateTimeFactory,
104  array $tokenUiComponentProviders = []
105  ) {
106  $this->paymentTokenRepository = $paymentTokenRepository;
107  $this->filterBuilder = $filterBuilder;
108  $this->searchCriteriaBuilder = $searchCriteriaBuilder;
109  $this->session = $session;
110  $this->storeManager = $storeManager;
111  $this->tokenUiComponentProviders = $tokenUiComponentProviders;
112  $this->dateTimeFactory = $dateTimeFactory;
113  }
114 
120  public function getTokensComponents($vaultPaymentCode)
121  {
122  $result = [];
123 
124  $customerId = $this->session->getCustomerId();
125 
126  $vaultPayment = $this->getVaultPayment($vaultPaymentCode);
127  if ($vaultPayment === null) {
128  return $result;
129  }
130 
131  $vaultProviderCode = $vaultPayment->getProviderCode();
132  $componentProvider = $this->getComponentProvider($vaultProviderCode);
133  if ($componentProvider === null) {
134  return $result;
135  }
136 
137  if ($customerId) {
138  $this->searchCriteriaBuilder->addFilters(
139  [
140  $this->filterBuilder->setField(PaymentTokenInterface::CUSTOMER_ID)
141  ->setValue($customerId)
142  ->create(),
143  ]
144  );
145  } else {
146  try {
147  $this->searchCriteriaBuilder->addFilters(
148  [
149  $this->filterBuilder->setField(PaymentTokenInterface::ENTITY_ID)
150  ->setValue($this->getPaymentTokenEntityId())
151  ->create(),
152  ]
153  );
154  } catch (InputException $e) {
155  return $result;
156  } catch (NoSuchEntityException $e) {
157  return $result;
158  }
159  }
160  $this->searchCriteriaBuilder->addFilters(
161  [
162  $this->filterBuilder->setField(PaymentTokenInterface::PAYMENT_METHOD_CODE)
163  ->setValue($vaultProviderCode)
164  ->create(),
165  ]
166  );
167  $this->searchCriteriaBuilder->addFilters(
168  [
169  $this->filterBuilder->setField(PaymentTokenInterface::IS_ACTIVE)
170  ->setValue(1)
171  ->create(),
172  ]
173  );
174  $this->searchCriteriaBuilder->addFilters(
175  [
176  $this->filterBuilder->setField(PaymentTokenInterface::EXPIRES_AT)
177  ->setConditionType('gt')
178  ->setValue(
179  $this->dateTimeFactory->create(
180  'now',
181  new \DateTimeZone('UTC')
182  )->format('Y-m-d 00:00:00')
183  )
184  ->create(),
185  ]
186  );
187 
188  $searchCriteria = $this->searchCriteriaBuilder->create();
189 
190  foreach ($this->paymentTokenRepository->getList($searchCriteria)->getItems() as $token) {
191  $result[] = $componentProvider->getComponentForToken($token);
192  }
193 
194  return $result;
195  }
196 
201  private function getComponentProvider($vaultProviderCode)
202  {
203  $componentProvider = isset($this->tokenUiComponentProviders[$vaultProviderCode])
204  ? $this->tokenUiComponentProviders[$vaultProviderCode]
205  : null;
206  return $componentProvider instanceof TokenUiComponentProviderInterface
207  ? $componentProvider
208  : null;
209  }
210 
216  private function getVaultPayment($vaultPaymentCode)
217  {
218  $storeId = $this->storeManager->getStore()->getId();
219  $vaultPayment = $this->getPaymentDataHelper()->getMethodInstance($vaultPaymentCode);
220  return $vaultPayment->isActive($storeId) ? $vaultPayment : null;
221  }
222 
227  private function getPaymentTokenEntityId()
228  {
229  $paymentToken = $this->getPaymentTokenManagement()->getByPaymentId($this->getOrderPaymentEntityId());
230  if ($paymentToken === null) {
231  throw new NoSuchEntityException(__('No payment tokens are available for the specified order payment.'));
232  }
233  return $paymentToken->getEntityId();
234  }
235 
242  private function getOrderPaymentEntityId()
243  {
244  $orderId = $this->session->getReordered()
245  ?: $this->session->getOrder()->getEntityId();
246  $order = $this->getOrderRepository()->get($orderId);
247 
248  return (int) $order->getPayment()->getEntityId();
249  }
250 
256  private function getPaymentDataHelper()
257  {
258  if ($this->paymentDataHelper === null) {
259  $this->paymentDataHelper = ObjectManager::getInstance()->get(Data::class);
260  }
261  return $this->paymentDataHelper;
262  }
263 
269  private function getOrderRepository()
270  {
271  if ($this->orderRepository === null) {
272  $this->orderRepository = ObjectManager::getInstance()
273  ->get(OrderRepositoryInterface::class);
274  }
275 
276  return $this->orderRepository;
277  }
278 
284  private function getPaymentTokenManagement()
285  {
286  if ($this->paymentTokenManagement === null) {
287  $this->paymentTokenManagement = ObjectManager::getInstance()
288  ->get(PaymentTokenManagementInterface::class);
289  }
290 
291  return $this->paymentTokenManagement;
292  }
293 }
$order
Definition: order.php:55
$storeManager
__()
Definition: __.php:13
$searchCriteria
$searchCriteriaBuilder
__construct(SessionManagerInterface $session, PaymentTokenRepositoryInterface $paymentTokenRepository, FilterBuilder $filterBuilder, SearchCriteriaBuilder $searchCriteriaBuilder, StoreManagerInterface $storeManager, DateTimeFactory $dateTimeFactory, array $tokenUiComponentProviders=[])