Skip to content

Commit 8c59a78

Browse files
author
Igor Melnikov
committed
MAGETWO-67160: Add missing upgrade scripts for serialized widget data
- adding missing upgrade scripts
1 parent 690e6b8 commit 8c59a78

File tree

15 files changed

+275
-22
lines changed

15 files changed

+275
-22
lines changed

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
/**
1717
* Upgrade Data script
18-
* @codeCoverageIgnore
18+
*
1919
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2020
*/
2121
class UpgradeData implements UpgradeDataInterface
@@ -35,15 +35,25 @@ class UpgradeData implements UpgradeDataInterface
3535
private $eavSetupFactory;
3636

3737
/**
38-
* Init
38+
* @var UpgradeWidgetData
39+
*/
40+
private $upgradeWidgetData;
41+
42+
/**
43+
* Constructor
3944
*
4045
* @param CategorySetupFactory $categorySetupFactory
4146
* @param EavSetupFactory $eavSetupFactory
47+
* @param UpgradeWidgetData $upgradeWidgetData
4248
*/
43-
public function __construct(CategorySetupFactory $categorySetupFactory, EavSetupFactory $eavSetupFactory)
44-
{
49+
public function __construct(
50+
CategorySetupFactory $categorySetupFactory,
51+
EavSetupFactory $eavSetupFactory,
52+
UpgradeWidgetData $upgradeWidgetData
53+
) {
4554
$this->categorySetupFactory = $categorySetupFactory;
4655
$this->eavSetupFactory = $eavSetupFactory;
56+
$this->upgradeWidgetData = $upgradeWidgetData;
4757
}
4858

4959
/**
@@ -366,6 +376,9 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface
366376
$this->dissallowUsingHtmlForProductName($setup);
367377
}
368378

379+
if ($context->getVersion() && version_compare($context->getVersion(), '2.2.1') < 0) {
380+
$this->upgradeWidgetData->upgrade();
381+
}
369382
$setup->endSetup();
370383
}
371384

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Catalog\Setup;
7+
8+
use Magento\Framework\DB\Select\QueryModifierFactory;
9+
use Magento\Widget\Setup\LayoutUpdateConverter;
10+
use Magento\Eav\Setup\EavSetup;
11+
use Magento\Framework\DB\FieldToConvert;
12+
use Magento\Framework\DB\AggregatedFieldDataConverter;
13+
14+
/**
15+
* Convert serialized widget data for categories and products tables to JSON
16+
*/
17+
class UpgradeWidgetData
18+
{
19+
/**
20+
* @var EavSetup
21+
*/
22+
private $eavSetup;
23+
24+
/**
25+
* @var QueryModifierFactory
26+
*/
27+
private $queryModifierFactory;
28+
29+
/**
30+
* Constructor
31+
*
32+
* @param EavSetup $eavSetup
33+
* @param QueryModifierFactory $queryModifierFactory
34+
* @param AggregatedFieldDataConverter $aggregatedFieldDataConverter
35+
*/
36+
public function __construct(
37+
EavSetup $eavSetup,
38+
QueryModifierFactory $queryModifierFactory,
39+
AggregatedFieldDataConverter $aggregatedFieldDataConverter
40+
) {
41+
$this->eavSetup = $eavSetup;
42+
$this->queryModifierFactory = $queryModifierFactory;
43+
$this->aggregatedFieldDataConverter = $aggregatedFieldDataConverter;
44+
}
45+
46+
/**
47+
* Convert category and product layout update
48+
*
49+
* @return void
50+
* @throws \InvalidArgumentException
51+
*/
52+
public function upgrade()
53+
{
54+
$categoryTypeId = $this->eavSetup->getEntityTypeId(\Magento\Catalog\Model\Category::ENTITY);
55+
$categoryLayoutUpdateAttribute = $this->eavSetup->getAttribute($categoryTypeId, 'custom_layout_update');
56+
$categoryLayoutUpdateAttributeModifier = $this->queryModifierFactory->create(
57+
'in',
58+
[
59+
'values' => [
60+
'attribute_id' => $categoryLayoutUpdateAttribute['attribute_id']
61+
]
62+
]
63+
);
64+
$layoutUpdateValueModifier = $this->queryModifierFactory->create(
65+
'like',
66+
[
67+
'values' => [
68+
'value' => '%conditions_encoded%'
69+
]
70+
]
71+
);
72+
$categoryLayoutUpdateModifier = $this->queryModifierFactory->create(
73+
'composite',
74+
[
75+
'queryModifiers' => [
76+
$categoryLayoutUpdateAttributeModifier,
77+
$layoutUpdateValueModifier
78+
]
79+
]
80+
);
81+
$productTypeId = $this->eavSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
82+
$productLayoutUpdateAttribute = $this->eavSetup->getAttribute($productTypeId, 'custom_layout_update');
83+
$productLayoutUpdateAttributeModifier = $this->queryModifierFactory->create(
84+
'in',
85+
[
86+
'values' => [
87+
'attribute_id' => $productLayoutUpdateAttribute['attribute_id']
88+
]
89+
]
90+
);
91+
$productLayoutUpdateModifier = $this->queryModifierFactory->create(
92+
'composite',
93+
[
94+
'queryModifiers' => [
95+
$productLayoutUpdateAttributeModifier,
96+
$layoutUpdateValueModifier
97+
]
98+
]
99+
);
100+
$this->aggregatedFieldDataConverter->convert(
101+
[
102+
new FieldToConvert(
103+
LayoutUpdateConverter::class,
104+
$this->eavSetup->getSetup()->getTable('catalog_category_entity_text'),
105+
'value_id',
106+
'value',
107+
$categoryLayoutUpdateModifier
108+
),
109+
new FieldToConvert(
110+
LayoutUpdateConverter::class,
111+
$this->eavSetup->getSetup()->getTable('catalog_product_entity_text'),
112+
'value_id',
113+
'value',
114+
$productLayoutUpdateModifier
115+
),
116+
],
117+
$this->eavSetup->getSetup()->getConnection()
118+
);
119+
}
120+
}

app/code/Magento/Catalog/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_Catalog" setup_version="2.2.0">
9+
<module name="Magento_Catalog" setup_version="2.2.1">
1010
<sequence>
1111
<module name="Magento_Eav"/>
1212
<module name="Magento_Cms"/>

app/code/Magento/Cms/Setup/ContentConverter.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
*/
66
namespace Magento\Cms\Setup;
77

8-
use Magento\Widget\Model\Widget\Wysiwyg\Normalizer;
8+
use Magento\Framework\Data\Wysiwyg\Normalizer;
99
use Magento\Framework\DB\DataConverter\DataConversionException;
1010
use Magento\Framework\DB\DataConverter\SerializedToJson;
1111
use Magento\Framework\Serialize\Serializer\Json;
1212
use Magento\Framework\Serialize\Serializer\Serialize;
13+
use Magento\Framework\Filter\Template\Tokenizer\ParameterFactory;
1314

1415
/**
1516
* Convert conditions_encoded part of cms block content data from serialized to JSON format
1617
*/
1718
class ContentConverter extends SerializedToJson
1819
{
1920
/**
20-
* @var \Magento\Framework\Filter\Template\Tokenizer\ParameterFactory
21+
* @var ParameterFactory
2122
*/
2223
private $parameterFactory;
2324

@@ -31,13 +32,13 @@ class ContentConverter extends SerializedToJson
3132
*
3233
* @param Serialize $serialize
3334
* @param Json $json
34-
* @param \Magento\Framework\Filter\Template\Tokenizer\ParameterFactory $parameterFactory
35+
* @param ParameterFactory $parameterFactory
3536
* @param Normalizer $normalizer
3637
*/
3738
public function __construct(
3839
Serialize $serialize,
3940
Json $json,
40-
\Magento\Framework\Filter\Template\Tokenizer\ParameterFactory $parameterFactory,
41+
ParameterFactory $parameterFactory,
4142
Normalizer $normalizer
4243
) {
4344
$this->parameterFactory = $parameterFactory;

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Magento\Framework\Setup\ModuleContextInterface;
1616
use Magento\Framework\Setup\ModuleDataSetupInterface;
1717
use Magento\Framework\Setup\UpgradeDataInterface;
18+
use Magento\Widget\Setup\LayoutUpdateConverter;
1819

1920
class UpgradeData implements UpgradeDataInterface
2021
{
@@ -96,7 +97,22 @@ private function convertWidgetConditionsToJson(ModuleDataSetupInterface $setup)
9697
]
9798
]
9899
);
99-
100+
$layoutUpdateXmlFieldQueryModifier = $this->queryModifierFactory->create(
101+
'like',
102+
[
103+
'values' => [
104+
'layout_update_xml' => '%conditions_encoded%'
105+
]
106+
]
107+
);
108+
$customLayoutUpdateXmlFieldQueryModifier = $this->queryModifierFactory->create(
109+
'like',
110+
[
111+
'values' => [
112+
'custom_layout_update_xml' => '%conditions_encoded%'
113+
]
114+
]
115+
);
100116
$blockMetadata = $this->metadataPool->getMetadata(BlockInterface::class);
101117
$pageMetadata = $this->metadataPool->getMetadata(PageInterface::class);
102118
$this->aggregatedFieldConverter->convert(
@@ -115,6 +131,20 @@ private function convertWidgetConditionsToJson(ModuleDataSetupInterface $setup)
115131
'content',
116132
$queryModifier
117133
),
134+
new FieldToConvert(
135+
LayoutUpdateConverter::class,
136+
$setup->getTable('cms_page'),
137+
$pageMetadata->getIdentifierField(),
138+
'layout_update_xml',
139+
$layoutUpdateXmlFieldQueryModifier
140+
),
141+
new FieldToConvert(
142+
LayoutUpdateConverter::class,
143+
$setup->getTable('cms_page'),
144+
$pageMetadata->getIdentifierField(),
145+
'custom_layout_update_xml',
146+
$customLayoutUpdateXmlFieldQueryModifier
147+
),
118148
],
119149
$setup->getConnection()
120150
);

