Skip to content

Commit 24ad7b3

Browse files
committed
Merge branch '2.4-develop' into B2B-1703
2 parents 1256e3b + d1a2753 commit 24ad7b3

File tree

73 files changed

+78893
-27454
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+78893
-27454
lines changed

app/code/Magento/Bundle/Model/LinkManagement.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ public function addChild(
367367
throw new CouldNotSaveException(__('Could not save child: "%1"', $e->getMessage()), $e);
368368
}
369369

370-
return $selectionModel->getId();
370+
return (int)$selectionModel->getId();
371371
}
372372

373373
/**

app/code/Magento/Bundle/Model/Product/BundleOptionDataProvider.php

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\Bundle\Model\Option;
1212
use Magento\Catalog\Model\Product;
1313
use Magento\Catalog\Model\Product\Configuration\Item\ItemInterface;
14+
use Magento\Framework\GraphQl\Query\Uid;
1415
use Magento\Framework\Pricing\Helper\Data;
1516
use Magento\Framework\Serialize\SerializerInterface;
1617

@@ -19,6 +20,11 @@
1920
*/
2021
class BundleOptionDataProvider
2122
{
23+
/**
24+
* Option type name
25+
*/
26+
private const OPTION_TYPE = 'bundle';
27+
2228
/**
2329
* @var Data
2430
*/
@@ -34,19 +40,27 @@ class BundleOptionDataProvider
3440
*/
3541
private $configuration;
3642

43+
/**
44+
* @var Uid
45+
*/
46+
private $uidEncoder;
47+
3748
/**
3849
* @param Data $pricingHelper
3950
* @param SerializerInterface $serializer
4051
* @param Configuration $configuration
52+
* @param Uid $uidEncoder
4153
*/
4254
public function __construct(
4355
Data $pricingHelper,
4456
SerializerInterface $serializer,
45-
Configuration $configuration
57+
Configuration $configuration,
58+
Uid $uidEncoder
4659
) {
4760
$this->pricingHelper = $pricingHelper;
4861
$this->serializer = $serializer;
4962
$this->configuration = $configuration;
63+
$this->uidEncoder = $uidEncoder;
5064
}
5165

5266
/**
@@ -100,8 +114,15 @@ private function buildBundleOptions(array $bundleOptions, ItemInterface $item):
100114
continue;
101115
}
102116

117+
$optionDetails = [
118+
self::OPTION_TYPE,
119+
$bundleOption->getOptionId()
120+
];
121+
$uidString = implode('/', $optionDetails);
122+
103123
$options[] = [
104124
'id' => $bundleOption->getId(),
125+
'uid' => $this->uidEncoder->encode($uidString),
105126
'label' => $bundleOption->getTitle(),
106127
'type' => $bundleOption->getType(),
107128
'values' => $this->buildBundleOptionValues($bundleOption->getSelections(), $item),
@@ -130,10 +151,19 @@ private function buildBundleOptionValues(array $selections, ItemInterface $item)
130151
continue;
131152
}
132153

154+
$optionValueDetails = [
155+
self::OPTION_TYPE,
156+
$selection->getOptionId(),
157+
$selection->getSelectionId(),
158+
(int) $selection->getSelectionQty()
159+
];
160+
$uidString = implode('/', $optionValueDetails);
161+
133162
$selectionPrice = $this->configuration->getSelectionFinalPrice($item, $selection);
134163
$values[] = [
135-
'label' => $selection->getName(),
136164
'id' => $selection->getSelectionId(),
165+
'uid' => $this->uidEncoder->encode($uidString),
166+
'label' => $selection->getName(),
137167
'quantity' => $qty,
138168
'price' => $this->pricingHelper->currency($selectionPrice, false, false),
139169
];
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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\Bundle\Plugin\Api\ProductLinkManagement;
10+
11+
use Magento\Bundle\Api\ProductLinkManagementInterface;
12+
use Magento\Catalog\Api\ProductRepositoryInterface;
13+
use Magento\Catalog\Model\Indexer\Product\Full;
14+
15+
/**
16+
* Reindex bundle product after child has been added.
17+
*/
18+
class ReindexAfterAddChildBySkuPlugin
19+
{
20+
/**
21+
* @var Full
22+
*/
23+
private $indexer;
24+
25+
/**
26+
* @var ProductRepositoryInterface
27+
*/
28+
private $productRepository;
29+
30+
/**
31+
* @param Full $indexer
32+
* @param ProductRepositoryInterface $productRepository
33+
*/
34+
public function __construct(Full $indexer, ProductRepositoryInterface $productRepository)
35+
{
36+
$this->indexer = $indexer;
37+
$this->productRepository = $productRepository;
38+
}
39+
40+
/**
41+
* Reindex bundle product after child has been added.
42+
*
43+
* @param ProductLinkManagementInterface $subject
44+
* @param int $result
45+
* @param string $sku
46+
* @return int
47+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
48+
*/
49+
public function afterAddChildByProductSku(
50+
ProductLinkManagementInterface $subject,
51+
int $result,
52+
string $sku
53+
): int {
54+
$bundleProduct = $this->productRepository->get($sku, true);
55+
$this->indexer->executeRow($bundleProduct->getId());
56+
57+
return $result;
58+
}
59+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
declare(strict_types=1);
8+
9+
namespace Magento\Bundle\Plugin\Api\ProductLinkManagement;
10+
11+
use Magento\Bundle\Api\ProductLinkManagementInterface;
12+
use Magento\Catalog\Api\ProductRepositoryInterface;
13+
use Magento\Catalog\Model\Indexer\Product\Full;
14+
15+
/**
16+
* Reindex bundle product after child has been removed.
17+
*/
18+
class ReindexAfterRemoveChildPlugin
19+
{
20+
/**
21+
* @var Full
22+
*/
23+
private $indexer;
24+
25+
/**
26+
* @var ProductRepositoryInterface
27+
*/
28+
private $productRepository;
29+
30+
/**
31+
* @param Full $indexer
32+
* @param ProductRepositoryInterface $productRepository
33+
*/
34+
public function __construct(Full $indexer, ProductRepositoryInterface $productRepository)
35+
{
36+
$this->indexer = $indexer;
37+
$this->productRepository = $productRepository;
38+
}
39+
40+
/**
41+
* Reindex bundle product after child has been removed.
42+
*
43+
* @param ProductLinkManagementInterface $subject
44+
* @param bool $result
45+
* @param string $sku
46+
* @return bool
47+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
48+
*/
49+
public function afterRemoveChild(
50+
ProductLinkManagementInterface $subject,
51+
bool $result,
52+
string $sku
53+
): bool {
54+
$bundleProduct = $this->productRepository->get($sku, true);
55+
$this->indexer->executeRow($bundleProduct->getId());
56+
57+
return $result;
58+
}
59+
}

app/code/Magento/Bundle/etc/webapi_rest/di.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,8 @@
1313
</argument>
1414
</arguments>
1515
</type>
16+
<type name="Magento\Bundle\Api\ProductLinkManagementInterface">
17+
<plugin name="reindex_after_add_child_by_sku" type="Magento\Bundle\Plugin\Api\ProductLinkManagement\ReindexAfterAddChildBySkuPlugin"/>
18+
<plugin name="reindex_after_remove_child" type="Magento\Bundle\Plugin\Api\ProductLinkManagement\ReindexAfterRemoveChildPlugin"/>
19+
</type>
1620
</config>

app/code/Magento/Bundle/etc/webapi_soap/di.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,8 @@
1313
</argument>
1414
</arguments>
1515
</type>
16+
<type name="Magento\Bundle\Api\ProductLinkManagementInterface">
17+
<plugin name="reindex_after_add_child_by_sku" type="Magento\Bundle\Plugin\Api\ProductLinkManagement\ReindexAfterAddChildBySkuPlugin"/>
18+
<plugin name="reindex_after_remove_child" type="Magento\Bundle\Plugin\Api\ProductLinkManagement\ReindexAfterRemoveChildPlugin"/>
19+
</type>
1620
</config>

app/code/Magento/Catalog/Model/Design.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,21 @@ protected function _mergeSettings($categorySettings, $productSettings)
201201
$update = array_merge($categorySettings->getLayoutUpdates(), $productSettings->getLayoutUpdates());
202202
$categorySettings->setLayoutUpdates($update);
203203
}
204+
if ($categorySettings->getPageLayoutHandles()) {
205+
$handles = [];
206+
foreach ($categorySettings->getPageLayoutHandles() as $key => $value) {
207+
$handles[$key] = [
208+
'handle' => 'catalog_category_view',
209+
'value' => $value,
210+
];
211+
}
212+
$categorySettings->setPageLayoutHandles($handles);
213+
}
214+
if ($productSettings->getPageLayoutHandles()) {
215+
$handle = array_merge($categorySettings->getPageLayoutHandles(), $productSettings->getPageLayoutHandles());
216+
$categorySettings->setPageLayoutHandles($handle);
217+
}
218+
204219
return $categorySettings;
205220
}
206221
}

