diff --git a/controllers/admin/AdminCartRulesController.php b/controllers/admin/AdminCartRulesController.php index 5a9614206..c1e98e27e 100644 --- a/controllers/admin/AdminCartRulesController.php +++ b/controllers/admin/AdminCartRulesController.php @@ -285,7 +285,7 @@ class AdminCartRulesControllerCore extends AdminController if (is_array($rule_array = Tools::getValue('product_rule_'.$rule_group_id)) && count($rule_array)) { foreach ($rule_array as $rule_id) { if (Tools::getValue('product_rule_'.$rule_group_id.'_'.$rule_id.'_type') == 'products' - && in_array($reduction_product, Tools::getValue('product_rule_select_'.$rule_group_id.'_'.$rule_id))) { + && in_array($reduction_product, Tools::getValue('product_rule_select_'.$rule_group_id.'_'.$rule_id, []))) { $already_restricted = true; break 2; } @@ -432,23 +432,32 @@ class AdminCartRulesControllerCore extends AdminController // Add product rule restrictions if (Tools::getValue('product_restriction') && is_array($ruleGroupArray = Tools::getValue('product_rule_group')) && count($ruleGroupArray)) { foreach ($ruleGroupArray as $ruleGroupId) { - Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'cart_rule_product_rule_group` (`id_cart_rule`, `quantity`) - VALUES ('.(int)$currentObject->id.', '.(int)Tools::getValue('product_rule_group_'.$ruleGroupId.'_quantity').')'); - $id_product_rule_group = Db::getInstance()->Insert_ID(); - if (is_array($ruleArray = Tools::getValue('product_rule_'.$ruleGroupId)) && count($ruleArray)) { - foreach ($ruleArray as $ruleId) { - Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'cart_rule_product_rule` (`id_product_rule_group`, `type`) - VALUES ('.(int)$id_product_rule_group.', "'.pSQL(Tools::getValue('product_rule_'.$ruleGroupId.'_'.$ruleId.'_type')).'")'); - $id_product_rule = Db::getInstance()->Insert_ID(); - - $values = array(); - foreach (Tools::getValue('product_rule_select_'.$ruleGroupId.'_'.$ruleId) as $id) { - $values[] = '('.(int)$id_product_rule.','.(int)$id.')'; + foreach ($ruleArray as $ruleKey => $ruleId) { + if (!Tools::getValue('product_rule_select_'.$ruleGroupId.'_'.$ruleId)) { + unset($ruleArray[$ruleKey]); } - $values = array_unique($values); - if (count($values)) { - Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'cart_rule_product_rule_value` (`id_product_rule`, `id_item`) VALUES '.implode(',', $values)); + } + + if ($ruleArray) { + Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'cart_rule_product_rule_group` (`id_cart_rule`, `quantity`) + VALUES ('.(int)$currentObject->id.', '.(int)Tools::getValue('product_rule_group_'.$ruleGroupId.'_quantity').')'); + $id_product_rule_group = Db::getInstance()->Insert_ID(); + + foreach ($ruleArray as $ruleId) { + Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'cart_rule_product_rule` (`id_product_rule_group`, `type`) + VALUES ('.(int)$id_product_rule_group.', "'.pSQL(Tools::getValue('product_rule_'.$ruleGroupId.'_'.$ruleId.'_type')).'")'); + $id_product_rule = Db::getInstance()->Insert_ID(); + $values = array(); + if ($selectedProducts = Tools::getValue('product_rule_select_'.$ruleGroupId.'_'.$ruleId)) { + foreach ($selectedProducts as $id) { + $values[] = '('.(int)$id_product_rule.','.(int)$id.')'; + } + } + $values = array_unique($values); + if (count($values)) { + Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'cart_rule_product_rule_value` (`id_product_rule`, `id_item`) VALUES '.implode(',', $values)); + } } } }