From b9941369396f70f06a06fca8749eaadac6fa85c2 Mon Sep 17 00:00:00 2001 From: gRoussac Date: Wed, 13 Mar 2013 14:31:26 +0100 Subject: [PATCH] [-] CORE : Preserve carrier reference integrity in cart rules when updating a carrier --- .../controllers/cart_rules/conditions.tpl | 4 ++-- classes/CartRule.php | 16 ++++++++++------ install-dev/upgrade/sql/1.5.4.0.sql | 2 ++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl b/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl index 1fd8e4f7f..d029bceda 100644 --- a/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl +++ b/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl @@ -98,7 +98,7 @@

{l s='Unselected carriers'}



{l s='Selected carriers'}



getValue(' SELECT crc.id_cart_rule FROM '._DB_PREFIX_.'cart_rule_carrier crc + INNER JOIN '._DB_PREFIX_.'carrier c ON (c.id_reference = crc.id_carrier AND c.deleted = 0) WHERE crc.id_cart_rule = '.(int)$this->id.' - AND crc.id_carrier = '.(int)$context->cart->id_carrier); + AND c.id_carrier = '.(int)$context->cart->id_carrier); if (!$id_cart_rule) return (!$display_error) ? false : Tools::displayError('You cannot use this voucher with this carrier'); } @@ -762,10 +763,11 @@ class CartRuleCore extends ObjectModel else { $data = Db::getInstance()->executeS(' - SELECT crc.id_cart_rule, crc.id_carrier + SELECT crc.id_cart_rule, c.id_carrier FROM '._DB_PREFIX_.'cart_rule_carrier crc + INNER JOIN '._DB_PREFIX_.'carrier c ON (c.id_reference = crc.id_carrier AND c.deleted = 0) WHERE crc.id_cart_rule = '.(int)$this->id.' - AND crc.id_carrier = '.(int)$context->cart->id_carrier); + AND c.id_carrier = '.(int)$context->cart->id_carrier); if ($data) foreach ($data as $cart_rule) @@ -1032,9 +1034,10 @@ class CartRuleCore extends ObjectModel SELECT t.*'.($i18n ? ', tl.*' : '').', IF(crt.id_'.$type.' IS NULL, 0, 1) as selected FROM `'._DB_PREFIX_.$type.'` t '.($i18n ? 'LEFT JOIN `'._DB_PREFIX_.$type.'_lang` tl ON (t.id_'.$type.' = tl.id_'.$type.' AND tl.id_lang = '.(int)Context::getContext()->language->id.')' : '').' - LEFT JOIN (SELECT id_'.$type.' FROM `'._DB_PREFIX_.'cart_rule_'.$type.'` WHERE id_cart_rule = '.(int)$this->id.') crt ON t.id_'.$type.' = crt.id_'.$type.' + LEFT JOIN (SELECT id_'.$type.' FROM `'._DB_PREFIX_.'cart_rule_'.$type.'` WHERE id_cart_rule = '.(int)$this->id.') crt ON t.id_'.($type == 'carrier' ? 'reference' : $type).' = crt.id_'.$type.' WHERE 1 '.($active_only ? ' AND t.active = 1' : ''). - $shop_list. + $shop_list + .(in_array($type, array('carrier', 'shop')) ? ' AND t.deleted = 0' : ''). ' ORDER BY name ASC', false); while ($row = Db::getInstance()->nextRow($resource)) @@ -1081,6 +1084,7 @@ class CartRuleCore extends ObjectModel FROM '._DB_PREFIX_.'cart_rule cr LEFT JOIN '._DB_PREFIX_.'cart_rule_shop crs ON cr.id_cart_rule = crs.id_cart_rule LEFT JOIN '._DB_PREFIX_.'cart_rule_carrier crca ON cr.id_cart_rule = crca.id_cart_rule + '.($context->cart->id_carrier ? 'INNER JOIN '._DB_PREFIX_.'carrier c ON (c.id_reference = crca.id_carrier AND c.deleted = 0)' : '').' LEFT JOIN '._DB_PREFIX_.'cart_rule_country crco ON cr.id_cart_rule = crco.id_cart_rule WHERE cr.active = 1 AND cr.code = "" @@ -1093,7 +1097,7 @@ class CartRuleCore extends ObjectModel ) AND ( cr.carrier_restriction = 0 - '.($context->cart->id_carrier ? 'OR crca.id_carrier = '.(int)$context->cart->id_carrier : '').' + '.($context->cart->id_carrier ? 'OR c.id_carrier = '.(int)$context->cart->id_carrier : '').' ) AND ( cr.shop_restriction = 0 diff --git a/install-dev/upgrade/sql/1.5.4.0.sql b/install-dev/upgrade/sql/1.5.4.0.sql index 1473b0aae..150306eb7 100644 --- a/install-dev/upgrade/sql/1.5.4.0.sql +++ b/install-dev/upgrade/sql/1.5.4.0.sql @@ -46,3 +46,5 @@ ALTER TABLE `PREFIX_address` CHANGE `phone` `phone` varchar(32) default NULL; ALTER TABLE `PREFIX_address` CHANGE `phone_mobile` `phone_mobile` varchar(32) default NULL; /* PHP:update_genders_images(); */; + +UPDATE `PREFIX_cart_rule_carrier` crc INNER JOIN `PREFIX_carrier` c ON crc.`id_carrier` = c.`id_carrier` SET crc.`id_carrier` = c.`id_reference`; \ No newline at end of file