app/code/Magento/Catalog/Model/Product/Authorization.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private function hasProductChanged(ProductModel $product, ?array $oldProduct = n
129129
//No new value
130130
continue;
131131
}
132-
if (!in_array($newValue, $oldValues, true)) {
132+
if ($newValue !== null && !in_array($newValue, $oldValues, true)) {
133133
return true;
134134
}
135135
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminProductAttributeSetVisibleInAdvancedSearchActionGroup">
11+
<annotations>
12+
<description>Set 'Visible in Advanced Search' value for product attribute</description>
13+
</annotations>
14+
<arguments>
15+
<argument name="isVisibleInAdvancedSearch" type="string" defaultValue="Yes"/>
16+
</arguments>
17+
18+
<scrollToTopOfPage stepKey="scrollToTopOfPage"/>
19+
<click selector="{{StorefrontPropertiesSection.StoreFrontPropertiesTab}}" stepKey="clickStorefrontPropertiesTab"/>
20+
<waitForElementVisible selector="{{AdvancedAttributePropertiesSection.VisibleInAdvancedSearch}}" stepKey="waitForVisibleInAdvancedSearchElementVisible"/>
21+
<selectOption selector="{{AdvancedAttributePropertiesSection.VisibleInAdvancedSearch}}" userInput="{{isVisibleInAdvancedSearch}}" stepKey="setVisibleInAdvancedSearchValue"/>
22+
</actionGroup>
23+
</actionGroups>

app/code/Magento/Catalog/etc/db_schema.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1693,7 +1693,7 @@
16931693
<constraint xsi:type="foreign" referenceId="CAT_PRD_ENTT_MDA_GLR_VAL_TO_ENTT_ENTT_ID_CAT_PRD_ENTT_ENTT_ID"
16941694
table="catalog_product_entity_media_gallery_value_to_entity" column="entity_id"
16951695
referenceTable="catalog_product_entity" referenceColumn="entity_id" onDelete="CASCADE"/>
1696-
<constraint xsi:type="unique" referenceId="CAT_PRD_ENTT_MDA_GLR_VAL_TO_ENTT_VAL_ID_ENTT_ID">
1696+
<constraint xsi:type="primary" referenceId="CAT_PRD_ENTT_MDA_GLR_VAL_TO_ENTT_VAL_ID_ENTT_ID">
16971697
<column name="value_id"/>
16981698
<column name="entity_id"/>
16991699
</constraint>

0 commit comments

Comments
 (0)