Skip to content

Commit fe0f622

Browse files
committed
Merge remote-tracking branch 'origin/2.4.7-beta1-develop' into Hammer_release_regression_31may2023
2 parents 1ff5827 + 7c7461a commit fe0f622

File tree

27 files changed

+510
-360
lines changed

27 files changed

+510
-360
lines changed

app/code/Magento/CatalogGraphQl/Model/AttributesJoiner.php

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use GraphQL\Language\AST\FieldNode;
1111
use GraphQL\Language\AST\InlineFragmentNode;
1212
use GraphQL\Language\AST\NodeKind;
13+
use GraphQL\Language\AST\NodeList;
1314
use Magento\Eav\Model\Entity\Collection\AbstractCollection;
1415
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1516
use Magento\Framework\ObjectManager\ResetAfterRequestInterface;
@@ -69,37 +70,49 @@ public function getQueryFields(FieldNode $fieldNode, ResolveInfo $resolveInfo):
6970
{
7071
if (null === $this->getFieldNodeSelections($fieldNode)) {
7172
$query = $fieldNode->selectionSet->selections;
72-
$selectedFields = [];
73-
$fragmentFields = [];
7473
/** @var FieldNode $field */
75-
foreach ($query as $field) {
76-
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
77-
$fragmentFields[] = $this->addInlineFragmentFields($resolveInfo, $field);
78-
} elseif ($field->kind === NodeKind::FRAGMENT_SPREAD &&
79-
($spreadFragmentNode = $resolveInfo->fragments[$field->name->value])) {
80-
81-
foreach ($spreadFragmentNode->selectionSet->selections as $spreadNode) {
82-
if (isset($spreadNode->selectionSet->selections)
83-
&& $spreadNode->kind === NodeKind::INLINE_FRAGMENT) {
84-
$fragmentFields[] = $this->addInlineFragmentFields($resolveInfo, $spreadNode);
85-
} elseif (isset($spreadNode->selectionSet->selections)
86-
&& $spreadNode->kind !== NodeKind::INLINE_FRAGMENT) {
87-
$fragmentFields[] = $this->getQueryFields($spreadNode, $resolveInfo);
88-
} else {
74+
$result = $this->getQueryData($query, $resolveInfo);
75+
if ($result['fragmentFields']) {
76+
$result['selectedFields'] = array_merge([], $result['selectedFields'], ...$result['fragmentFields']);
77+
}
78+
$this->setSelectionsForFieldNode($fieldNode, array_unique($result['selectedFields']));
79+
}
80+
return $this->getFieldNodeSelections($fieldNode);
81+
}
82+
83+
/**
84+
* Get an array of queried data.
85+
*
86+
* @param NodeList $query
87+
* @param ResolveInfo $resolveInfo
88+
* @return array
89+
*/
90+
public function getQueryData(NodeList $query, ResolveInfo $resolveInfo): array
91+
{
92+
$selectedFields = $fragmentFields = $data = [];
93+
foreach ($query as $field) {
94+
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
95+
$fragmentFields[] = $this->addInlineFragmentFields($resolveInfo, $field);
96+
} elseif ($field->kind === NodeKind::FRAGMENT_SPREAD &&
97+
($spreadFragmentNode = $resolveInfo->fragments[$field->name->value])) {
98+
foreach ($spreadFragmentNode->selectionSet->selections as $spreadNode) {
99+
if (isset($spreadNode->selectionSet->selections)) {
100+
if ($spreadNode->kind === NodeKind::FIELD && isset($spreadNode->name)) {
89101
$selectedFields[] = $spreadNode->name->value;
90102
}
103+
$fragmentFields[] = $this->getQueryFields($spreadNode, $resolveInfo);
104+
} else {
105+
$selectedFields[] = $spreadNode->name->value;
91106
}
92-
} else {
93-
$selectedFields[] = $field->name->value;
94107
}
108+
} else {
109+
$selectedFields[] = $field->name->value;
95110
}
96-
if ($fragmentFields) {
97-
$selectedFields = array_merge([], $selectedFields, ...$fragmentFields);
98-
}
99-
$this->setSelectionsForFieldNode($fieldNode, array_unique($selectedFields));
100111
}
112+
$data['selectedFields'] = $selectedFields;
113+
$data['fragmentFields'] = $fragmentFields;
101114

102-
return $this->getFieldNodeSelections($fieldNode);
115+
return $data;
103116
}
104117

105118
/**
@@ -117,15 +130,22 @@ private function addInlineFragmentFields(
117130
): array {
118131
$query = $inlineFragmentField->selectionSet->selections;
119132
/** @var FieldNode $field */
133+
$fragmentFields = [];
120134
foreach ($query as $field) {
121135
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
122136
$this->addInlineFragmentFields($resolveInfo, $field, $inlineFragmentFields);
123137
} elseif (isset($field->selectionSet->selections)) {
124-
continue;
138+
if ($field->kind === NodeKind::FIELD && isset($field->name)) {
139+
$inlineFragmentFields[] = $field->name->value;
140+
}
141+
$fragmentFields[] = $this->getQueryFields($field, $resolveInfo);
125142
} else {
126143
$inlineFragmentFields[] = $field->name->value;
127144
}
128145
}
146+
if ($fragmentFields) {
147+
$inlineFragmentFields = array_merge([], $inlineFragmentFields, ...$fragmentFields);
148+
}
129149

130150
return array_unique($inlineFragmentFields);
131151
}

