Skip to content

Commit bfb39b5

Browse files
Merge branch '2.2-develop' into jignesh-baldha-patch1
2 parents 6fcfb88 + 9644572 commit bfb39b5

File tree

322 files changed

+6168
-2632
lines changed

Some content is hidden

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

322 files changed

+6168
-2632
lines changed

.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ language: php
1515
php:
1616
- 7.0
1717
- 7.1
18+
git:
19+
depth: 5
1820
env:
1921
global:
2022
- COMPOSER_BIN_DIR=~/bin
2123
- INTEGRATION_SETS=3
22-
- NODE_JS_VERSION=6
24+
- NODE_JS_VERSION=8
2325
- MAGENTO_HOST_NAME="magento2.travis"
2426
matrix:
2527
- TEST_SUITE=unit

CHANGELOG.md

Lines changed: 456 additions & 0 deletions
Large diffs are not rendered by default.

app/code/Magento/AdminNotification/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"lib-libxml": "*"
1212
},
1313
"type": "magento2-module",
14-
"version": "100.2.1",
14+
"version": "100.2.2",
1515
"license": [
1616
"OSL-3.0",
1717
"AFL-3.0"

app/code/Magento/AdvancedPricingImportExport/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"magento/framework": "101.0.*"
1414
},
1515
"type": "magento2-module",
16-
"version": "100.2.1",
16+
"version": "100.2.2",
1717
"license": [
1818
"OSL-3.0",
1919
"AFL-3.0"

app/code/Magento/Analytics/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"magento/framework": "101.0.*"
1111
},
1212
"type": "magento2-module",
13-
"version": "100.2.0",
13+
"version": "100.2.1",
1414
"license": [
1515
"OSL-3.0",
1616
"AFL-3.0"

app/code/Magento/Authorizenet/Model/Directpost.php

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
*/
66
namespace Magento\Authorizenet\Model;
77

8-
use Magento\Framework\HTTP\ZendClientFactory;
8+
use Magento\Framework\App\ObjectManager;
99
use Magento\Payment\Model\Method\ConfigInterface;
1010
use Magento\Payment\Model\Method\TransparentInterface;
11-
use Magento\Sales\Model\Order\Email\Sender\OrderSender;
1211

1312
/**
1413
* Authorize.net DirectPost payment method model.
@@ -102,7 +101,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
102101
protected $response;
103102

104103
/**
105-
* @var OrderSender
104+
* @var \Magento\Sales\Model\Order\Email\Sender\OrderSender
106105
*/
107106
protected $orderSender;
108107

@@ -123,6 +122,16 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
123122
*/
124123
private $psrLogger;
125124

125+
/**
126+
* @var \Magento\Sales\Api\PaymentFailuresInterface
127+
*/
128+
private $paymentFailures;
129+
130+
/**
131+
* @var \Magento\Sales\Model\Order
132+
*/
133+
private $order;
134+
126135
/**
127136
* @param \Magento\Framework\Model\Context $context
128137
* @param \Magento\Framework\Registry $registry
@@ -141,11 +150,12 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
141150
* @param \Magento\Sales\Model\OrderFactory $orderFactory
142151
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
143152
* @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
144-
* @param OrderSender $orderSender
153+
* @param \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender
145154
* @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
146155
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
147156
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
148157
* @param array $data
158+
* @param \Magento\Sales\Api\PaymentFailuresInterface|null $paymentFailures
149159
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
150160
*/
151161
public function __construct(
@@ -162,15 +172,16 @@ public function __construct(
162172
\Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory,
163173
\Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory,
164174
TransactionService $transactionService,
165-
ZendClientFactory $httpClientFactory,
175+
\Magento\Framework\HTTP\ZendClientFactory $httpClientFactory,
166176
\Magento\Sales\Model\OrderFactory $orderFactory,
167177
\Magento\Store\Model\StoreManagerInterface $storeManager,
168178
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
169179
\Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender,
170180
\Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
171181
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
172182
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
173-
array $data = []
183+
array $data = [],
184+
\Magento\Sales\Api\PaymentFailuresInterface $paymentFailures = null
174185
) {
175186
$this->orderFactory = $orderFactory;
176187
$this->storeManager = $storeManager;
@@ -179,6 +190,8 @@ public function __construct(
179190
$this->orderSender = $orderSender;
180191
$this->transactionRepository = $transactionRepository;
181192
$this->_code = static::METHOD_CODE;
193+
$this->paymentFailures = $paymentFailures ? : ObjectManager::getInstance()
194+
->get(\Magento\Sales\Api\PaymentFailuresInterface::class);
182195

183196
parent::__construct(
184197
$context,
@@ -561,13 +574,10 @@ public function process(array $responseData)
561574
$this->validateResponse();
562575

563576
$response = $this->getResponse();
564-
//operate with order
565-
$orderIncrementId = $response->getXInvoiceNum();
566577
$responseText = $this->dataHelper->wrapGatewayError($response->getXResponseReasonText());
567578
$isError = false;
568-
if ($orderIncrementId) {
569-
/* @var $order \Magento\Sales\Model\Order */
570-
$order = $this->orderFactory->create()->loadByIncrementId($orderIncrementId);
579+
if ($this->getOrderIncrementId()) {
580+
$order = $this->getOrderFromResponse();
571581
//check payment method
572582
$payment = $order->getPayment();
573583
if (!$payment || $payment->getMethod() != $this->getCode()) {
@@ -632,9 +642,10 @@ public function checkResponseCode()
632642
return true;
633643
case self::RESPONSE_CODE_DECLINED:
634644
case self::RESPONSE_CODE_ERROR:
635-
throw new \Magento\Framework\Exception\LocalizedException(
636-
$this->dataHelper->wrapGatewayError($this->getResponse()->getXResponseReasonText())
637-
);
645+
$errorMessage = $this->dataHelper->wrapGatewayError($this->getResponse()->getXResponseReasonText());
646+
$order = $this->getOrderFromResponse();
647+
$this->paymentFailures->handle((int)$order->getQuoteId(), $errorMessage);
648+
throw new \Magento\Framework\Exception\LocalizedException($errorMessage);
638649
default:
639650
throw new \Magento\Framework\Exception\LocalizedException(
640651
__('There was a payment authorization error.')
@@ -988,12 +999,40 @@ protected function getTransactionResponse($transactionId)
988999
private function getPsrLogger()
9891000
{
9901001
if (null === $this->psrLogger) {
991-
$this->psrLogger = \Magento\Framework\App\ObjectManager::getInstance()
1002+
$this->psrLogger = ObjectManager::getInstance()
9921003
->get(\Psr\Log\LoggerInterface::class);
9931004
}
9941005
return $this->psrLogger;
9951006
}
9961007

1008+
/**
1009+
* Fetch order by increment id from response.
1010+
*
1011+
* @return \Magento\Sales\Model\Order
1012+
*/
1013+
private function getOrderFromResponse(): \Magento\Sales\Model\Order
1014+
{
1015+
if (!$this->order) {
1016+
$this->order = $this->orderFactory->create();
1017+
1018+
if ($incrementId = $this->getOrderIncrementId()) {
1019+
$this->order = $this->order->loadByIncrementId($incrementId);
1020+
}
1021+
}
1022+
1023+
return $this->order;
1024+
}
1025+
1026+
/**
1027+
* Fetch order increment id from response.
1028+
*
1029+
* @return string
1030+
*/
1031+
private function getOrderIncrementId(): string
1032+
{
1033+
return $this->getResponse()->getXInvoiceNum();
1034+
}
1035+
9971036
/**
9981037
* Checks if filter action is Report Only. Transactions that trigger this filter are processed as normal,
9991038
* but are also reported in the Merchant Interface as triggering this filter.

app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Authorizenet\Test\Unit\Model;
77

8+
use Magento\Sales\Api\PaymentFailuresInterface;
89
use Magento\Framework\Simplexml\Element;
910
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
1011
use Magento\Authorizenet\Model\Directpost;
@@ -74,6 +75,14 @@ class DirectpostTest extends \PHPUnit\Framework\TestCase
7475
*/
7576
protected $requestFactory;
7677

78+
/**
79+
* @var PaymentFailuresInterface|\PHPUnit_Framework_MockObject_MockObject
80+
*/
81+
private $paymentFailures;
82+
83+
/**
84+
* @inheritdoc
85+
*/
7786
protected function setUp()
7887
{
7988
$this->scopeConfigMock = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
@@ -104,6 +113,12 @@ protected function setUp()
104113
->setMethods(['getTransactionDetails'])
105114
->getMock();
106115

116+
$this->paymentFailures = $this->getMockBuilder(
117+
PaymentFailuresInterface::class
118+
)
119+
->disableOriginalConstructor()
120+
->getMock();
121+
107122
$this->requestFactory = $this->getRequestFactoryMock();
108123
$httpClientFactoryMock = $this->getHttpClientFactoryMock();
109124

@@ -117,7 +132,8 @@ protected function setUp()
117132
'responseFactory' => $this->responseFactoryMock,
118133
'transactionRepository' => $this->transactionRepositoryMock,
119134
'transactionService' => $this->transactionServiceMock,
120-
'httpClientFactory' => $httpClientFactoryMock
135+
'httpClientFactory' => $httpClientFactoryMock,
136+
'paymentFailures' => $this->paymentFailures,
121137
]
122138
);
123139
}
@@ -313,12 +329,16 @@ public function checkResponseCodeSuccessDataProvider()
313329
}
314330

315331
/**
316-
* @param bool $responseCode
332+
* Checks response failures behaviour.
333+
*
334+
* @param int $responseCode
335+
* @param int $failuresHandlerCalls
336+
* @return void
317337
*
318338
* @expectedException \Magento\Framework\Exception\LocalizedException
319339
* @dataProvider checkResponseCodeFailureDataProvider
320340
*/
321-
public function testCheckResponseCodeFailure($responseCode)
341+
public function testCheckResponseCodeFailure(int $responseCode, int $failuresHandlerCalls)
322342
{
323343
$reasonText = 'reason text';
324344

@@ -333,18 +353,35 @@ public function testCheckResponseCodeFailure($responseCode)
333353
->with($reasonText)
334354
->willReturn(__('Gateway error: %1', $reasonText));
335355

356+
$orderMock = $this->getMockBuilder(Order::class)
357+
->disableOriginalConstructor()
358+
->getMock();
359+
360+
$orderMock->expects($this->exactly($failuresHandlerCalls))
361+
->method('getQuoteId')
362+
->willReturn(1);
363+
364+
$this->paymentFailures->expects($this->exactly($failuresHandlerCalls))
365+
->method('handle')
366+
->with(1);
367+
368+
$reflection = new \ReflectionClass($this->directpost);
369+
$order = $reflection->getProperty('order');
370+
$order->setAccessible(true);
371+
$order->setValue($this->directpost, $orderMock);
372+
336373
$this->directpost->checkResponseCode();
337374
}
338375

339376
/**
340377
* @return array
341378
*/
342-
public function checkResponseCodeFailureDataProvider()
379+
public function checkResponseCodeFailureDataProvider(): array
343380
{
344381
return [
345-
['responseCode' => Directpost::RESPONSE_CODE_DECLINED],
346-
['responseCode' => Directpost::RESPONSE_CODE_ERROR],
347-
['responseCode' => 999999]
382+
['responseCode' => Directpost::RESPONSE_CODE_DECLINED, 1],
383+
['responseCode' => Directpost::RESPONSE_CODE_ERROR, 1],
384+
['responseCode' => 999999, 0],
348385
];
349386
}
350387

app/code/Magento/Backend/Block/Template.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
* Example:
1818
* <block name="my.block" class="Magento\Backend\Block\Template" template="My_Module::template.phtml" >
1919
* <arguments>
20-
* <argument name="viewModel" xsi:type="object">My\Module\ViewModel\Custom</argument>
20+
* <argument name="view_model" xsi:type="object">My\Module\ViewModel\Custom</argument>
2121
* </arguments>
2222
* </block>
2323
*
24+
* Your class object can then be accessed by doing $block->getViewModel()
25+
*
2426
* @api
2527
* @SuppressWarnings(PHPMD.NumberOfChildren)
2628
* @since 100.0.2

app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Massaction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function render(\Magento\Framework\DataObject $row)
6565
*/
6666
protected function _getCheckboxHtml($value, $checked)
6767
{
68-
$id = 'id_' . rand(0, 999);
68+
$id = 'id_' . random_int(0, 999);
6969
$html = '<label class="data-grid-checkbox-cell-inner" for="'. $id .'">';
7070
$html .= '<input type="checkbox" name="' . $this->getColumn()->getName() . '" ';
7171
$html .= 'id="' . $id . '" data-role="select-row"';

app/code/Magento/Backend/Model/Url.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ public function getUrl($routePath = null, $routeParams = null)
211211
return $result;
212212
}
213213

214+
$this->getRouteParamsResolver()->unsetData('route_params');
214215
$this->_setRoutePath($routePath);
216+
$extraParams = $this->getRouteParamsResolver()->getRouteParams();
215217
$routeName = $this->_getRouteName('*');
216218
$controllerName = $this->_getControllerName(self::DEFAULT_CONTROLLER_NAME);
217219
$actionName = $this->_getActionName(self::DEFAULT_ACTION_NAME);
@@ -226,6 +228,10 @@ public function getUrl($routePath = null, $routeParams = null)
226228
$routeParams[self::SECRET_KEY_PARAM_NAME] = $secretKey;
227229
}
228230

231+
if (!empty($extraParams)) {
232+
$routeParams = array_merge($extraParams, $routeParams);
233+
}
234+
229235
return parent::getUrl("{$routeName}/{$controllerName}/{$actionName}", $routeParams);
230236
}
231237

app/code/Magento/Backend/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"magento/module-theme": "100.2.*"
2525
},
2626
"type": "magento2-module",
27-
"version": "100.2.3",
27+
"version": "100.2.4",
2828
"license": [
2929
"OSL-3.0",
3030
"AFL-3.0"

app/code/Magento/Backend/etc/adminhtml/di.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,6 @@
145145
<item name="dev" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item>
146146
<item name="general/locale/code" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::DISABLED</item>
147147
</argument>
148-
<argument name="exemptions" xsi:type="array">
149-
<item name="dev/debug/debug_logging" xsi:type="string"/>
150-
</argument>
151148
</arguments>
152149
</type>
153150
<type name="Magento\Framework\View\Layout\Generator\Block">

app/code/Magento/Backup/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"magento/framework": "101.0.*"
1010
},
1111
"type": "magento2-module",
12-
"version": "100.2.2",
12+
"version": "100.2.3",
1313
"license": [
1414
"OSL-3.0",
1515
"AFL-3.0"

0 commit comments

Comments
 (0)