From 9c8b88ec9a49377ebaf688d621da37898f8cce2f Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna <vshcherbyna@magento.com> Date: Tue, 26 Jan 2016 21:39:23 +0200 Subject: [PATCH] MAGETWO-47402: All type products are available --- .../Product/Initialization/Helper.php | 33 ++++++++++++++++++- .../Product/Initialization/HelperTest.php | 1 + .../Helper/ProductLinks/Plugin/Grouped.php | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php index 28ec88c2013..3d9e71cb00c 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php @@ -167,7 +167,13 @@ class Helper } } $product = $this->productLinks->initializeLinks($product, $links); - $productLinks = $product->getProductLinks(); + $productLinks = []; + $savedLinksByType = []; + foreach ($product->getProductLinks() as $link) { + $savedLinksByType[$link->getLinkType()][] = $link; + } + $this->dropRelationProductsCache($product); + $linkTypes = [ 'related' => $product->getRelatedReadonly(), 'upsell' => $product->getUpsellReadonly(), @@ -184,7 +190,18 @@ class Helper ->setPosition(isset($linkData['position']) ? (int)$linkData['position'] : 0); $productLinks[] = $link; } + } else { + if (array_key_exists($linkType, $savedLinksByType)) { + $productLinks = array_merge($productLinks, $savedLinksByType[$linkType]); + } } + if (isset($savedLinksByType[$linkType])) { + unset($savedLinksByType[$linkType]); + } + } + + foreach($savedLinksByType as $links) { + $productLinks = array_merge($productLinks, $links); } $product->setProductLinks($productLinks); @@ -241,4 +258,18 @@ class Helper return $options; } + + /** + * @param \Magento\Catalog\Model\Product $product + * @return void + */ + private function dropRelationProductsCache(\Magento\Catalog\Model\Product $product) + { + $product->unsetData('up_sell_products'); + $product->unsetData('up_sell_products_ids'); + $product->unsetData('related_products'); + $product->unsetData('related_products_ids'); + $product->unsetData('cross_sell_products'); + $product->unsetData('cross_sell_products_ids'); + } } diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php index e64d8c2ef84..419793b43a5 100644 --- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php @@ -110,6 +110,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase [ 'setData', 'addData', + 'unsetData', 'getId', 'setWebsiteIds', 'isLockedAttribute', diff --git a/app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php b/app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php index c617dcf6632..4bb49b2513b 100644 --- a/app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php +++ b/app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php @@ -75,6 +75,7 @@ class Grouped } $newLinks = []; $existingLinks = $product->getProductLinks(); + $product->unsetData('_cache_instance_associated_products'); if ($links) { foreach ($links as $linkId => $linkRaw) { /** @var \Magento\Catalog\Api\Data\ProductLinkInterface $productLink */ -- GitLab