Skip to content

Commit 189cf80

Browse files
Merge branch 'develop' of https://github.com/magento/magento2ce into MAGETWO-63295
2 parents 4a8d8ff + b18d489 commit 189cf80

File tree

188 files changed

+7590
-595
lines changed

Some content is hidden

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

188 files changed

+7590
-595
lines changed

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

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -180,39 +180,6 @@
180180
</argument>
181181
</arguments>
182182
</type>
183-
<type name="Magento\Theme\Model\Design\Config\MetadataProvider">
184-
<arguments>
185-
<argument name="metadata" xsi:type="array">
186-
<item name="theme_theme_id" xsi:type="array">
187-
<item name="path" xsi:type="string">design/theme/theme_id</item>
188-
<item name="fieldset" xsi:type="string">theme</item>
189-
<item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\Theme</item>
190-
<item name="use_in_grid" xsi:type="boolean">true</item>
191-
</item>
192-
<item name="theme_ua_regexp" xsi:type="array">
193-
<item name="path" xsi:type="string">design/theme/ua_regexp</item>
194-
<item name="fieldset" xsi:type="string">desing_rule</item>
195-
<item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\Exceptions</item>
196-
</item>
197-
<item name="pagination_pagination_frame" xsi:type="array">
198-
<item name="path" xsi:type="string">design/pagination/pagination_frame</item>
199-
<item name="fieldset" xsi:type="string">other_settings/pagination</item>
200-
</item>
201-
<item name="pagination_pagination_frame_skip" xsi:type="array">
202-
<item name="path" xsi:type="string">design/pagination/pagination_frame_skip</item>
203-
<item name="fieldset" xsi:type="string">other_settings/pagination</item>
204-
</item>
205-
<item name="pagination_anchor_text_for_previous" xsi:type="array">
206-
<item name="path" xsi:type="string">design/pagination/anchor_text_for_previous</item>
207-
<item name="fieldset" xsi:type="string">other_settings/pagination</item>
208-
</item>
209-
<item name="pagination_anchor_text_for_next" xsi:type="array">
210-
<item name="path" xsi:type="string">design/pagination/anchor_text_for_next</item>
211-
<item name="fieldset" xsi:type="string">other_settings/pagination</item>
212-
</item>
213-
</argument>
214-
</arguments>
215-
</type>
216183
<type name="Magento\Config\Model\Config\Export\ExcludeList">
217184
<arguments>
218185
<argument name="configs" xsi:type="array">

app/code/Magento/Braintree/Gateway/Config/Config.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Braintree\Gateway\Config;
77

8+
use Magento\Framework\App\Config\ScopeConfigInterface;
9+
use Magento\Framework\Serialize\Serializer\Json;
10+
811
/**
912
* Class Config
1013
*/
@@ -30,6 +33,30 @@ class Config extends \Magento\Payment\Gateway\Config\Config
3033
const KEY_KOUNT_MERCHANT_ID = 'kount_id';
3134
const FRAUD_PROTECTION = 'fraudprotection';
3235

36+
/**
37+
* @var \Magento\Framework\Serialize\Serializer\Json
38+
*/
39+
private $serializer;
40+
41+
/**
42+
* Braintree config constructor
43+
*
44+
* @param ScopeConfigInterface $scopeConfig
45+
* @param null|string $methodCode
46+
* @param string $pathPattern
47+
* @param Json|null $serializer
48+
*/
49+
public function __construct(
50+
ScopeConfigInterface $scopeConfig,
51+
$methodCode = null,
52+
$pathPattern = self::DEFAULT_PATH_PATTERN,
53+
Json $serializer = null
54+
) {
55+
parent::__construct($scopeConfig, $methodCode, $pathPattern);
56+
$this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()
57+
->get(Json::class);
58+
}
59+
3360
/**
3461
* Get list of available dynamic descriptors keys
3562
* @var array
@@ -45,7 +72,7 @@ class Config extends \Magento\Payment\Gateway\Config\Config
4572
*/
4673
public function getCountrySpecificCardTypeConfig()
4774
{
48-
$countriesCardTypes = unserialize($this->getValue(self::KEY_COUNTRY_CREDIT_CARD));
75+
$countriesCardTypes = $this->serializer->unserialize($this->getValue(self::KEY_COUNTRY_CREDIT_CARD));
4976

5077
return is_array($countriesCardTypes) ? $countriesCardTypes : [];
5178
}

