Skip to content

Commit ed33a4e

Browse files
committed
Merge remote-tracking branch 'origin/AC-2904-v1' into spartans_pr_04122023
2 parents d11a548 + cd429d9 commit ed33a4e

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,6 @@ public function save(ProductInterface $product, $saveOptions = false)
526526
$assignToCategories = false;
527527
$tierPrices = $product->getData('tier_price');
528528
$productDataToChange = $product->getData();
529-
530529
try {
531530
$existingProduct = $product->getId() ?
532531
$this->getById($product->getId()) :
@@ -597,14 +596,16 @@ public function save(ProductInterface $product, $saveOptions = false)
597596
&& $product->getStoreId() !== Store::DEFAULT_STORE_ID
598597
&& (count($stores) > 1 || count($websites) === 1)
599598
) {
599+
$imageRoles = ['image', 'small_image', 'thumbnail'];
600600
foreach ($productAttributes as $attribute) {
601601
$attributeCode = $attribute->getAttributeCode();
602602
$value = $product->getData($attributeCode);
603-
if ($existingProduct->getData($attributeCode) === $value
603+
if (!in_array($attributeCode, $imageRoles)
604+
&& $existingProduct->getData($attributeCode) === $value
605+
&& $existingProduct->getOrigData($attributeCode) === $value
604606
&& $attribute->getScope() !== EavAttributeInterface::SCOPE_GLOBAL_TEXT
605607
&& !is_array($value)
606608
&& !$attribute->isStatic()
607-
&& !array_key_exists($attributeCode, $productDataToChange)
608609
&& $value !== null
609610
&& !$this->scopeOverriddenValue->containsValue(
610611
ProductInterface::class,
@@ -618,6 +619,21 @@ public function save(ProductInterface $product, $saveOptions = false)
618619
$attributeCode === ProductAttributeInterface::CODE_SEO_FIELD_URL_KEY ? false : null
619620
);
620621
$hasDataChanged = true;
622+
} elseif (in_array($attributeCode, $imageRoles)
623+
&& $existingProduct->getData($attributeCode) === $value
624+
&& !array_key_exists($attributeCode, $productDataToChange)
625+
&& $attribute->getScope() !== EavAttributeInterface::SCOPE_GLOBAL_TEXT
626+
&& $value !== null
627+
&& !$this->scopeOverriddenValue->containsValue(
628+
ProductInterface::class,
629+
$product,
630+
$attributeCode,
631+
$product->getStoreId()
632+
)
633+
634+
) {
635+
$product->setData($attributeCode, null);
636+
$hasDataChanged = true;
621637
}
622638
}
623639
if ($hasDataChanged) {

dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryMultiWebsiteTest.php

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -188,26 +188,17 @@ public function testProductDefaultValuesWithTwoWebsites(): void
188188
/** @var ScopeOverriddenValue $scopeOverriddenValue */
189189
$scopeOverriddenValue = $this->objectManager->get(ScopeOverriddenValue::class);
190190
$storeId = $store->load('fixture_third_store', 'code')->getId();
191-
$this->assertFalse($scopeOverriddenValue->containsValue(
192-
ProductInterface::class,
193-
$product,
194-
'visibility',
195-
$storeId
196-
));
197-
198-
$this->assertFalse($scopeOverriddenValue->containsValue(
199-
ProductInterface::class,
200-
$product,
201-
'tax_class_id',
202-
$storeId
203-
));
204191

205-
$this->assertFalse($scopeOverriddenValue->containsValue(
206-
ProductInterface::class,
207-
$product,
208-
'status',
209-
$storeId
210-
));
192+
$attributeCodeList = ['visibility', 'tax_class_id', 'status', 'short_description', 'description',
193+
'url_key', 'meta_title', 'meta_keywords', 'meta_description'];
194+
foreach ($attributeCodeList as $attributeCode) {
195+
$this->assertFalse($scopeOverriddenValue->containsValue(
196+
ProductInterface::class,
197+
$product,
198+
$attributeCode,
199+
$storeId
200+
));
201+
}
211202
}
212203

213204
/**

0 commit comments

Comments
 (0)