From 34f65b7aecb2b22c66bbc6c67d5a02542c7ccf3e Mon Sep 17 00:00:00 2001 From: magentix Date: Tue, 14 Nov 2023 17:09:01 +0100 Subject: [PATCH 1/2] PGTO-397: Never remove products in visual merchandiser category --- Job/Product.php | 17 ++++++- Plugin/RebuildDynamicCategories.php | 79 ----------------------------- etc/di.xml | 4 -- 3 files changed, 16 insertions(+), 84 deletions(-) delete mode 100644 Plugin/RebuildDynamicCategories.php diff --git a/Job/Product.php b/Job/Product.php index 770e9511..eeb45c92 100644 --- a/Job/Product.php +++ b/Job/Product.php @@ -3002,9 +3002,24 @@ public function setCategories(): void $productIds = implode(',', array_unique(array_column($productCategoryInsertData, 0))); $productCategoryExclusion = implode(',', $notInWhere); if (!empty($productIds) && !empty($productCategoryExclusion)) { + $virtualCategories = []; + $visualMerchandiserRuleTable = $connection->getTableName('visual_merchandiser_rule'); + if ($connection->isTableExists($visualMerchandiserRuleTable)) { + $virtualCategories = $connection->fetchCol( + $connection->select() + ->from($visualMerchandiserRuleTable, ['category_id']) + ->where('is_active = ?', 1) + ->where('store_id = ?', 0) + ); + } + if (empty($virtualCategories)) { + $virtualCategories = [0]; + } + $virtualCategories = join(',', $virtualCategories); + $connection->delete( $categoryProductTable, - new \Zend_Db_Expr("product_id IN ($productIds) AND (product_id, category_id) NOT IN ($productCategoryExclusion)") + new \Zend_Db_Expr("product_id IN ($productIds) AND category_id NOT IN ($virtualCategories) AND (product_id, category_id) NOT IN ($productCategoryExclusion)") ); } } diff --git a/Plugin/RebuildDynamicCategories.php b/Plugin/RebuildDynamicCategories.php deleted file mode 100644 index cd95579a..00000000 --- a/Plugin/RebuildDynamicCategories.php +++ /dev/null @@ -1,79 +0,0 @@ -categoryResource = $categoryResource; - $this->categoryCollectionFactory = $categoryCollectionFactory; - $this->moduleManager = $moduleManager; - } - - public function afterSetCategories(Product $subject, $result) - { - if ($this->moduleManager->isEnabled('Magento_VisualMerchandiser')) { - $this->rebuildDynamicCategories($subject); - } - - return $result; - } - - private function rebuildDynamicCategories(Product $productImport): void - { - /** @var $rulesCollection RulesCollection */ - $rulesCollection = ObjectManager::getInstance()->get(RulesCollectionFactory::class)->create(); - $rulesCollection->addFieldToFilter('is_active', ['eq' => 1]); - $categoriesIds = $rulesCollection->getColumnValues('category_id'); - - $categoryCollection = $this->categoryCollectionFactory->create(); - $categoryCollection->addAttributeToSelect('*') - ->addFieldToFilter($this->categoryResource->getEntityIdField(), ['in' => $categoriesIds]); - - foreach ($categoryCollection as $category) { - ObjectManager::getInstance()->get(Builder::class)->rebuildCategory($category); - $this->saveRebuiltCategory($productImport, $category); - } - } - - private function saveRebuiltCategory(Product $productImport, Category $category): void - { - try { - $this->categoryResource->save($category); - } catch (Exception $exception) { - $productImport->setAdditionalMessage( - __( - 'Dynamic category %1 (ID: %2) couldn\'t be rebuilt correctly', - $category->getName(), - $category->getId() - ) - ); - } - } -} diff --git a/etc/di.xml b/etc/di.xml index 03dac520..2cc34edc 100755 --- a/etc/di.xml +++ b/etc/di.xml @@ -12,10 +12,6 @@ - - - - From f9420c02bc4b4b29809f7a0bdae6f34f032cdf67 Mon Sep 17 00:00:00 2001 From: magentix Date: Thu, 30 Nov 2023 11:12:33 +0100 Subject: [PATCH 2/2] Bump to 104.0.7 --- CHANGELOG.md | 3 +++ composer.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da207baf..604005f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -463,3 +463,6 @@ ### Version 104.0.6 : * PGTO-393: Replace the sku by the child product UUID in tmp related table + +### Version 104.0.7 : +* PGTO-397: Never delete products in a virtual category diff --git a/composer.json b/composer.json index 3e77bff8..a52ddc0a 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "nyholm/psr7": "^1.5" }, "type": "magento2-module", - "version": "104.0.6", + "version": "104.0.7", "license": [ "OSL-3.0", "AFL-3.0"