app/code/Magento/Braintree/Model/Adminhtml/System/Config/CountryCreditCard.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Framework\Model\Context;
1414
use Magento\Framework\Model\ResourceModel\AbstractResource;
1515
use Magento\Framework\Registry;
16+
use Magento\Framework\Serialize\Serializer\Json;
1617

1718
/**
1819
* Class CountryCreditCard
@@ -24,6 +25,11 @@ class CountryCreditCard extends Value
2425
*/
2526
protected $mathRandom;
2627

28+
/**
29+
* @var \Magento\Framework\Serialize\Serializer\Json
30+
*/
31+
private $serializer;
32+
2733
/**
2834
* @param \Magento\Framework\Model\Context $context
2935
* @param \Magento\Framework\Registry $registry
@@ -33,6 +39,7 @@ class CountryCreditCard extends Value
3339
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
3440
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
3541
* @param array $data
42+
* @param \Magento\Framework\Serialize\Serializer\Json $serializer
3643
*/
3744
public function __construct(
3845
Context $context,
@@ -42,9 +49,12 @@ public function __construct(
4249
Random $mathRandom,
4350
AbstractResource $resource = null,
4451
AbstractDb $resourceCollection = null,
45-
array $data = []
52+
array $data = [],
53+
Json $serializer = null
4654
) {
4755
$this->mathRandom = $mathRandom;
56+
$this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()
57+
->get(Json::class);
4858
parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
4959
}
5060

@@ -68,7 +78,7 @@ public function beforeSave()
6878
$result[$country] = $data['cc_types'];
6979
}
7080
}
71-
$this->setValue(serialize($result));
81+
$this->setValue($this->serializer->serialize($result));
7282
return $this;
7383
}
7484

