Skip to content

Commit da65630

Browse files
committed
Merge remote-tracking branch 'remotes/origin/MAGETWO-90864-Media-Gallery-Secure-Key' into team3-delivery-bug-fixes
2 parents 51c6888 + f3964f9 commit da65630

File tree

5 files changed

+219
-64
lines changed

5 files changed

+219
-64
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
7+
declare(strict_types=1);
8+
69
namespace Magento\PageBuilder\Model;
710

811
use Magento\Framework\App\Config\ScopeConfigInterface;
@@ -43,9 +46,9 @@ public function getGroups()
4346
/**
4447
* Return all content types
4548
*
46-
* @return array|mixed|null
49+
* @return array
4750
*/
48-
public function getContentTypes()
51+
public function getContentTypes(): array
4952
{
5053
return $this->get('types');
5154
}
@@ -55,7 +58,7 @@ public function getContentTypes()
5558
*
5659
* @return bool
5760
*/
58-
public function isEnabled()
61+
public function isEnabled(): bool
5962
{
6063
return (bool)$this->scopeConfig->getValue(
6164
\Magento\PageBuilder\Model\Config::IS_PAGEBUILDER_ENABLED
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\PageBuilder\Model\Config\ContentType\AdditionalData;
10+
11+
use Magento\Framework\Data\Argument\InterpreterInterface;
12+
13+
/**
14+
* Additional Data Parser for evaluation of data providers at runtime
15+
*/
16+
class Parser
17+
{
18+
/**
19+
* @var InterpreterInterface
20+
*/
21+
private $argumentInterpreter;
22+
23+
/**
24+
* @param InterpreterInterface $argumentInterpreter
25+
*/
26+
public function __construct(
27+
InterpreterInterface $argumentInterpreter
28+
) {
29+
$this->argumentInterpreter = $argumentInterpreter;
30+
}
31+
32+
/**
33+
* Convert and evaluate additional data from arguments nodes to array
34+
*
35+
* @param array $additionalData
36+
* @return array
37+
*/
38+
public function toArray(array $additionalData): array
39+
{
40+
$parsedAdditionalData = [];
41+
42+
foreach ($additionalData as $key => $additionalDataItem) {
43+
$additionalDataItem = $this->argumentInterpreter->evaluate($additionalDataItem);
44+
$parsedAdditionalData[$key] = $this->evaluateProviders($additionalDataItem);
45+
}
46+
47+
return $parsedAdditionalData;
48+
}
49+
50+
/**
51+
* Evaluate ProviderInterface objects
52+
*
53+
* @param array $additionalDataItem
54+
* @return array
55+
*/
56+
private function evaluateProviders(array $additionalDataItem): array
57+
{
58+
$processedData = [];
59+
60+
foreach ($additionalDataItem as $key => $value) {
61+
$processedData[$key] = $value;
62+
63+
if (is_array($value)) {
64+
$processedData[$key] = $this->evaluateProviders($additionalDataItem[$key]);
65+
} elseif (is_object($value) && $value instanceof ProviderInterface) {
66+
$processedData[$key] = $value->getData($key)[$key];
67+
}
68+
}
69+
70+
return $processedData;
71+
}
72+
}

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

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
namespace Magento\PageBuilder\Model\Config\ContentType;
1010

1111
use Magento\Framework\ObjectManager\Config\Mapper\ArgumentParser;
12-
use Magento\Framework\Data\Argument\InterpreterInterface;
13-
use Magento\PageBuilder\Model\Config\ContentType\AdditionalData\ProviderInterface;
1412

1513
class Converter implements \Magento\Framework\Config\ConverterInterface
1614
{
@@ -19,22 +17,14 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
1917
*/
2018
private $parser;
2119

22-
/**
23-
* @var InterpreterInterface
24-
*/
25-
private $argumentInterpreter;
26-
2720
/**
2821
* Converter constructor.
2922
* @param ArgumentParser $parser
30-
* @param InterpreterInterface $argumentInterpreter
3123
*/
3224
public function __construct(
33-
ArgumentParser $parser,
34-
InterpreterInterface $argumentInterpreter
25+
ArgumentParser $parser
3526
) {
3627
$this->parser = $parser;
37-
$this->argumentInterpreter = $argumentInterpreter;
3828
}
3929

4030
/**
@@ -247,15 +237,17 @@ private function convertAdditionalData(\DOMElement $elementNode): array
247237
if (!$xmlArgumentsNodes->length) {
248238
return $additionalData;
249239
}
250-
$typeArguments = [];
240+
251241
/** @var $xmlArgumentsNode \DOMElement */
252242
foreach ($xmlArgumentsNodes as $xmlArgumentsNode) {
253243
$parsedArgumentsData = $this->parser->parse($xmlArgumentsNode);
254244
$argumentName = $xmlArgumentsNode->attributes->getNamedItem('name')->nodeValue;
255-
$typeArguments[$argumentName] = $this->argumentInterpreter->evaluate(
256-
$parsedArgumentsData
257-
);
258-
$additionalData += $this->toArray($typeArguments);
245+
246+
if (!isset($additionalData[$argumentName])) {
247+
$additionalData[$argumentName] = [];
248+
}
249+
250+
$additionalData[$argumentName] += $parsedArgumentsData;
259251
}
260252

261253
return $additionalData;
@@ -465,25 +457,4 @@ private function getAttributeValue(\DOMElement $attributeNode, $attributeName)
465457
? $attributeNode->attributes->getNamedItem($attributeName)->nodeValue
466458
: null;
467459
}
468-
469-
/**
470-
* Convert arguments node from additional data to array
471-
* @param array $typeArguments
472-
* @return array
473-
*/
474-
private function toArray(array $typeArguments)
475-
{
476-
$processedData = [];
477-
foreach ($typeArguments as $key => $value) {
478-
if (is_array($value)) {
479-
$processedData[$key] = $this->toArray($typeArguments[$key]);
480-
} elseif (is_object($value) && $value instanceof ProviderInterface) {
481-
$processedData[$key] = $value->getData($key)[$key];
482-
} else {
483-
$processedData[$key] = $value;
484-
}
485-
}
486-
487-
return $processedData;
488-
}
489460
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
7+
declare(strict_types=1);
8+
69
namespace Magento\PageBuilder\Model\Stage;
710

811
use Magento\Framework\UrlInterface;
@@ -37,26 +40,34 @@ class Config
3740
*/
3841
private $frontendUrlBuilder;
3942

43+
/**
44+
* @var \Magento\PageBuilder\Model\Config\ContentType\AdditionalData\Parser
45+
*/
46+
private $additionalDataParser;
47+
4048
/**
4149
* Constructor
4250
*
4351
* @param \Magento\PageBuilder\Model\Config\ConfigInterface $config
4452
* @param Config\UiComponentConfig $uiComponentConfig
4553
* @param \Magento\Framework\UrlInterface $urlBuilder
4654
* @param \Magento\Framework\Url $frontendUrlBuilder
55+
* @param \Magento\PageBuilder\Model\Config\ContentType\AdditionalData\Parser $additionalDataParser
4756
* @param array $data
4857
*/
4958
public function __construct(
5059
\Magento\PageBuilder\Model\Config\ConfigInterface $config,
5160
Config\UiComponentConfig $uiComponentConfig,
5261
\Magento\Framework\UrlInterface $urlBuilder,
5362
\Magento\Framework\Url $frontendUrlBuilder,
63+
\Magento\PageBuilder\Model\Config\ContentType\AdditionalData\Parser $additionalDataParser,
5464
array $data = []
5565
) {
5666
$this->config = $config;
5767
$this->uiComponentConfig = $uiComponentConfig;
5868
$this->urlBuilder = $urlBuilder;
5969
$this->frontendUrlBuilder = $frontendUrlBuilder;
70+
$this->additionalDataParser = $additionalDataParser;
6071
$this->data = $data;
6172
}
6273

@@ -141,7 +152,9 @@ private function flattenContentTypeData($name, $contentType)
141152
'allowed_parents' => isset($contentType['allowed_parents']) ? $contentType['allowed_parents'] : [],
142153
'readers' => isset($contentType['readers']) ? $contentType['readers'] : [],
143154
'appearances' => isset($contentType['appearances']) ? $contentType['appearances'] : [],
144-
'additional_data' => isset($contentType['additional_data']) ? $contentType['additional_data'] : [],
155+
'additional_data' => isset($contentType['additional_data'])
156+
? $this->additionalDataParser->toArray($contentType['additional_data'])
157+
: [],
145158
'data_mapping' => isset($contentType['data_mapping']) ? $contentType['data_mapping'] : [],
146159
'is_visible' => isset($contentType['is_visible']) && $contentType['is_visible'] === 'false' ? false : true
147160
];

dev/tests/integration/testsuite/Magento/PageBuilder/_files/content_type/expected_merged_array.php

Lines changed: 119 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -86,32 +86,128 @@
8686
],
8787
'additional_data' => [
8888
'config1' => [
89-
'settingWithTypeString' => 'string',
90-
'settingWithTypeObject' => 'test data',
91-
'settingWithTypeNull' => null,
92-
'settingWithTypeInteger' => '20',
93-
'settingWithTypeBooleanTrue' => true,
94-
'settingWithTypeBooleanFalse' => false,
95-
'settingWithTypeNumber2' => '-90'
89+
'name' => 'config1',
90+
'xsi:type' => 'array',
91+
'item' => [
92+
'settingWithTypeString' => [
93+
'name' => 'settingWithTypeString',
94+
'xsi:type' => 'string',
95+
'value' => 'string',
96+
],
97+
'settingWithTypeBooleanTrue' => [
98+
'name' => 'settingWithTypeBooleanTrue',
99+
'xsi:type' => 'boolean',
100+
'value' => 'true',
101+
],
102+
'settingWithTypeBooleanFalse' => [
103+
'name' => 'settingWithTypeBooleanFalse',
104+
'xsi:type' => 'boolean',
105+
'value' => 'false',
106+
],
107+
'settingWithTypeInteger' => [
108+
'name' => 'settingWithTypeInteger',
109+
'xsi:type' => 'number',
110+
'value' => '20',
111+
],
112+
'settingWithTypeNull' => [
113+
'name' => 'settingWithTypeNull',
114+
'xsi:type' => 'null',
115+
],
116+
'settingWithTypeNumber2' => [
117+
'name' => 'settingWithTypeNumber2',
118+
'xsi:type' => 'number',
119+
'value' => '-90',
120+
],
121+
'settingWithTypeObject' => [
122+
'name' => 'settingWithTypeObject',
123+
'xsi:type' => 'object',
124+
'value' => 'Magento\\TestModulePageBuilderDataMigration\\Model\\Config\\'
125+
. 'ContentType\\AdditionalData\\Provider\\TestData',
126+
],
127+
],
96128
],
97129
'config2' => [
98-
'arrayConfig' => [
99-
'settingWithTypeString' => 'string',
100-
'settingWithTypeObject' => 'test data',
101-
'settingWithTypeNull' => null,
102-
'settingWithTypeInteger' => '20',
103-
'settingWithTypeBooleanTrue' => true,
104-
'settingWithTypeBooleanFalse' => false,
105-
'settingWithTypeNumber2' => '-90'
106-
]
130+
'name' => 'config2',
131+
'xsi:type' => 'array',
132+
'item' => [
133+
'arrayConfig' => [
134+
'name' => 'arrayConfig',
135+
'xsi:type' => 'array',
136+
'item' => [
137+
'settingWithTypeString' => [
138+
'name' => 'settingWithTypeString',
139+
'xsi:type' => 'string',
140+
'value' => 'string',
141+
],
142+
'settingWithTypeBooleanTrue' => [
143+
'name' => 'settingWithTypeBooleanTrue',
144+
'xsi:type' => 'boolean',
145+
'value' => 'true',
146+
],
147+
'settingWithTypeBooleanFalse' => [
148+
'name' => 'settingWithTypeBooleanFalse',
149+
'xsi:type' => 'boolean',
150+
'value' => 'false',
151+
],
152+
'settingWithTypeInteger' => [
153+
'name' => 'settingWithTypeInteger',
154+
'xsi:type' => 'number',
155+
'value' => '20',
156+
],
157+
'settingWithTypeNull' => [
158+
'name' => 'settingWithTypeNull',
159+
'xsi:type' => 'null',
160+
],
161+
'settingWithTypeNumber2' => [
162+
'name' => 'settingWithTypeNumber2',
163+
'xsi:type' => 'number',
164+
'value' => '-90',
165+
],
166+
'settingWithTypeObject' => [
167+
'name' => 'settingWithTypeObject',
168+
'xsi:type' => 'object',
169+
'value' => 'Magento\\TestModulePageBuilderDataMigration\\Model\\Config\\'
170+
. 'ContentType\\AdditionalData\\Provider\\TestData',
171+
],
172+
],
173+
],
174+
],
175+
],
176+
'settingWithTypeString' => [
177+
'name' => 'settingWithTypeString',
178+
'xsi:type' => 'string',
179+
'value' => 'string',
180+
],
181+
'settingWithTypeBooleanTrue' => [
182+
'name' => 'settingWithTypeBooleanTrue',
183+
'xsi:type' => 'boolean',
184+
'value' => 'true',
185+
],
186+
'settingWithTypeBooleanFalse' => [
187+
'name' => 'settingWithTypeBooleanFalse',
188+
'xsi:type' => 'boolean',
189+
'value' => 'false',
190+
],
191+
'settingWithTypeInteger' => [
192+
'name' => 'settingWithTypeInteger',
193+
'xsi:type' => 'number',
194+
'value' => '20',
195+
],
196+
'settingWithTypeNull' => [
197+
'name' => 'settingWithTypeNull',
198+
'xsi:type' => 'null',
199+
],
200+
'settingWithTypeNumber2' => [
201+
'name' => 'settingWithTypeNumber2',
202+
'xsi:type' => 'number',
203+
'value' => '-90',
204+
],
205+
'settingWithTypeObject' => [
206+
'name' => 'settingWithTypeObject',
207+
'xsi:type' => 'object',
208+
'value' => 'Magento\\TestModulePageBuilderDataMigration\\Model\\Config\\'
209+
. 'ContentType\\AdditionalData\\Provider\\TestData',
107210
],
108-
'settingWithTypeString' => 'string',
109-
'settingWithTypeObject' => 'test data',
110-
'settingWithTypeNull' => null,
111-
'settingWithTypeInteger' => '20',
112-
'settingWithTypeBooleanTrue' => true,
113-
'settingWithTypeBooleanFalse' => false,
114-
'settingWithTypeNumber2' => '-90'
115211
],
116212
],
117213
'type2' => [

0 commit comments

Comments
 (0)