app/code/Magento/CatalogGraphQl/Model/Resolver/Product/ProductFieldsSelector.php

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Magento\CatalogGraphQl\Model\Resolver\Product;
99

10-
use GraphQL\Language\AST\NodeKind;
10+
use Magento\CatalogGraphQl\Model\AttributesJoiner;
1111
use Magento\Framework\GraphQl\Query\FieldTranslator;
1212
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1313

@@ -19,14 +19,23 @@ class ProductFieldsSelector
1919
/**
2020
* @var FieldTranslator
2121
*/
22-
private $fieldTranslator;
22+
private FieldTranslator $fieldTranslator;
23+
24+
/**
25+
* @var AttributesJoiner
26+
*/
27+
private AttributesJoiner $attributesJoiner;
2328

2429
/**
2530
* @param FieldTranslator $fieldTranslator
31+
* @param AttributesJoiner $attributesJoiner
2632
*/
27-
public function __construct(FieldTranslator $fieldTranslator)
28-
{
33+
public function __construct(
34+
FieldTranslator $fieldTranslator,
35+
AttributesJoiner $attributesJoiner
36+
) {
2937
$this->fieldTranslator = $fieldTranslator;
38+
$this->attributesJoiner = $attributesJoiner;
3039
}
3140

3241
/**
@@ -36,27 +45,17 @@ public function __construct(FieldTranslator $fieldTranslator)
3645
* @param string $productNodeName
3746
* @return string[]
3847
*/
39-
public function getProductFieldsFromInfo(ResolveInfo $info, string $productNodeName = 'product') : array
48+
public function getProductFieldsFromInfo(ResolveInfo $info, string $productNodeName = 'product'): array
4049
{
4150
$fieldNames = [];
4251
foreach ($info->fieldNodes as $node) {
4352
if ($node->name->value !== $productNodeName) {
4453
continue;
4554
}
46-
foreach ($node->selectionSet->selections as $selectionNode) {
47-
if ($selectionNode->kind === NodeKind::INLINE_FRAGMENT) {
48-
foreach ($selectionNode->selectionSet->selections as $inlineSelection) {
49-
if ($inlineSelection->kind === NodeKind::INLINE_FRAGMENT) {
50-
continue;
51-
}
52-
$fieldNames[] = $this->fieldTranslator->translate($inlineSelection->name->value);
53-
}
54-
continue;
55-
}
56-
$fieldNames[] = $this->fieldTranslator->translate($selectionNode->name->value);
57-
}
55+
$queryFields = $this->attributesJoiner->getQueryFields($node, $info);
56+
$fieldNames[] = $queryFields;
5857
}
5958

60-
return $fieldNames;
59+
return array_merge(...$fieldNames);
6160
}
6261
}

