diff --git a/admin-dev/themes/default/template/controllers/products/combinations.tpl b/admin-dev/themes/default/template/controllers/products/combinations.tpl
index d831774e7..b4b58ff63 100644
--- a/admin-dev/themes/default/template/controllers/products/combinations.tpl
+++ b/admin-dev/themes/default/template/controllers/products/combinations.tpl
@@ -50,7 +50,14 @@
{l s='or use the'}
{l s='Product combinations generator'}
{l s='in order to create automatically a set of combinations'}
-
+ {if $combination_exists}
+
+
+ - {l s='Some combinations already exist. If you want to generate some new combinations, the quantities for the actual combinations will be lost.'}
+ - {l s='You still can add a combination by clicking the link "Add new combination" on the toolbar.'}
+
+
+ {/if}
{if isset($display_multishop_checkboxes) && $display_multishop_checkboxes}
{include file="controllers/products/multishop/check_fields.tpl" product_tab="Combinations"}
diff --git a/classes/Product.php b/classes/Product.php
index 0b2d4b6a2..0b18aa795 100644
--- a/classes/Product.php
+++ b/classes/Product.php
@@ -1087,6 +1087,16 @@ class ProductCore extends ObjectModel
{
$obj->default_on = $default_value;
$default_value = 0;
+ // if we add a combination for this shop and this product does not use the combination feature in other shop,
+ // we clone the default combination in every shop linked to this product
+ if (!$this->hasAttributesInOtherShops())
+ {
+ $id_shop_list_array = Product::getShopsByProduct($this->id);
+ $id_shop_list = array();
+ foreach ($id_shop_list_array as $array_shop)
+ $id_shop_list[] = $array_shop['id_shop'];
+ $obj->id_shop_list = $id_shop_list;
+ }
}
$obj->add();
$return[] = $obj->id;
@@ -1280,6 +1290,15 @@ class ProductCore extends ObjectModel
$combination->default_on = (int)$default;
$combination->minimal_quantity = (int)$minimal_quantity;
+ // if we add a combination for this shop and this product does not use the combination feature in other shop,
+ // we clone the default combination in every shop linked to this product
+ if ($default && !$this->hasAttributesInOtherShops())
+ {
+ $id_shop_list_array = Product::getShopsByProduct($this->id);
+ foreach ($id_shop_list_array as $array_shop)
+ $id_shop_list[] = $array_shop['id_shop'];
+ }
+
if (count($id_shop_list))
$combination->id_shop_list = $id_shop_list;
@@ -4867,5 +4886,16 @@ class ProductCore extends ObjectModel
return Product::PTYPE_SIMPLE;
}
+
+ public function hasAttributesInOtherShops()
+ {
+ return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
+ SELECT COUNT(*)
+ FROM `'._DB_PREFIX_.'product_attribute` pa
+ LEFT JOIN `'._DB_PREFIX_.'product_attribute_shop` pas
+ ON (pa.`id_product_attribute` = pas.`id_product_attribute`)
+ WHERE pa.`id_product` = '.(int)$this->id
+ );
+ }
}
diff --git a/controllers/admin/AdminAttributeGeneratorController.php b/controllers/admin/AdminAttributeGeneratorController.php
index cd5a1eb38..667a310f7 100644
--- a/controllers/admin/AdminAttributeGeneratorController.php
+++ b/controllers/admin/AdminAttributeGeneratorController.php
@@ -78,7 +78,7 @@ class AdminAttributeGeneratorControllerCore extends AdminController
public function initProcess()
{
- if (isset($_POST['generate']))
+ if (Tools::isSubmit('generate'))
{
if ($this->tabAccess['edit'] === '1')
$this->action = 'generate';
@@ -101,7 +101,7 @@ class AdminAttributeGeneratorControllerCore extends AdminController
$this->errors[] = Tools::displayError('Please choose at least 1 attribute.');
else
{
- $tab = array_values($_POST['options']);
+ $tab = array_values(Tools::getValue('options'));
if (count($tab) && Validate::isLoadedObject($this->product))
{
AdminAttributeGeneratorController::setAttributesImpacts($this->product->id, $tab);
diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php
index b589a1a41..8cc87dd2f 100644
--- a/controllers/admin/AdminProductsController.php
+++ b/controllers/admin/AdminProductsController.php
@@ -641,6 +641,7 @@ class AdminProductsControllerCore extends AdminController
Tools::getValue('attribute_weight') * Tools::getValue('attribute_weight_impact'),
Tools::getValue('attribute_unity') * Tools::getValue('attribute_unit_impact'),
Tools::getValue('attribute_ecotax'),
+ 0,
Tools::getValue('id_image_attr'),
Tools::getValue('attribute_reference'),
null,
@@ -3380,7 +3381,8 @@ class AdminProductsControllerCore extends AdminController
'list' => $this->renderListAttributes($product, $currency),
'product' => $product,
'id_category' => $product->getDefaultCategory(),
- 'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator')
+ 'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator'),
+ 'combination_exists' => (Shop::isFeatureActive() && (Shop::getContextShopGroup()->share_stock) && count(AttributeGroup::getAttributesGroups($this->context->language->id)) > 0)
));
}
}