Skip to content

Commit ac07ef1

Browse files
author
Volodymyr Klymenko
authored
Merge pull request #752 from magento-troll/MAGETWO-62321
MAGETWO-62321: Remove uses of unserialize in Magento_Eav for attribute validate_rules
2 parents 91aa307 + 31ee11b commit ac07ef1

File tree

7 files changed

+36
-14
lines changed

7 files changed

+36
-14
lines changed

app/code/Magento/Customer/Setup/UpgradeData.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
use Magento\Framework\Setup\ModuleDataSetupInterface;
1818
use Magento\Store\Model\ScopeInterface;
1919
use Magento\Store\Model\StoreManagerInterface;
20+
use Magento\Framework\DB\FieldDataConverterFactory;
21+
use Magento\Framework\DB\DataConverter\SerializedToJson;
2022

2123
/**
2224
* @codeCoverageIgnore
@@ -51,19 +53,30 @@ class UpgradeData implements UpgradeDataInterface
5153
*/
5254
private $storeManager;
5355

56+
/**
57+
* @var FieldDataConverterFactory
58+
*/
59+
private $fieldDataConverterFactory;
60+
5461
/**
5562
* @param CustomerSetupFactory $customerSetupFactory
5663
* @param IndexerRegistry $indexerRegistry
5764
* @param \Magento\Eav\Model\Config $eavConfig
65+
* @param FieldDataConverterFactory|null $fieldDataConverterFactory
5866
*/
5967
public function __construct(
6068
CustomerSetupFactory $customerSetupFactory,
6169
IndexerRegistry $indexerRegistry,
62-
\Magento\Eav\Model\Config $eavConfig
70+
\Magento\Eav\Model\Config $eavConfig,
71+
FieldDataConverterFactory $fieldDataConverterFactory = null
6372
) {
6473
$this->customerSetupFactory = $customerSetupFactory;
6574
$this->indexerRegistry = $indexerRegistry;
6675
$this->eavConfig = $eavConfig;
76+
77+
$this->fieldDataConverterFactory = $fieldDataConverterFactory ?: ObjectManager::getInstance()->get(
78+
FieldDataConverterFactory::class
79+
);
6780
}
6881

6982
/**
@@ -132,6 +145,15 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface
132145
throw $e;
133146
}
134147
}
148+
if (version_compare($context->getVersion(), '2.0.11', '<')) {
149+
$fieldDataConverter = $this->fieldDataConverterFactory->create(SerializedToJson::class);
150+
$fieldDataConverter->convert(
151+
$setup->getConnection(),
152+
$setup->getTable('customer_eav_attribute'),
153+
'attribute_id',
154+
'validate_rules'
155+
);
156+
}
135157

136158
$indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
137159
$indexer->reindexAll();

app/code/Magento/Customer/etc/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9-
<module name="Magento_Customer" setup_version="2.0.10">
9+
<module name="Magento_Customer" setup_version="2.0.11">
1010
<sequence>
1111
<module name="Magento_Eav"/>
1212
<module name="Magento_Directory"/>

app/code/Magento/Eav/Model/Attribute.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public function getValidateRules()
103103
if (is_array($rules)) {
104104
return $rules;
105105
} elseif (!empty($rules)) {
106-
return unserialize($rules);
106+
return $this->getSerializer()->unserialize($rules);
107107
}
108108
return [];
109109
}
@@ -119,7 +119,7 @@ public function setValidateRules($rules)
119119
if (empty($rules)) {
120120
$rules = null;
121121
} elseif (is_array($rules)) {
122-
$rules = serialize($rules);
122+
$rules = $this->getSerializer()->serialize($rules);
123123
}
124124
$this->setData('validate_rules', $rules);
125125

app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php

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

99
use Magento\Framework\Api\AttributeValueFactory;
1010
use Magento\Framework\Exception\LocalizedException;
11-
use Magento\Framework\Serialize\SerializerInterface;
11+
use Magento\Framework\Serialize\Serializer\Json;
1212

1313
/**
1414
* Entity/Attribute/Model - attribute abstract
@@ -120,9 +120,9 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
120120
/**
121121
* Serializer Instance.
122122
*
123-
* @var SerializerInterface
123+
* @var Json
124124
*/
125-
private $serializer;
125+
protected $serializer;
126126

127127
/**
128128
* Array of attribute types that have empty string as a possible value.
@@ -197,12 +197,12 @@ public function __construct(
197197
* Get Serializer instance.
198198
* @deprecated
199199
*
200-
* @return SerializerInterface
200+
* @return Json
201201
*/
202-
private function getSerializer()
202+
protected function getSerializer()
203203
{
204204
if ($this->serializer === null) {
205-
$this->serializer = \Magento\Framework\App\ObjectManager::getInstance()->create(SerializerInterface::class);
205+
$this->serializer = \Magento\Framework\App\ObjectManager::getInstance()->create(Json::class);
206206
}
207207

208208
return $this->serializer;

app/code/Magento/Eav/Model/ResourceModel/Attribute.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected function _beforeSave(AbstractModel $object)
4545
{
4646
$validateRules = $object->getData('validate_rules');
4747
if (is_array($validateRules)) {
48-
$object->setData('validate_rules', serialize($validateRules));
48+
$object->setData('validate_rules', $this->getSerializer()->serialize($validateRules));
4949
}
5050
return parent::_beforeSave($object);
5151
}

app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/AbstractAttributeTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ public function testGetValidationRulesWhenRuleIsArray()
144144

145145
public function testGetValidationRulesWhenRuleIsSerialized()
146146
{
147-
$rule = serialize('some value');
148-
$expected = 'some test result';
147+
$rule = json_encode(['some value']);
148+
$expected = ['some value'];
149149

150150
$modelClassName = \Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class;
151151
$model = $this->getMockForAbstractClass($modelClassName, [], '', false);

app/code/Magento/ImportExport/Model/Import/Entity/AbstractEav.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ protected function _initAttributes()
176176
'table' => $attribute->getBackend()->getTable(),
177177
'is_required' => $attribute->getIsRequired(),
178178
'is_static' => $attribute->isStatic(),
179-
'rules' => $attribute->getValidateRules() ? unserialize($attribute->getValidateRules()) : null,
179+
'rules' => $attribute->getValidateRules() ? $attribute->getValidateRules() : null,
180180
'type' => \Magento\ImportExport\Model\Import::getAttributeType($attribute),
181181
'options' => $this->getAttributeOptions($attribute),
182182
];

0 commit comments

Comments
 (0)