Skip to content
This repository was archived by the owner on Apr 29, 2019. It is now read-only.

Commit ce4ea34

Browse files
author
Magento CICD
authored
merge magento/2.3-develop into magento-obsessive-owls/cms-team-1-delivery
2 parents 54005c2 + 0a24e12 commit ce4ea34

File tree

201 files changed

+4624
-1449
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

201 files changed

+4624
-1449
lines changed

app/code/Magento/Backend/view/adminhtml/web/template/dynamic-rows/grid.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
-->
77

8-
<div class="admin__field-complex" if="element.addButton">
8+
<div class="admin__field-complex" if="$data.addButton">
99
<div class="admin__field-complex-title">
1010
<span class="label" translate="'User Agent Rules'"></span>
1111
</div>
@@ -27,10 +27,10 @@
2727
<div class="admin__field admin__field-wide"
2828
visible="visible"
2929
disabled="disabled"
30-
css="element.setClasses(element)"
30+
css="$data.setClasses($data)"
3131
attr="'data-index': index">
32-
<label if="element.label" class="admin__field-label" attr="for: element.uid">
33-
<span translate="element.label"/>
32+
<label if="$data.label" class="admin__field-label" attr="for: $data.uid">
33+
<span translate="$data.label"/>
3434
</label>
3535

3636
<div class="admin__field-control" data-role="grid-wrapper">

app/code/Magento/Braintree/Block/Form.php

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Magento\Braintree\Gateway\Config\Config as GatewayConfig;
1010
use Magento\Braintree\Model\Adminhtml\Source\CcType;
1111
use Magento\Braintree\Model\Ui\ConfigProvider;
12-
use Magento\Framework\App\ObjectManager;
1312
use Magento\Framework\View\Element\Template\Context;
1413
use Magento\Payment\Block\Form\Cc;
1514
use Magento\Payment\Helper\Data;
@@ -21,7 +20,6 @@
2120
*/
2221
class Form extends Cc
2322
{
24-
2523
/**
2624
* @var Quote
2725
*/
@@ -48,6 +46,7 @@ class Form extends Cc
4846
* @param Quote $sessionQuote
4947
* @param GatewayConfig $gatewayConfig
5048
* @param CcType $ccType
49+
* @param Data $paymentDataHelper
5150
* @param array $data
5251
*/
5352
public function __construct(
@@ -56,12 +55,14 @@ public function __construct(
5655
Quote $sessionQuote,
5756
GatewayConfig $gatewayConfig,
5857
CcType $ccType,
58+
Data $paymentDataHelper,
5959
array $data = []
6060
) {
6161
parent::__construct($context, $paymentConfig, $data);
6262
$this->sessionQuote = $sessionQuote;
6363
$this->gatewayConfig = $gatewayConfig;
6464
$this->ccType = $ccType;
65+
$this->paymentDataHelper = $paymentDataHelper;
6566
}
6667

6768
/**
@@ -81,7 +82,7 @@ public function getCcAvailableTypes()
8182
*/
8283
public function useCvv()
8384
{
84-
return $this->gatewayConfig->isCvvEnabled();
85+
return $this->gatewayConfig->isCvvEnabled($this->sessionQuote->getStoreId());
8586
}
8687

8788
/**
@@ -90,9 +91,8 @@ public function useCvv()
9091
*/
9192
public function isVaultEnabled()
9293
{
93-
$storeId = $this->_storeManager->getStore()->getId();
9494
$vaultPayment = $this->getVaultPayment();
95-
return $vaultPayment->isActive($storeId);
95+
return $vaultPayment->isActive($this->sessionQuote->getStoreId());
9696
}
9797

9898
/**
@@ -102,7 +102,10 @@ public function isVaultEnabled()
102102
private function getConfiguredCardTypes()
103103
{
104104
$types = $this->ccType->getCcTypeLabelMap();
105-
$configCardTypes = array_fill_keys($this->gatewayConfig->getAvailableCardTypes(), '');
105+
$configCardTypes = array_fill_keys(
106+
$this->gatewayConfig->getAvailableCardTypes($this->sessionQuote->getStoreId()),
107+
''
108+
);
106109

107110
return array_intersect_key($types, $configCardTypes);
108111
}
@@ -116,7 +119,11 @@ private function getConfiguredCardTypes()
116119
private function filterCardTypesForCountry(array $configCardTypes, $countryId)
117120
{
118121
$filtered = $configCardTypes;
119-
$countryCardTypes = $this->gatewayConfig->getCountryAvailableCardTypes($countryId);
122+
$countryCardTypes = $this->gatewayConfig->getCountryAvailableCardTypes(
123+
$countryId,
124+
$this->sessionQuote->getStoreId()
125+
);
126+
120127
// filter card types only if specific card types are set for country
121128
if (!empty($countryCardTypes)) {
122129
$availableTypes = array_fill_keys($countryCardTypes, '');
@@ -131,19 +138,6 @@ private function filterCardTypesForCountry(array $configCardTypes, $countryId)
131138
*/
132139
private function getVaultPayment()
133140
{
134-
return $this->getPaymentDataHelper()->getMethodInstance(ConfigProvider::CC_VAULT_CODE);
135-
}
136-
137-
/**
138-
* Get payment data helper instance
139-
* @return Data
140-
* @deprecated 100.1.0
141-
*/
142-
private function getPaymentDataHelper()
143-
{
144-
if ($this->paymentDataHelper === null) {
145-
$this->paymentDataHelper = ObjectManager::getInstance()->get(Data::class);
146-
}
147-
return $this->paymentDataHelper;
141+
return $this->paymentDataHelper->getMethodInstance(ConfigProvider::CC_VAULT_CODE);
148142
}
149143
}

app/code/Magento/Braintree/Block/Payment.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public function getPaymentConfig()
4848
$payment = $this->config->getConfig()['payment'];
4949
$config = $payment[$this->getCode()];
5050
$config['code'] = $this->getCode();
51+
$config['clientTokenUrl'] = $this->_urlBuilder->getUrl(
52+
'braintree/payment/getClientToken',
53+
['_secure' => true]
54+
);
5155
return json_encode($config, JSON_UNESCAPED_SLASHES);
5256
}
5357

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Braintree\Controller\Adminhtml\Payment;
7+
8+
use Magento\Backend\App\Action;
9+
use Magento\Backend\App\Action\Context;
10+
use Magento\Backend\Model\Session\Quote;
11+
use Magento\Braintree\Gateway\Config\Config;
12+
use Magento\Braintree\Gateway\Request\PaymentDataBuilder;
13+
use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory;
14+
use Magento\Framework\Controller\ResultFactory;
15+
16+
/**
17+
* Retrieves client token.
18+
*/
19+
class GetClientToken extends Action
20+
{
21+
const ADMIN_RESOURCE = 'Magento_Braintree::get_client_token';
22+
23+
/**
24+
* @var Config
25+
*/
26+
private $config;
27+
28+
/**
29+
* @var BraintreeAdapterFactory
30+
*/
31+
private $adapterFactory;
32+
33+
/**
34+
* @var Quote
35+
*/
36+
private $quoteSession;
37+
38+
/**
39+
* @param Context $context
40+
* @param Config $config
41+
* @param BraintreeAdapterFactory $adapterFactory
42+
* @param Quote $quoteSession
43+
*/
44+
public function __construct(
45+
Context $context,
46+
Config $config,
47+
BraintreeAdapterFactory $adapterFactory,
48+
Quote $quoteSession
49+
) {
50+
parent::__construct($context);
51+
$this->config = $config;
52+
$this->adapterFactory = $adapterFactory;
53+
$this->quoteSession = $quoteSession;
54+
}
55+
56+
/**
57+
* @inheritdoc
58+
*/
59+
public function execute()
60+
{
61+
$params = [];
62+
$response = $this->resultFactory->create(ResultFactory::TYPE_JSON);
63+
64+
$storeId = $this->quoteSession->getStoreId();
65+
$merchantAccountId = $this->config->getMerchantAccountId($storeId);
66+
if (!empty($merchantAccountId)) {
67+
$params[PaymentDataBuilder::MERCHANT_ACCOUNT_ID] = $merchantAccountId;
68+
}
69+
70+
$clientToken = $this->adapterFactory->create($storeId)
71+
->generate($params);
72+
$response->setData(['clientToken' => $clientToken]);
73+
74+
return $response;
75+
}
76+
}

