Skip to content

Commit 42bb2d1

Browse files
committed
MAGETWO-90864: Media Gallery content is not showing when secure keys are enabled
Move Converter::parseAdditionalData to AdditionalData\Parser::toArray and defer its execution to Stage\Config::flattenContentTypeData
1 parent 1a5d380 commit 42bb2d1

File tree

4 files changed

+81
-63
lines changed

4 files changed

+81
-63
lines changed

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

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
namespace Magento\PageBuilder\Model;
1010

1111
use Magento\Framework\App\Config\ScopeConfigInterface;
12-
use Magento\PageBuilder\Model\Config\ContentType\Converter;
1312

1413
class Config extends \Magento\Framework\Config\Data implements \Magento\PageBuilder\Model\Config\ConfigInterface
1514
{
@@ -20,27 +19,19 @@ class Config extends \Magento\Framework\Config\Data implements \Magento\PageBuil
2019
*/
2120
private $scopeConfig;
2221

23-
/**
24-
* @var Converter
25-
*/
26-
private $converter;
27-
2822
/**
2923
* @param \Magento\PageBuilder\Model\Config\CompositeReader $reader
3024
* @param \Magento\Framework\Config\CacheInterface $cache
3125
* @param ScopeConfigInterface $scopeConfig
32-
* @param Converter $converter
3326
* @param string $cacheId
3427
*/
3528
public function __construct(
3629
\Magento\PageBuilder\Model\Config\CompositeReader $reader,
3730
\Magento\Framework\Config\CacheInterface $cache,
3831
ScopeConfigInterface $scopeConfig,
39-
Converter $converter,
4032
$cacheId = 'pagebuilder_config'
4133
) {
4234
$this->scopeConfig = $scopeConfig;
43-
$this->converter = $converter;
4435
parent::__construct($reader, $cache, $cacheId);
4536
}
4637

@@ -59,10 +50,7 @@ public function getGroups()
5950
*/
6051
public function getContentTypes(): array
6152
{
62-
$types = $this->get('types');
63-
$types = $this->converter->parseAdditionalData($types);
64-
65-
return $types;
53+
return $this->get('types');
6654
}
6755

6856
/**
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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+
$convertToProviders = function ($additionalDatum) use (&$convertToProviders) {
43+
$processedData = [];
44+
45+
foreach ($additionalDatum as $key => $value) {
46+
$processedData[$key] = $value;
47+
48+
if (is_array($value)) {
49+
$processedData[$key] = $convertToProviders($additionalDatum[$key]);
50+
} elseif (is_object($value) && $value instanceof ProviderInterface) {
51+
$processedData[$key] = $value->getData($key)[$key];
52+
}
53+
}
54+
55+
return $processedData;
56+
};
57+
58+
foreach ($additionalData as $key => $additionalDatum) {
59+
$additionalDatum = $this->argumentInterpreter->evaluate($additionalDatum);
60+
$parsedAdditionalData[$key] = $convertToProviders($additionalDatum);
61+
}
62+
63+
return $parsedAdditionalData;
64+
}
65+
}

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

Lines changed: 1 addition & 49 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
/**
@@ -51,44 +41,6 @@ public function convert($source): array
5141
];
5242
}
5343

54-
/**
55-
* Convert and evaluate additional data from arguments nodes to array
56-
*
57-
* @param array $types
58-
* @return array
59-
*/
60-
public function parseAdditionalData(array $types): array
61-
{
62-
$convertToProviders = function ($additionalDatum) use (&$convertToProviders) {
63-
$processedData = [];
64-
65-
foreach ($additionalDatum as $key => $value) {
66-
$processedData[$key] = $value;
67-
68-
if (is_array($value)) {
69-
$processedData[$key] = $convertToProviders($additionalDatum[$key]);
70-
} elseif (is_object($value) && $value instanceof ProviderInterface) {
71-
$processedData[$key] = $value->getData($key)[$key];
72-
}
73-
}
74-
75-
return $processedData;
76-
};
77-
78-
foreach ($types as &$type) {
79-
if (!isset($type['additional_data'])) {
80-
continue;
81-
}
82-
83-
foreach ($type['additional_data'] as &$additionalDatum) {
84-
$additionalDatum = $this->argumentInterpreter->evaluate($additionalDatum);
85-
$additionalDatum = $convertToProviders($additionalDatum);
86-
}
87-
}
88-
89-
return $types;
90-
}
91-
9244
/**
9345
* Convert types
9446
*

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
];

0 commit comments

Comments
 (0)