From 8ecc6313c1f54efb3927727aa4e83d67f4f8d612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Gaillard?= Date: Wed, 29 May 2013 12:08:15 +0200 Subject: [PATCH] [-] BO: Fix combinations duplication on multishop with context all for the product duplication #PSCFV-9020 --- classes/Product.php | 47 +++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/classes/Product.php b/classes/Product.php index f86a1c09f..846d0558e 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -3347,33 +3347,57 @@ class ProductCore extends ObjectModel WHERE pa.`id_product` = '.(int)$id_product_old ); + $combinations = array(); foreach ($result as $row) { $id_product_attribute_old = (int)$row['id_product_attribute']; - $result2 = Db::getInstance()->executeS(' - SELECT * - FROM `'._DB_PREFIX_.'product_attribute_combination` - WHERE `id_product_attribute` = '.$id_product_attribute_old - ); + if (!isset($combinations[$id_product_attribute_old])) + { + $id_combination = null; + $id_shop = null; + $result2 = Db::getInstance()->executeS(' + SELECT * + FROM `'._DB_PREFIX_.'product_attribute_combination` + WHERE `id_product_attribute` = '.$id_product_attribute_old + ); + } + else + { + $id_combination = (int)$combinations[$id_product_attribute_old]; + $id_shop = (int)$row['id_shop']; + $context_old = Shop::getContext(); + $context_shop_id_old = Shop::getContextShopID(); + Shop::setContext(Shop::CONTEXT_SHOP, $id_shop); + + } $row['id_product'] = $id_product_new; unset($row['id_product_attribute']); - $combination = new Combination(); + + $combination = new Combination($id_combination, null, $id_shop); foreach ($row as $k => $v) $combination->$k = $v; - $return &= $combination->add(); + $return &= $combination->save(); $id_product_attribute_new = (int)$combination->id; + if ($result_images = Product::_getAttributeImageAssociations($id_product_attribute_old)) { $combination_images['old'][$id_product_attribute_old] = $result_images; $combination_images['new'][$id_product_attribute_new] = $result_images; } - foreach ($result2 as $row2) + + if (!isset($combinations[$id_product_attribute_old])) { - $row2['id_product_attribute'] = $id_product_attribute_new; - $return &= Db::getInstance()->insert('product_attribute_combination', $row2); + $combinations[$id_product_attribute_old] = (int)$id_product_attribute_new; + foreach ($result2 as $row2) + { + $row2['id_product_attribute'] = $id_product_attribute_new; + $return &= Db::getInstance()->insert('product_attribute_combination', $row2); + } } + else + Shop::setContext($context_old, $context_shop_id_old); } return !$return ? false : $combination_images; } @@ -5276,5 +5300,4 @@ class ProductCore extends ObjectModel { return Db::getInstance()->executeS('SELECT id_product_item as id, quantity FROM '._DB_PREFIX_.'pack where id_product_pack = '.(int)$this->id); } -} - +} \ No newline at end of file