app/code/Magento/Braintree/Controller/Payment/GetNonce.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ public function execute()
6262
try {
6363
$publicHash = $this->getRequest()->getParam('public_hash');
6464
$customerId = $this->session->getCustomerId();
65-
$result = $this->command->execute(['public_hash' => $publicHash, 'customer_id' => $customerId])->get();
65+
$result = $this->command->execute(
66+
['public_hash' => $publicHash, 'customer_id' => $customerId, 'store_id' => $this->session->getStoreId()]
67+
)
68+
->get();
6669
$response->setData(['paymentMethodNonce' => $result['paymentMethodNonce']]);
6770
} catch (\Exception $e) {
6871
$this->logger->critical($e);

app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66
namespace Magento\Braintree\Gateway\Command;
77

88
use Braintree\Transaction;
9-
use Magento\Braintree\Model\Adapter\BraintreeAdapter;
9+
use Magento\Braintree\Gateway\SubjectReader;
10+
use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory;
1011
use Magento\Braintree\Model\Adapter\BraintreeSearchAdapter;
1112
use Magento\Framework\Api\FilterBuilder;
1213
use Magento\Framework\Api\SearchCriteriaBuilder;
13-
use Magento\Payment\Gateway\Command;
1414
use Magento\Payment\Gateway\Command\CommandPoolInterface;
1515
use Magento\Payment\Gateway\CommandInterface;
16+
use Magento\Payment\Gateway\Data\OrderAdapterInterface;
1617
use Magento\Payment\Gateway\Helper\ContextHelper;
17-
use Magento\Braintree\Gateway\Helper\SubjectReader;
1818
use Magento\Sales\Api\Data\OrderPaymentInterface;
19-
use Magento\Sales\Api\TransactionRepositoryInterface;
2019
use Magento\Sales\Api\Data\TransactionInterface;
20+
use Magento\Sales\Api\TransactionRepositoryInterface;
21+
use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
2122

2223
/**
2324
* Class CaptureStrategyCommand
@@ -66,9 +67,9 @@ class CaptureStrategyCommand implements CommandInterface
6667
private $subjectReader;
6768

6869
/**
69-
* @var BraintreeAdapter
70+
* @var BraintreeAdapterFactory
7071
*/
71-
private $braintreeAdapter;
72+
private $braintreeAdapterFactory;
7273

7374
/**
7475
* @var BraintreeSearchAdapter
@@ -83,7 +84,7 @@ class CaptureStrategyCommand implements CommandInterface
8384
* @param FilterBuilder $filterBuilder
8485
* @param SearchCriteriaBuilder $searchCriteriaBuilder
8586
* @param SubjectReader $subjectReader
86-
* @param BraintreeAdapter $braintreeAdapter
87+
* @param BraintreeAdapterFactory $braintreeAdapterFactory,
8788
* @param BraintreeSearchAdapter $braintreeSearchAdapter
8889
*/
8990
public function __construct(
@@ -92,15 +93,15 @@ public function __construct(
9293
FilterBuilder $filterBuilder,
9394
SearchCriteriaBuilder $searchCriteriaBuilder,
9495
SubjectReader $subjectReader,
95-
BraintreeAdapter $braintreeAdapter,
96+
BraintreeAdapterFactory $braintreeAdapterFactory,
9697
BraintreeSearchAdapter $braintreeSearchAdapter
9798
) {
9899
$this->commandPool = $commandPool;
99100
$this->transactionRepository = $repository;
100101
$this->filterBuilder = $filterBuilder;
101102
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
102103
$this->subjectReader = $subjectReader;
103-
$this->braintreeAdapter = $braintreeAdapter;
104+
$this->braintreeAdapterFactory = $braintreeAdapterFactory;
104105
$this->braintreeSearchAdapter = $braintreeSearchAdapter;
105106
}
106107

@@ -112,29 +113,29 @@ public function execute(array $commandSubject)
112113
/** @var \Magento\Payment\Gateway\Data\PaymentDataObjectInterface $paymentDO */
113114
$paymentDO = $this->subjectReader->readPayment($commandSubject);
114115

115-
/** @var \Magento\Sales\Api\Data\OrderPaymentInterface $paymentInfo */
116-
$paymentInfo = $paymentDO->getPayment();
117-
ContextHelper::assertOrderPayment($paymentInfo);
118-
119-
$command = $this->getCommand($paymentInfo);
116+
$command = $this->getCommand($paymentDO);
120117
$this->commandPool->get($command)->execute($commandSubject);
121118
}
122119

123120
/**
124-
* Get execution command name
125-
* @param OrderPaymentInterface $payment
121+
* Get execution command name.
122+
*
123+
* @param PaymentDataObjectInterface $paymentDO
126124
* @return string
127125
*/
128-
private function getCommand(OrderPaymentInterface $payment)
126+
private function getCommand(PaymentDataObjectInterface $paymentDO)
129127
{
130-
// if auth transaction is not exists execute authorize&capture command
128+
$payment = $paymentDO->getPayment();
129+
ContextHelper::assertOrderPayment($payment);
130+
131+
// if auth transaction does not exist then execute authorize&capture command
131132
$existsCapture = $this->isExistsCaptureTransaction($payment);
132133
if (!$payment->getAuthorizationTransaction() && !$existsCapture) {
133134
return self::SALE;
134135
}
135136

136137
// do capture for authorization transaction
137-
if (!$existsCapture && !$this->isExpiredAuthorization($payment)) {
138+
if (!$existsCapture && !$this->isExpiredAuthorization($payment, $paymentDO->getOrder())) {
138139
return self::CAPTURE;
139140
}
140141

@@ -143,12 +144,16 @@ private function getCommand(OrderPaymentInterface $payment)
143144
}
144145

145146
/**
147+
* Checks if authorization transaction does not expired yet.
148+
*
146149
* @param OrderPaymentInterface $payment
147-
* @return boolean
150+
* @param OrderAdapterInterface $orderAdapter
151+
* @return bool
148152
*/
149-
private function isExpiredAuthorization(OrderPaymentInterface $payment)
153+
private function isExpiredAuthorization(OrderPaymentInterface $payment, OrderAdapterInterface $orderAdapter)
150154
{
151-
$collection = $this->braintreeAdapter->search(
155+
$adapter = $this->braintreeAdapterFactory->create($orderAdapter->getStoreId());
156+
$collection = $adapter->search(
152157
[
153158
$this->braintreeSearchAdapter->id()->is($payment->getLastTransId()),
154159
$this->braintreeSearchAdapter->status()->is(Transaction::AUTHORIZATION_EXPIRED)

0 commit comments

Comments
 (0)