app/code/Magento/Config/Model/Config/Reader/Source/Deployed/SettingChecker.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,8 @@ public function getPlaceholderValue($path, $scope, $scopeCode = null)
102102
public function getEnvValue($placeholder)
103103
{
104104
// phpcs:disable Magento2.Security.Superglobal
105-
$environment = [];
106-
foreach ($_ENV as $key => $value) {
107-
$environment[strtolower($key)] = $value;
108-
}
109-
if ($this->placeholder->isApplicable($placeholder) && isset($environment[strtolower($placeholder)])) {
110-
return $environment[strtolower($placeholder)];
105+
if ($this->placeholder->isApplicable($placeholder) && isset($_ENV[$placeholder])) {
106+
return $_ENV[$placeholder];
111107
}
112108
// phpcs:enable
113109

app/code/Magento/Config/Test/Unit/Model/Config/Reader/Source/Deployed/SettingCheckerTest.php

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,6 @@ protected function setUp(): void
6969
$this->checker = new SettingChecker($this->configMock, $placeholderFactoryMock, $this->scopeCodeResolverMock);
7070
}
7171

72-
public function testGetEnvValue(): void
73-
{
74-
$_ENV = array_merge($this->env, ['SOME_PLACEHOLDER' => 0, 'another_placeholder' => 1, 'some_placeholder' => 1]);
75-
$this->placeholderMock->expects($this->any())
76-
->method('isApplicable')
77-
->willReturn(true);
78-
$this->assertSame($this->checker->getEnvValue('SOME_PLACEHOLDER'), 1);
79-
$this->assertSame($this->checker->getEnvValue('another_placeholder'), 1);
80-
}
81-
8272
/**
8373
* @param string $path
8474
* @param string $scope

app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,10 @@ protected function fillSimpleProductData(
200200
continue;
201201
}
202202

203-
$product->setData($attribute->getAttributeCode(), $parentProduct->getData($attribute->getAttributeCode()));
203+
$product->setData(
204+
$attribute->getAttributeCode(),
205+
$parentProduct->getData($attribute->getAttributeCode()) ?? $attribute->getDefaultValue()
206+
);
204207
}
205208

206209
$keysFilter = ['item_id', 'product_id', 'stock_id', 'type_id', 'website_id'];

app/code/Magento/Store/App/Config/Source/RuntimeConfigSource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ private function getEntities($table, $keyField)
102102
);
103103

104104
foreach ($entities as $entity) {
105-
$data[strtolower($entity[$keyField])] = $entity;
105+
$data[$entity[$keyField]] = $entity;
106106
}
107107

108108
return $data;

app/code/Magento/Store/App/Config/Type/Scopes.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public function get($path = '')
7272
$path = $this->convertIdPathToCodePath($patchChunks);
7373
}
7474

75-
return $this->data->getData(strtolower($path));
75+
return $this->data->getData($path);
7676
}
7777

7878
/**

app/code/Magento/Store/Model/Config/Processor/Fallback.php

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
use Magento\Framework\DB\Adapter\TableNotFoundException;
1212
use Magento\Store\App\Config\Type\Scopes;
1313
use Magento\Store\Model\ResourceModel\Store;
14+
use Magento\Store\Model\ResourceModel\Store\AllStoresCollectionFactory;
1415
use Magento\Store\Model\ResourceModel\Website;
16+
use Magento\Store\Model\ResourceModel\Website\AllWebsitesCollection;
17+
use Magento\Store\Model\ResourceModel\Website\AllWebsitesCollectionFactory;
1518

1619
/**
1720
* Fallback through different scopes and merge them
@@ -111,13 +114,6 @@ private function prepareWebsitesConfig(
111114
array $websitesConfig
112115
) {
113116
$result = [];
114-
115-
foreach ($websitesConfig as $websiteCode => $webConfiguration) {
116-
if (!isset($websitesConfig[strtolower($websiteCode)])) {
117-
$websitesConfig[strtolower($websiteCode)] = $webConfiguration;
118-
unset($websitesConfig[$websiteCode]);
119-
}
120-
}
121117
foreach ((array)$this->websiteData as $website) {
122118
$code = $website['code'];
123119
$id = $website['website_id'];
@@ -143,12 +139,6 @@ private function prepareStoresConfig(
143139
) {
144140
$result = [];
145141

146-
foreach ($storesConfig as $storeCode => $storeConfiguration) {
147-
if (!isset($storesConfig[strtolower($storeCode)])) {
148-
$storesConfig[strtolower($storeCode)] = $storeConfiguration;
149-
unset($storesConfig[$storeCode]);
150-
}
151-
}
152142
foreach ((array)$this->storeData as $store) {
153143
$code = $store['code'];
154144
$id = $store['store_id'];
@@ -201,18 +191,5 @@ private function loadScopes(): void
201191
$this->storeData = [];
202192
$this->websiteData = [];
203193
}
204-
$this->normalizeStoreData();
205-
}
206-
207-
/**
208-
* Sets stores code to lower case
209-
*
210-
* @return void
211-
*/
212-
private function normalizeStoreData(): void
213-
{
214-
foreach ($this->storeData as $key => $store) {
215-
$this->storeData[$key]['code'] = strtolower($store['code']);
216-
}
217194
}
218195
}

