Skip to content

Commit 230e010

Browse files
author
Magento CICD
authored
merge magento/2.3.0-release into magento-pangolin/MFTF2.3.9
2 parents a9622b5 + 5a4cc2d commit 230e010

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

app/code/Magento/Config/App/Config/Type/System.php

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*
2323
* @api
2424
* @since 100.1.2
25+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2526
*/
2627
class System implements ConfigTypeInterface
2728
{
@@ -131,6 +132,32 @@ public function get($path = '')
131132
return $this->getWithParts($path);
132133
}
133134

135+
/**
136+
* Merge newly loaded config data into already loaded.
137+
*
138+
* @param array $newData
139+
* @return void
140+
*/
141+
private function mergeData(array $newData): void
142+
{
143+
if (array_key_exists(ScopeInterface::SCOPE_DEFAULT, $newData)) {
144+
//Sometimes new data may contain links to arrays and we don't want that.
145+
$this->data[ScopeInterface::SCOPE_DEFAULT] = (array)$newData[ScopeInterface::SCOPE_DEFAULT];
146+
unset($newData[ScopeInterface::SCOPE_DEFAULT]);
147+
}
148+
foreach ($newData as $scopeType => $scopeTypeData) {
149+
if (!array_key_exists($scopeType, $this->data)) {
150+
//Sometimes new data may contain links to arrays and we don't want that.
151+
$this->data[$scopeType] = (array)$scopeTypeData;
152+
} else {
153+
foreach ($scopeTypeData as $scopeId => $scopeData) {
154+
//Sometimes new data may contain links to arrays and we don't want that.
155+
$this->data[$scopeType][$scopeId] = (array)$scopeData;
156+
}
157+
}
158+
}
159+
}
160+
134161
/**
135162
* Proceed with parts extraction from path.
136163
*
@@ -143,8 +170,10 @@ private function getWithParts($path)
143170

144171
if (count($pathParts) === 1 && $pathParts[0] !== ScopeInterface::SCOPE_DEFAULT) {
145172
if (!isset($this->data[$pathParts[0]])) {
173+
//First filling data property with unprocessed data for post-processors to be able to use.
146174
$data = $this->readData();
147-
$this->data = array_replace_recursive($this->data, $this->postProcessor->process($data));
175+
//Post-processing only the data we know is not yet processed.
176+
$this->mergeData($this->postProcessor->process($data));
148177
}
149178

150179
return $this->data[$pathParts[0]];
@@ -154,12 +183,11 @@ private function getWithParts($path)
154183

155184
if ($scopeType === ScopeInterface::SCOPE_DEFAULT) {
156185
if (!isset($this->data[$scopeType])) {
157-
$this->data = array_replace_recursive(
158-
$this->data,
159-
$scopeData = $this->loadDefaultScopeData($scopeType)
160-
);
186+
//Adding unprocessed data to the data property so it can be used in post-processing.
187+
$this->mergeData($scopeData = $this->loadDefaultScopeData($scopeType));
188+
//Only post-processing the data we know is raw.
161189
$scopeData = $this->postProcessor->process($scopeData);
162-
$this->data = array_replace_recursive($this->data, $scopeData);
190+
$this->mergeData($scopeData);
163191
}
164192

165193
return $this->getDataByPathParts($this->data[$scopeType], $pathParts);
@@ -169,9 +197,11 @@ private function getWithParts($path)
169197

170198
if (!isset($this->data[$scopeType][$scopeId])) {
171199
$scopeData = $this->loadScopeData($scopeType, $scopeId);
172-
$this->data = array_replace_recursive($this->data, $scopeData);
200+
//Adding unprocessed data to the data property so it can be used in post-processing.
201+
$this->mergeData($scopeData);
202+
//Only post-processing the data we know is raw.
173203
$scopeData = $this->postProcessor->process($scopeData);
174-
$this->data = array_replace_recursive($this->data, $scopeData);
204+
$this->mergeData($scopeData);
175205
}
176206

177207
return isset($this->data[$scopeType][$scopeId])

0 commit comments

Comments
 (0)