Skip to content

Commit 7782438

Browse files
author
Michael Yu
committed
MC-2217: Add support for new config structure
- Updated the xsd to support new configurations - Updated converter, reader, and parser to support the new attributes
1 parent 9538e28 commit 7782438

File tree

7 files changed

+34
-39
lines changed

7 files changed

+34
-39
lines changed

app/code/Magento/PageBuilder/Model/Config/ContentType/AdditionalData/Parser.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function __construct(
3030
}
3131

3232
/**
33-
* Convert and evaluate additional data from arguments nodes to array
33+
* Convert and evaluate additional data from item nodes to array
3434
*
3535
* @param array $additionalData
3636
* @return array

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

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ private function convertTypes(\DOMDocument $source): array
5555
/** @var \DOMNode $contentType */
5656
foreach ($contentTypes as $contentType) {
5757
$name = $contentType->attributes->getNamedItem('name')->nodeValue;
58+
/** @var \DOMElement $key */
59+
/** @var \DOMElement $value */
60+
foreach ($contentType->attributes as $key => $value) {
61+
$typesData[$name][$key] = $contentType->hasAttribute($key)
62+
? $contentType->attributes->getNamedItem($key)->nodeValue
63+
: null;
64+
}
5865
/** @var \DOMElement $childNode */
5966
foreach ($contentType->childNodes as $childNode) {
6067
if ($this->isConfigNode($childNode)) {
@@ -113,14 +120,6 @@ private function convertAppearanceData(\DOMElement $appearanceNode): array
113120
$appearanceData,
114121
$this->convertAppearanceProperties($appearanceNode)
115122
);
116-
$previewTemplateNode = $appearanceNode->getElementsByTagName('preview_template')->item(0);
117-
if ($previewTemplateNode) {
118-
$appearanceData['preview_template'] = $previewTemplateNode->nodeValue;
119-
}
120-
$renderTemplateNode = $appearanceNode->getElementsByTagName('render_template')->item(0);
121-
if ($renderTemplateNode) {
122-
$appearanceData['render_template'] = $renderTemplateNode->nodeValue;
123-
}
124123
$readerNode = $appearanceNode->getElementsByTagName('reader')->item(0);
125124
if ($readerNode && $readerNode->nodeValue) {
126125
$appearanceData['readers'] = [$readerNode->nodeValue];
@@ -131,6 +130,9 @@ private function convertAppearanceData(\DOMElement $appearanceNode): array
131130
if ($dataMappingNode) {
132131
$appearanceData['data_mapping'] = $this->convertDataMapping($dataMappingNode);
133132
}
133+
$appearanceData['preview_template'] = $this->getAttributeValue($appearanceNode, 'preview_template');
134+
$appearanceData['render_template'] = $this->getAttributeValue($appearanceNode, 'render_template');
135+
$appearanceData['reader'] = $this->getAttributeValue($appearanceNode, 'reader');
134136
$appearanceData['default'] = $this->getAttributeValue($appearanceNode, 'default');
135137
$formNode = $appearanceNode->getElementsByTagName('form')->item(0);
136138
if ($formNode && $formNode->nodeValue) {
@@ -232,22 +234,23 @@ private function convertDataMapping(\DOMElement $childNode): array
232234
private function convertAdditionalData(\DOMElement $elementNode): array
233235
{
234236
$additionalData = [];
235-
$xmlArgumentsNodes = $elementNode->getElementsByTagName('arguments');
237+
$xmlItemNodes = $elementNode->childNodes;
236238

237-
if (!$xmlArgumentsNodes->length) {
239+
if (!$xmlItemNodes->length) {
238240
return $additionalData;
239241
}
240242

241-
/** @var $xmlArgumentsNode \DOMElement */
242-
foreach ($xmlArgumentsNodes as $xmlArgumentsNode) {
243-
$parsedArgumentsData = $this->parser->parse($xmlArgumentsNode);
244-
$argumentName = $xmlArgumentsNode->attributes->getNamedItem('name')->nodeValue;
243+
/** @var $xmlItemNode \DOMElement */
244+
foreach ($xmlItemNodes as $xmlItemNode) {
245+
if ($xmlItemNode->nodeType == XML_ELEMENT_NODE && $xmlItemNode->nodeName === 'item') {
246+
$parsedItemData = $this->parser->parse($xmlItemNode);
247+
$itemName = $xmlItemNode->attributes->getNamedItem('name')->nodeValue;
245248

246-
if (!isset($additionalData[$argumentName])) {
247-
$additionalData[$argumentName] = [];
249+
if (!isset($additionalData[$itemName])) {
250+
$additionalData[$itemName] = [];
251+
}
252+
$additionalData[$itemName] += $parsedItemData;
248253
}
249-
250-
$additionalData[$argumentName] += $parsedArgumentsData;
251254
}
252255

253256
return $additionalData;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Reader extends \Magento\Framework\Config\Reader\Filesystem
2929
=> 'name',
3030
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/style_properties/static_property'
3131
=> 'source',
32-
self::TYPE_PATH . '/additional_data/arguments' => 'name',
32+
self::TYPE_PATH . '/additional_data/item' => 'name',
3333
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/attributes/attribute' => 'name',
3434
self::TYPE_PATH . '/appearances/appearance/data_mapping/elements/element/attributes/complex_attribute'
3535
=> 'name',

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,11 @@ private function convertGroups(\DOMDocument $source): array
4040
if ($group->nodeType == XML_ELEMENT_NODE && $group->tagName == 'group') {
4141
$name = $group->attributes->getNamedItem('name')->nodeValue;
4242
/** @var \DOMElement $childNode */
43-
foreach ($group->childNodes as $childNode) {
44-
if ($this->isConfigNode($childNode)) {
45-
$groupsData[$name][$childNode->nodeName] = $childNode->nodeValue;
46-
}
43+
foreach ($group->attributes as $key => $value) {
44+
$groupsData[$name][$key] = $group->hasAttribute($key)
45+
? $group->attributes->getNamedItem($key)->nodeValue
46+
: null;
4747
}
48-
$groupsData[$name]['sortOrder'] = $group->hasAttribute('sortOrder')
49-
? $group->attributes->getNamedItem('sortOrder')->nodeValue
50-
: null;
5148
}
5249
}
5350
uasort($groupsData, function ($firstElement, $secondElement) {

app/code/Magento/PageBuilder/etc/content_type.xsd

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@
6262
</xs:complexType>
6363
</xs:element>
6464
<xs:element type="data_mapping" name="data_mapping" minOccurs="0"/>
65-
<xs:element type="xs:string" name="preview_template" minOccurs="0" maxOccurs="1"/>
66-
<xs:element type="xs:string" name="render_template" minOccurs="0" maxOccurs="1"/>
67-
<xs:element type="xs:string" name="reader" minOccurs="0" maxOccurs="1"/>
6865
<xs:element type="readers" name="readers" minOccurs="0" maxOccurs="1"/>
6966
<xs:element type="xs:string" name="form" minOccurs="0" maxOccurs="1"/>
7067
</xs:choice>
7168
<xs:attribute type="xs:string" name="name" use="required"/>
72-
<xs:attribute type="xs:boolean" name="default"/>
69+
<xs:attribute type="xs:boolean" name="default" use="optional"/>
70+
<xs:attribute type="xs:string" name="preview_template" use="optional"/>
71+
<xs:attribute type="xs:string" name="render_template" use="optional"/>
72+
<xs:attribute type="xs:string" name="reader" use="optional"/>
7373
</xs:complexType>
7474
<xs:complexType name="allowed_parents">
7575
<xs:sequence>
@@ -140,7 +140,7 @@
140140
</xs:complexType>
141141
<xs:complexType name="additional_data">
142142
<xs:choice maxOccurs="unbounded">
143-
<xs:element type="argumentType" name="arguments" minOccurs="1" maxOccurs="unbounded"/>
143+
<xs:element type="argumentType" name="item" minOccurs="1" maxOccurs="unbounded"/>
144144
</xs:choice>
145145
</xs:complexType>
146146
<xs:complexType name="property">

app/code/Magento/PageBuilder/etc/content_type_merged.xsd

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,6 @@
117117
</xs:sequence>
118118
</xs:complexType>
119119
<xs:complexType name="item">
120-
<xs:sequence>
121-
<xs:element type="item" name="item" minOccurs="0" maxOccurs="unbounded"/>
122-
</xs:sequence>
123120
<xs:attribute type="xs:string" name="name" use="required"/>
124121
<xs:attribute type="xs:string" name="value" use="required"/>
125122
</xs:complexType>
@@ -143,7 +140,7 @@
143140
</xs:complexType>
144141
<xs:complexType name="additional_data">
145142
<xs:choice maxOccurs="unbounded">
146-
<xs:element type="item" name="item" minOccurs="1" maxOccurs="unbounded"/>
143+
<xs:element type="argumentType" name="item" minOccurs="1" maxOccurs="unbounded"/>
147144
</xs:choice>
148145
</xs:complexType>
149146
<xs:complexType name="property">

app/code/Magento/PageBuilder/etc/group_merged.xsd

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414
<xs:sequence>
1515
<xs:element name="group" minOccurs="0" maxOccurs="unbounded">
1616
<xs:complexType>
17-
<xs:sequence>
18-
<xs:element type="xs:string" name="label"/>
19-
</xs:sequence>
2017
<xs:attribute type="xs:string" name="name" use="required"/>
2118
<xs:attribute type="xs:string" name="translate" use="required"/>
2219
<xs:attribute type="xs:byte" name="sortOrder" use="optional"/>
20+
<xs:attribute type="xs:string" name="label" use="optional"/>
2321
</xs:complexType>
2422
</xs:element>
2523
</xs:sequence>

0 commit comments

Comments
 (0)