app/code/Magento/Store/Test/Unit/App/Config/Source/RuntimeConfigSourceTest.php

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -68,73 +68,12 @@ public function testGet()
6868
->getMock();
6969
$selectMock->expects($this->any())->method('from')->willReturnSelf();
7070
$this->connection->expects($this->any())->method('select')->willReturn($selectMock);
71-
$this->connection->expects($this->exactly(3))->method('fetchAll')
72-
->willReturnOnConsecutiveCalls(
73-
[
74-
'WebsiteCode' => [
75-
'website_id' => '3',
76-
'code' => 'WebsiteCode',
77-
'name' => 'website',
78-
'sort_order' => '0',
79-
'default_group_id' => '4',
80-
'is_default' => '0'
81-
]
82-
],
83-
[
84-
0 => [
85-
'group_id' => '4',
86-
'website_id' => '3',
87-
'name' => 'store',
88-
'root_category_id' => '2',
89-
'default_store_id' => '11',
90-
'code' => 'second_website'
91-
]
92-
],
93-
[
94-
'SecondWebsite' => [
95-
'store_id' => '11',
96-
'code' => 'SECOND_WEBSITE',
97-
'website_id' => '3',
98-
'group_id' => '4',
99-
'name' => 'second',
100-
'sort_order' => '0',
101-
'is_active' => '1'
102-
]
103-
]
104-
);
71+
$this->connection->expects($this->any())->method('fetchAll')->willReturn([]);
10572
$this->assertEquals(
10673
[
107-
'websites' => [
108-
'websitecode' => [
109-
'website_id' => '3',
110-
'code' => 'WebsiteCode',
111-
'name' => 'website',
112-
'sort_order' => '0',
113-
'default_group_id' => '4',
114-
'is_default' => '0'
115-
]
116-
],
117-
'groups' => [
118-
4 => [
119-
'group_id' => '4',
120-
'website_id' => '3',
121-
'name' => 'store',
122-
'root_category_id' => '2',
123-
'default_store_id' => '11',
124-
'code' => 'second_website'
125-
]
126-
],
127-
'stores' => [
128-
'second_website' => [
129-
'store_id' => '11',
130-
'code' => 'SECOND_WEBSITE',
131-
'website_id' => '3',
132-
'group_id' => '4',
133-
'name' => 'second',
134-
'sort_order' => '0',
135-
'is_active' => '1'
136-
]
137-
],
74+
'websites' => [],
75+
'groups' => [],
76+
'stores' => [],
13877
],
13978
$this->configSource->get()
14079
);

0 commit comments

Comments
 (0)