Skip to content

Commit 2014962

Browse files
authored
Merge pull request #115 from magento-obsessive-owls/cms-team-2-sprint-13
[CMS Team 2 - Sprint 13] Changes to content type configuration, missing MFTF tests, custom container documentation, data migration bug and color picker bug
2 parents 589ef85 + 0d6a392 commit 2014962

File tree

136 files changed

+9182
-6885
lines changed

Some content is hidden

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

136 files changed

+9182
-6885
lines changed

app/code/Magento/PageBuilder/Model/Config/ContentType/Converter.php

Lines changed: 58 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313
class Converter implements \Magento\Framework\Config\ConverterInterface
1414
{
15+
const DEFAULT_ATTRIBUTE_READER = 'Magento_PageBuilder/js/property/attribute-reader';
16+
const DEFAULT_PROPERTY_READER = 'Magento_PageBuilder/js/property/style-property-reader';
17+
1518
/**
1619
* @var ArgumentParser
1720
*/
@@ -122,18 +125,19 @@ private function convertAppearanceData(\DOMElement $appearanceNode): array
122125
$appearanceData = [];
123126
$appearanceData = array_merge(
124127
$appearanceData,
125-
$this->convertAppearanceProperties($appearanceNode)
128+
$this->convertAppearanceStyles($appearanceNode)
126129
);
127130
$readerNode = $appearanceNode->getElementsByTagName('reader')->item(0);
128131
if ($readerNode && $readerNode->nodeValue) {
129132
$appearanceData['readers'] = [$readerNode->nodeValue];
130133
} else {
131134
$appearanceData['readers'] = $this->convertAppearanceReaders($appearanceNode);
132135
}
133-
$dataMappingNode = $appearanceNode->getElementsByTagName('data_mapping')->item(0);
134-
if ($dataMappingNode) {
135-
$appearanceData['data_mapping'] = $this->convertDataMapping($dataMappingNode);
136+
$elementsNode = $appearanceNode->getElementsByTagName('elements')->item(0);
137+
if ($elementsNode) {
138+
$appearanceData['elements'] = $this->convertElements($elementsNode);
136139
}
140+
$appearanceData['converters'] = $this->convertConvertersData($appearanceNode);
137141
$appearanceData['preview_template'] = $this->getAttributeValue($appearanceNode, 'preview_template');
138142
$appearanceData['render_template'] = $this->getAttributeValue($appearanceNode, 'render_template');
139143
$appearanceData['reader'] = $this->getAttributeValue($appearanceNode, 'reader');
@@ -151,7 +155,7 @@ private function convertAppearanceData(\DOMElement $appearanceNode): array
151155
* @param \DOMElement $elementNode
152156
* @return array
153157
*/
154-
private function convertAppearanceProperties(\DOMElement $elementNode): array
158+
private function convertAppearanceStyles(\DOMElement $elementNode): array
155159
{
156160
$data = [];
157161
foreach ($elementNode->getElementsByTagName('data') as $dataNode) {
@@ -200,31 +204,26 @@ private function validateAppearanceConfig(array $appearanceConfig)
200204
}
201205

202206
/**
203-
* Convert data mapping
207+
* Convert elements
204208
*
205209
* @param \DOMElement $childNode
206210
* @return array
207211
*/
208-
private function convertDataMapping(\DOMElement $childNode): array
212+
private function convertElements(\DOMElement $childNode): array
209213
{
210214
$elementData = [];
211215
foreach ($childNode->getElementsByTagName('element') as $elementNode) {
212216
$elementName = $elementNode->attributes->getNamedItem('name')->nodeValue;
213217
$elementData[$elementName] = [
214-
'style' => $this->convertProperties($elementNode),
218+
'style' => $this->convertStyles($elementNode),
215219
'attributes' => $this->convertAttributes($elementNode),
216220
'html' => $this->convertHtml($elementNode),
217221
'css' => $this->convertCss($elementNode),
218222
'tag' => $this->convertTag($elementNode)
219223
];
220224
}
221225

222-
$converters = $this->convertConvertersData($childNode);
223-
224-
return [
225-
'elements' => $elementData,
226-
'converters' => $converters
227-
];
226+
return $elementData;
228227
}
229228

230229
/**
@@ -259,45 +258,35 @@ private function convertAdditionalData(\DOMElement $elementNode): array
259258
}
260259

261260
/**
262-
* Convert properties
261+
* Convert styles
263262
*
264263
* @param \DOMElement $elementNode
265264
* @return array
266265
*/
267-
private function convertProperties(\DOMElement $elementNode): array
266+
private function convertStyles(\DOMElement $elementNode): array
268267
{
269-
$propertiesData = [];
270-
$propertiesNode = $elementNode->getElementsByTagName('style_properties')->item(0);
271-
if ($propertiesNode) {
272-
foreach ($propertiesNode->getElementsByTagName('property') as $propertyNode) {
273-
$propertiesData[] = [
274-
'var' => $this->extractVariableName($propertyNode),
275-
'name' => $this->getAttributeValue($propertyNode, 'source'),
276-
'converter' => $this->getAttributeValue($propertyNode, 'converter'),
277-
'preview_converter' => $this->getAttributeValue($propertyNode, 'preview_converter'),
278-
'virtual' => $this->getAttributeValue($propertyNode, 'virtual'),
279-
'persist' => $this->getAttributeValue($propertyNode, 'persist'),
280-
];
281-
}
282-
foreach ($propertiesNode->getElementsByTagName('complex_property') as $propertyNode) {
283-
$propertiesData[] = [
284-
'var' => $this->extractVariableName($propertyNode),
285-
'reader' => $this->getAttributeValue($propertyNode, 'reader'),
286-
'converter' => $this->getAttributeValue($propertyNode, 'converter'),
287-
'preview_converter' => $this->getAttributeValue($propertyNode, 'preview_converter'),
288-
'virtual' => $this->getAttributeValue($propertyNode, 'virtual'),
289-
'complex' => true
290-
];
291-
}
292-
foreach ($propertiesNode->getElementsByTagName('static_property') as $propertyNode) {
293-
$propertiesData[] = [
294-
'name' => $this->getAttributeValue($propertyNode, 'source'),
295-
'value' => $this->getAttributeValue($propertyNode, 'value'),
296-
'static' => true
297-
];
298-
}
268+
$stylesData = [];
269+
foreach ($elementNode->getElementsByTagName('style') as $styleNode) {
270+
$stylesData[] = [
271+
'var' => $this->extractVariableName($styleNode),
272+
'name' => $this->getAttributeValue($styleNode, 'source'),
273+
'converter' => $this->getAttributeValue($styleNode, 'converter'),
274+
'preview_converter' => $this->getAttributeValue($styleNode, 'preview_converter'),
275+
'persistence_mode' => $this->getAttributeValue($styleNode, 'persistence_mode')
276+
?? 'readwrite',
277+
'reader' => $this->getAttributeValue($styleNode, 'reader')
278+
?? self::DEFAULT_PROPERTY_READER,
279+
];
280+
}
281+
foreach ($elementNode->getElementsByTagName('static_style') as $styleNode) {
282+
$stylesData[] = [
283+
'name' => $this->getAttributeValue($styleNode, 'source'),
284+
'value' => $this->getAttributeValue($styleNode, 'value'),
285+
'static' => true
286+
];
299287
}
300-
return $propertiesData;
288+
289+
return $stylesData;
301290
}
302291

303292
/**
@@ -309,37 +298,26 @@ private function convertProperties(\DOMElement $elementNode): array
309298
private function convertAttributes(\DOMElement $elementNode): array
310299
{
311300
$attributesData = [];
312-
$attributesNode = $elementNode->getElementsByTagName('attributes')->item(0);
313-
if ($attributesNode) {
314-
foreach ($attributesNode->getElementsByTagName('attribute') as $attributeNode) {
315-
$attributesData[] = [
316-
'var' => $this->extractVariableName($attributeNode),
317-
'name' => $this->getAttributeValue($attributeNode, 'source'),
318-
'converter' => $this->getAttributeValue($attributeNode, 'converter'),
319-
'preview_converter' => $this->getAttributeValue($attributeNode, 'preview_converter'),
320-
'virtual' => $this->getAttributeValue($attributeNode, 'virtual'),
321-
'persist' => $this->getAttributeValue($attributeNode, 'persist'),
322-
];
323-
}
324-
foreach ($attributesNode->getElementsByTagName('static_attribute') as $attributeNode) {
325-
$attributesData[] = [
326-
'name' => $this->getAttributeValue($attributeNode, 'source'),
327-
'value' => $this->getAttributeValue($attributeNode, 'value'),
328-
'static' => true
329-
];
330-
}
331-
foreach ($attributesNode->getElementsByTagName('complex_attribute') as $attributeNode) {
332-
$attributesData[] = [
333-
'var' => $this->extractVariableName($attributeNode),
334-
'reader' => $this->getAttributeValue($attributeNode, 'reader'),
335-
'converter' => $this->getAttributeValue($attributeNode, 'converter'),
336-
'preview_converter' => $this->getAttributeValue($attributeNode, 'preview_converter'),
337-
'virtual' => $this->getAttributeValue($attributeNode, 'virtual'),
338-
'complex' => true,
339-
'persist' => $this->getAttributeValue($attributeNode, 'persist'),
340-
];
341-
}
301+
foreach ($elementNode->getElementsByTagName('attribute') as $attributeNode) {
302+
$attributesData[] = [
303+
'var' => $this->extractVariableName($attributeNode),
304+
'name' => $this->getAttributeValue($attributeNode, 'source'),
305+
'converter' => $this->getAttributeValue($attributeNode, 'converter'),
306+
'preview_converter' => $this->getAttributeValue($attributeNode, 'preview_converter'),
307+
'persistence_mode' => $this->getAttributeValue($attributeNode, 'persistence_mode')
308+
?? 'readwrite',
309+
'reader' => $this->getAttributeValue($attributeNode, 'reader')
310+
?? self::DEFAULT_ATTRIBUTE_READER,
311+
];
342312
}
313+
foreach ($elementNode->getElementsByTagName('static_attribute') as $attributeNode) {
314+
$attributesData[] = [
315+
'name' => $this->getAttributeValue($attributeNode, 'source'),
316+
'value' => $this->getAttributeValue($attributeNode, 'value'),
317+
'static' => true
318+
];
319+
}
320+
343321
return $attributesData;
344322
}
345323

@@ -407,9 +385,9 @@ private function convertTag(\DOMElement $elementNode): array
407385
* @param \DOMElement $childNode
408386
* @return array
409387
*/
410-
private function convertConvertersData(\DOMElement $childNode): array
388+
private function convertConvertersData(\DOMElement $appearanceNode): array
411389
{
412-
$convertersNode = $childNode->getElementsByTagName('converters')->item(0);
390+
$convertersNode = $appearanceNode->getElementsByTagName('converters')->item(0);
413391
$converters = [];
414392
if ($convertersNode) {
415393
foreach ($convertersNode->getElementsByTagName('converter') as $converterNode) {
@@ -578,7 +556,7 @@ private function getAttributeValue(\DOMElement $attributeNode, $attributeName)
578556
}
579557

580558
/**
581-
* Extract variable name from property and attribute nodes
559+
* Extract variable name from style and attribute nodes
582560
*
583561
* @param \DOMElement $node
584562
* @return string

app/code/Magento/PageBuilder/Model/Config/ContentType/Reader.php

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
class Reader extends \Magento\Framework\Config\Reader\Filesystem
1212
{
13-
const TYPE_PATH = '/config/content_types/type';
13+
const TYPE_PATH = '/config/type';
1414

1515
/**
1616
* List of id attributes for merge
@@ -23,22 +23,18 @@ class Reader extends \Magento\Framework\Config\Reader\Filesystem
2323
self::TYPE_PATH . '/children/child' => 'name',
2424
self::TYPE_PATH . '/appearances/appearance' => 'name',
2525
self::TYPE_PATH . '/appearances/appearance/data' => 'name',
26-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element' => 'name',
27-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/style_properties/property'
26+
self::TYPE_PATH . '/appearances/appearance/elements/element' => 'name',
27+
self::TYPE_PATH . '/appearances/appearance/elements/element/style'
2828
=> 'name',
29-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/style_properties/complex_property'
30-
=> 'name',
31-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/style_properties/static_property'
29+
self::TYPE_PATH . '/appearances/appearance/elements/element/static_style'
3230
=> 'source',
3331
self::TYPE_PATH . '/additional_data/item' => 'name',
34-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/attributes/attribute' => 'name',
35-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/attributes/complex_attribute'
36-
=> 'name',
37-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/attributes/static_attribute'
32+
self::TYPE_PATH . '/appearances/appearance/elements/element/attribute' => 'name',
33+
self::TYPE_PATH . '/appearances/appearance/elements/element/static_attribute'
3834
=> 'source',
39-
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/css/filter/class' => 'source',
40-
self::TYPE_PATH . '/appearances/appearance/data_mapping/converters/converter' => 'name',
41-
self::TYPE_PATH . '/appearances/appearance/data_mapping/converters/converter/config/item' => 'name',
35+
self::TYPE_PATH . '/appearances/appearance/elements/element/css/filter/class' => 'source',
36+
self::TYPE_PATH . '/appearances/appearance/converters/converter' => 'name',
37+
self::TYPE_PATH . '/appearances/appearance/converters/converter/config/item' => 'name',
4238
self::TYPE_PATH . '/appearances/appearance/readers/reader' => 'name'
4339
];
4440

app/code/Magento/PageBuilder/Model/Config/Group/Converter.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,12 @@ public function convert($source): array
3333
private function convertGroups(\DOMDocument $source): array
3434
{
3535
$groupsData = [];
36-
/** @var \DOMNode $source */
37-
$groups = $source->getElementsByTagName('groups');
3836
/** @var \DOMNode $group */
39-
foreach ($groups->item(0)->childNodes as $group) {
40-
if ($group->nodeType == XML_ELEMENT_NODE && $group->tagName == 'group') {
41-
$name = $group->attributes->getNamedItem('name')->nodeValue;
42-
/** @var \DOMElement $attributeValue */
43-
foreach ($group->attributes as $attributeName => $attributeValue) {
44-
$groupsData[$name][$attributeName] = $attributeValue->nodeValue;
45-
}
37+
foreach ($source->getElementsByTagName('group') as $group) {
38+
$name = $group->attributes->getNamedItem('name')->nodeValue;
39+
/** @var \DOMElement $attributeValue */
40+
foreach ($group->attributes as $attributeName => $attributeValue) {
41+
$groupsData[$name][$attributeName] = $attributeValue->nodeValue;
4642
}
4743
}
4844
uasort($groupsData, function ($firstElement, $secondElement) {

app/code/Magento/PageBuilder/Model/Config/Group/Reader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Reader extends \Magento\Framework\Config\Reader\Filesystem
1616
* @var array
1717
*/
1818
protected $_idAttributes = [
19-
'/config/groups/group' => 'name'
19+
'/config/group' => 'name'
2020
];
2121

2222
/**

app/code/Magento/PageBuilder/Model/Stage/Config.php

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -152,27 +152,21 @@ private function flattenContentTypeData($name, $contentType)
152152
'icon' => $contentType['icon'],
153153
'form' => $contentType['form'],
154154
'contentType' => '',
155-
'group' => (isset($contentType['group'])
156-
? $contentType['group'] : 'general'),
155+
'group' => $contentType['group'] ?? 'general',
157156
'fields' => $this->uiComponentConfig->getFields($contentType['form']),
158-
'preview_template' => (isset($contentType['preview_template'])
159-
? $contentType['preview_template'] : ''),
160-
'render_template' => (isset($contentType['render_template'])
161-
? $contentType['render_template'] : ''),
157+
'preview_template' => $contentType['preview_template'] ?? '',
158+
'render_template' => $contentType['render_template'] ?? '',
162159
'component' => $contentType['component'],
163-
'preview_component' => (isset($contentType['preview_component'])
164-
? $contentType['preview_component']
165-
: self::DEFAULT_PREVIEW_COMPONENT),
166-
'master_component' => (isset($contentType['master_component'])
167-
? $contentType['master_component']
168-
: self::DEFAULT_MASTER_COMPONENT),
169-
'allowed_parents' => isset($contentType['allowed_parents']) ? $contentType['allowed_parents'] : [],
170-
'readers' => isset($contentType['readers']) ? $contentType['readers'] : [],
171-
'appearances' => isset($contentType['appearances']) ? $contentType['appearances'] : [],
160+
'preview_component' => $contentType['preview_component'] ?? self::DEFAULT_PREVIEW_COMPONENT,
161+
'master_component' => $contentType['master_component'] ?? self::DEFAULT_MASTER_COMPONENT,
162+
'allowed_parents' => $contentType['allowed_parents'] ?? [],
163+
'readers' => $contentType['readers'] ?? [],
164+
'appearances' => $contentType['appearances'] ?? [],
172165
'additional_data' => isset($contentType['additional_data'])
173166
? $this->additionalDataParser->toArray($contentType['additional_data'])
174167
: [],
175-
'data_mapping' => isset($contentType['data_mapping']) ? $contentType['data_mapping'] : [],
168+
'elements' => $contentType['elements'] ?? [],
169+
'converters' => $contentType['converters'] ?? [],
176170
'is_visible' => isset($contentType['is_visible']) && $contentType['is_visible'] === 'false' ? false : true
177171
];
178172
}

app/code/Magento/PageBuilder/Setup/DataConverter/Renderer/Product.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,15 @@ public function render(array $itemData, array $additionalData = []) : string
125125
],
126126
];
127127

128-
$productsCount = $eavData['product_display'] ?? 5;
129128
$conditionsEncoded = $this->conditionsHelper->encode($conditions);
130129
$widgetString = "{{widget type=\"Magento\CatalogWidget\Block\Product\ProductsList\" " .
131130
"template=\"Magento_CatalogWidget::product/widget/content/grid.phtml\" " .
132131
"type_name=\"Catalog Products List\" anchor_text=\"\" id_path=\"\" show_pager=\"0\" " .
133-
"products_count=\"$productsCount\" conditions_encoded=\"$conditionsEncoded\"}}";
132+
"products_count=\"1\" conditions_encoded=\"$conditionsEncoded\"}}";
134133

135134
$rootElementAttributes = [
136135
'data-element' => 'main',
137-
'data-role' => 'product',
136+
'data-role' => 'products',
138137
'data-appearance' => 'grid',
139138
'class' => $eavData['css_classes'] ?? '',
140139
];

0 commit comments

Comments
 (0)