Skip to content

Commit 4e410b8

Browse files
committed
MAGETWO-90864: Media Gallery content is not showing when secure keys are enabled
Evaluate additional data during every runtime and prevent its value from being cached
1 parent f517305 commit 4e410b8

File tree

2 files changed

+66
-39
lines changed

2 files changed

+66
-39
lines changed

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

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,24 @@
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;
12+
use Magento\Framework\Data\Argument\InterpreterInterface;
13+
use Magento\PageBuilder\Model\Config\ContentType\AdditionalData\ProviderInterface;
914

1015
class Config extends \Magento\Framework\Config\Data implements \Magento\PageBuilder\Model\Config\ConfigInterface
1116
{
1217
const IS_PAGEBUILDER_ENABLED = 'cms/pagebuilder/enabled';
1318

19+
/**
20+
* @var InterpreterInterface
21+
*/
22+
private $argumentInterpreter;
23+
1424
/**
1525
* @var ScopeConfigInterface
1626
*/
@@ -20,15 +30,18 @@ class Config extends \Magento\Framework\Config\Data implements \Magento\PageBuil
2030
* @param \Magento\PageBuilder\Model\Config\CompositeReader $reader
2131
* @param \Magento\Framework\Config\CacheInterface $cache
2232
* @param ScopeConfigInterface $scopeConfig
33+
* @param InterpreterInterface $argumentInterpreter
2334
* @param string $cacheId
2435
*/
2536
public function __construct(
2637
\Magento\PageBuilder\Model\Config\CompositeReader $reader,
2738
\Magento\Framework\Config\CacheInterface $cache,
2839
ScopeConfigInterface $scopeConfig,
40+
InterpreterInterface $argumentInterpreter,
2941
$cacheId = 'pagebuilder_config'
3042
) {
3143
$this->scopeConfig = $scopeConfig;
44+
$this->argumentInterpreter = $argumentInterpreter;
3245
parent::__construct($reader, $cache, $cacheId);
3346
}
3447

@@ -43,22 +56,63 @@ public function getGroups()
4356
/**
4457
* Return all content types
4558
*
46-
* @return array|mixed|null
59+
* @return array
4760
*/
48-
public function getContentTypes()
61+
public function getContentTypes(): array
4962
{
50-
return $this->get('types');
63+
$types = $this->get('types');
64+
$types = $this->parseAdditionalData($types);
65+
66+
return $types;
5167
}
5268

5369
/**
5470
* Returns config setting if page builder enabled
5571
*
5672
* @return bool
5773
*/
58-
public function isEnabled()
74+
public function isEnabled(): bool
5975
{
6076
return (bool)$this->scopeConfig->getValue(
6177
\Magento\PageBuilder\Model\Config::IS_PAGEBUILDER_ENABLED
6278
);
6379
}
80+
81+
/**
82+
* Convert and evaluate additional data from arguments nodes to array
83+
*
84+
* @param array $types
85+
* @return array
86+
*/
87+
private function parseAdditionalData(array $types): array
88+
{
89+
$convertToProviders = function ($additionalDatum) use (&$convertToProviders) {
90+
$processedData = [];
91+
92+
foreach ($additionalDatum as $key => $value) {
93+
if (is_array($value)) {
94+
$processedData[$key] = $convertToProviders($additionalDatum[$key]);
95+
} elseif (is_object($value) && $value instanceof ProviderInterface) {
96+
$processedData[$key] = $value->getData($key)[$key];
97+
} else {
98+
$processedData[$key] = $value;
99+
}
100+
}
101+
102+
return $processedData;
103+
};
104+
105+
foreach ($types as &$type) {
106+
if (!isset($type['additional_data'])) {
107+
continue;
108+
}
109+
110+
foreach ($type['additional_data'] as &$additionalDatum) {
111+
$additionalDatum = $this->argumentInterpreter->evaluate($additionalDatum);
112+
$additionalDatum = $convertToProviders($additionalDatum);
113+
}
114+
}
115+
116+
return $types;
117+
}
64118
}

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

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,14 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
1919
*/
2020
private $parser;
2121

22-
/**
23-
* @var InterpreterInterface
24-
*/
25-
private $argumentInterpreter;
26-
2722
/**
2823
* Converter constructor.
2924
* @param ArgumentParser $parser
30-
* @param InterpreterInterface $argumentInterpreter
3125
*/
3226
public function __construct(
33-
ArgumentParser $parser,
34-
InterpreterInterface $argumentInterpreter
27+
ArgumentParser $parser
3528
) {
3629
$this->parser = $parser;
37-
$this->argumentInterpreter = $argumentInterpreter;
3830
}
3931

4032
/**
@@ -247,15 +239,17 @@ private function convertAdditionalData(\DOMElement $elementNode): array
247239
if (!$xmlArgumentsNodes->length) {
248240
return $additionalData;
249241
}
250-
$typeArguments = [];
242+
251243
/** @var $xmlArgumentsNode \DOMElement */
252244
foreach ($xmlArgumentsNodes as $xmlArgumentsNode) {
253245
$parsedArgumentsData = $this->parser->parse($xmlArgumentsNode);
254246
$argumentName = $xmlArgumentsNode->attributes->getNamedItem('name')->nodeValue;
255-
$typeArguments[$argumentName] = $this->argumentInterpreter->evaluate(
256-
$parsedArgumentsData
257-
);
258-
$additionalData += $this->toArray($typeArguments);
247+
248+
if (!isset($additionalData[$argumentName])) {
249+
$additionalData[$argumentName] = [];
250+
}
251+
252+
$additionalData[$argumentName] += $parsedArgumentsData;
259253
}
260254

261255
return $additionalData;
@@ -465,25 +459,4 @@ private function getAttributeValue(\DOMElement $attributeNode, $attributeName)
465459
? $attributeNode->attributes->getNamedItem($attributeName)->nodeValue
466460
: null;
467461
}
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-
}
489462
}

0 commit comments

Comments
 (0)