@@ -79,7 +89,7 @@ public function beforeSave()
7989
*/
8090
public function afterLoad()
8191
{
82-
$value = unserialize($this->getValue());
92+
$value = $this->serializer->unserialize($this->getValue());
8393
if (is_array($value)) {
8494
$value = $this->encodeArrayFieldValue($value);
8595
$this->setValue($value);
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Braintree\Setup;
8+
9+
use Magento\Framework\Setup\ModuleContextInterface;
10+
use Magento\Framework\Setup\ModuleDataSetupInterface;
11+
use Magento\Framework\Setup\UpgradeDataInterface;
12+
13+
class UpgradeData implements UpgradeDataInterface
14+
{
15+
/**
16+
* @var \Magento\Framework\DB\FieldDataConverterFactory
17+
*/
18+
private $fieldDataConverterFactory;
19+
20+
/**
21+
* @var \Magento\Framework\DB\Select\QueryModifierFactory
22+
*/
23+
private $queryModifierFactory;
24+
25+
/**
26+
* UpgradeData constructor.
27+
*
28+
* @param \Magento\Framework\DB\FieldDataConverterFactory $fieldDataConverterFactory
29+
* @param \Magento\Framework\DB\Select\QueryModifierFactory $queryModifierFactory
30+
*/
31+
public function __construct(
32+
\Magento\Framework\DB\FieldDataConverterFactory $fieldDataConverterFactory,
33+
\Magento\Framework\DB\Select\QueryModifierFactory $queryModifierFactory
34+
) {
35+
$this->fieldDataConverterFactory = $fieldDataConverterFactory;
36+
$this->queryModifierFactory = $queryModifierFactory;
37+
}
38+
39+
/**
40+
* Upgrades data for Braintree module
41+
*
42+
* @param ModuleDataSetupInterface $setup
43+
* @param ModuleContextInterface $context
44+
* @return void
45+
*/
46+
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
47+
{
48+
if (version_compare($context->getVersion(), '2.0.1', '<')) {
49+
$this->convertSerializedDataToJson($setup);
50+
}
51+
}
52+
53+
/**
54+
* Upgrade data to version 2.0.1, converts row data in the core_config_data table that uses the path
55+
* payment/braintree/countrycreditcard from serialized to JSON
56+
*
57+
* @param ModuleDataSetupInterface $setup
58+
* @return void
59+
*/
60+
private function convertSerializedDataToJson(ModuleDataSetupInterface $setup)
61+
{
62+
$fieldDataConverter = $this->fieldDataConverterFactory->create(
63+
\Magento\Framework\DB\DataConverter\SerializedToJson::class
64+
);
65+
66+
$queryModifier = $this->queryModifierFactory->create(
67+
'in',
68+
[
69+
'values' => [
70+
'path' => ['payment/braintree/countrycreditcard']
71+
]
72+
]
73+
);
74+
75+
$fieldDataConverter->convert(
76+
$setup->getConnection(),
77+
$setup->getTable('core_config_data'),
78+
'config_id',
79+
'value',
80+
$queryModifier
81+
);
82+
}
83+
}

app/code/Magento/Braintree/Test/Unit/Gateway/Config/ConfigTest.php

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88

99
use Magento\Braintree\Gateway\Config\Config;
1010
use Magento\Framework\App\Config\ScopeConfigInterface;
11+
use Magento\Framework\Serialize\Serializer\Json;
1112
use Magento\Store\Model\ScopeInterface;
13+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1214

1315
/**
1416
* Class ConfigTest
@@ -27,23 +29,43 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
2729
*/
2830
private $scopeConfigMock;
2931

32+
/**
33+
* @var Json|\PHPUnit_Framework_MockObject_MockObject
34+
*/
35+
private $serializerMock;
36+
3037
protected function setUp()
3138
{
3239
$this->scopeConfigMock = $this->getMock(ScopeConfigInterface::class);
40+
$this->serializerMock = $this->getMock(Json::class);
3341

34-
$this->model = new Config($this->scopeConfigMock, self::METHOD_CODE);
42+
$objectManager = new ObjectManager($this);
43+
$this->model = $objectManager->getObject(
44+
Config::class,
45+
[
46+
'scopeConfig' => $this->scopeConfigMock,
47+
'methodCode' => self::METHOD_CODE,
48+
'serializer' => $this->serializerMock
49+
]
50+
);
3551
}
3652

3753
/**
38-
* @param string $value
54+
* @param string $encodedValue
55+
* @param string|array $value
3956
* @param array $expected
4057
* @dataProvider getCountrySpecificCardTypeConfigDataProvider
4158
*/
42-
public function testGetCountrySpecificCardTypeConfig($value, $expected)
59+
public function testGetCountrySpecificCardTypeConfig($encodedValue, $value, array $expected)
4360
{
4461
$this->scopeConfigMock->expects(static::once())
4562
->method('getValue')
4663
->with($this->getPath(Config::KEY_COUNTRY_CREDIT_CARD), ScopeInterface::SCOPE_STORE, null)
64+
->willReturn($encodedValue);
65+
66+
$this->serializerMock->expects($this->once())
67+
->method('unserialize')
68+
->with($encodedValue)
4769
->willReturn($value);
4870

4971
static::assertEquals(
@@ -58,11 +80,13 @@ public function testGetCountrySpecificCardTypeConfig($value, $expected)
5880
public function getCountrySpecificCardTypeConfigDataProvider()
5981
{
6082
return [
61-
[
62-
serialize(['GB' => ['VI', 'AE'], 'US' => ['DI', 'JCB']]),
83+
'valid data' => [
84+
'{"GB":["VI","AE"],"US":["DI","JCB"]}',
85+
['GB' => ['VI', 'AE'], 'US' => ['DI', 'JCB']],
6386
['GB' => ['VI', 'AE'], 'US' => ['DI', 'JCB']]
6487
],
65-
[
88+
'non-array value' => [
89+
'""',
6690
'',
6791
[]
6892
]
@@ -146,12 +170,20 @@ public function getCcTypesMapperDataProvider()
146170
/**
147171
* @covers \Magento\Braintree\Gateway\Config\Config::getCountryAvailableCardTypes
148172
* @dataProvider getCountrySpecificCardTypeConfigDataProvider
173+
* @param string $encodedData
174+
* @param string|array $data
175+
* @param array $countryData
149176
*/
150-
public function testCountryAvailableCardTypes($data, $countryData)
177+
public function testCountryAvailableCardTypes($encodedData, $data, array $countryData)
151178
{
152179
$this->scopeConfigMock->expects(static::any())
153180
->method('getValue')
154181
->with($this->getPath(Config::KEY_COUNTRY_CREDIT_CARD), ScopeInterface::SCOPE_STORE, null)
182+
->willReturn($encodedData);
183+
184+
$this->serializerMock->expects($this->any())
185+
->method('unserialize')
186+
->with($encodedData)
155187
->willReturn($data);
156188

157189
foreach ($countryData as $countryId => $types) {

0 commit comments

Comments
 (0)