app/code/Magento/Widget/Helper/Conditions.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
namespace Magento\Widget\Helper;
77

8-
use Magento\Widget\Model\Widget\Wysiwyg\Normalizer;
8+
use Magento\Framework\Data\Wysiwyg\Normalizer;
99
use Magento\Framework\App\ObjectManager;
1010
use Magento\Framework\Serialize\Serializer\Json;
1111

app/code/Magento/Widget/Setup/LayoutUpdateConverter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
use Magento\Framework\Serialize\Serializer\Json;
99
use Magento\Framework\Serialize\Serializer\Serialize;
10-
use Magento\Widget\Model\Widget\Wysiwyg\Normalizer;
10+
use Magento\Framework\Data\Wysiwyg\Normalizer;
1111
use Magento\Framework\DB\DataConverter\DataConversionException;
1212
use Magento\Framework\DB\DataConverter\SerializedToJson;
1313

@@ -22,7 +22,7 @@ class LayoutUpdateConverter extends SerializedToJson
2222
private $normalizer;
2323

2424
/**
25-
* LayoutUpdateConverter constructor.
25+
* Constructor
2626
*
2727
* @param Serialize $serialize
2828
* @param Json $json

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
76
namespace Magento\Widget\Setup;
87

98
use Magento\Framework\DB\AggregatedFieldDataConverter;

app/code/Magento/Widget/Test/Unit/Helper/ConditionsTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace Magento\Widget\Test\Unit\Helper;
88

99
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
10-
use Magento\Widget\Model\Widget\Wysiwyg\Normalizer;
10+
use Magento\Framework\Data\Wysiwyg\Normalizer;
1111

1212
/**
1313
* Class ConditionsTest

app/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,7 @@
12531253
<argument name="queryModifiers" xsi:type="array">
12541254
<item name="in" xsi:type="string">Magento\Framework\DB\Select\InQueryModifier</item>
12551255
<item name="like" xsi:type="string">Magento\Framework\DB\Select\LikeQueryModifier</item>
1256+
<item name="composite" xsi:type="string">Magento\Framework\DB\Select\CompositeQueryModifier</item>
12561257
</argument>
12571258
</arguments>
12581259
</type>

0 commit comments

Comments
 (0)