Skip to content

Commit eb3115a

Browse files
committed
Merge remote-tracking branch 'mainline/develop' into MAGETWO-87081-video
2 parents 08d4d9b + eb0daa1 commit eb3115a

File tree

7 files changed

+223
-66
lines changed

7 files changed

+223
-66
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
];

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderImageTest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
<testCaseId value="MAGETWO-89375"/>
1919
<group value="pagebuilder"/>
2020
<group value="pagebuilder-image"/>
21+
<!-- MAGETWO-92859 -->
22+
<group value="skip" />
2123
</annotations>
2224
<before>
2325
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>

app/code/Magento/PageBuilder/view/adminhtml/web/template/content-type/image/full-width/master.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<figcaption if="data.caption.html()"
3636
attr="data.caption.attributes"
3737
css="data.caption.css"
38-
ko-style="data.caption.style"
39-
text="data.caption.html">
38+
html="data.caption.html"
39+
ko-style="data.caption.style">
4040
</figcaption>
4141
</figure>

0 commit comments

Comments
 (0)