From ca53094d34a31f71a4d01ecefb606edda6df9682 Mon Sep 17 00:00:00 2001 From: vAugagneur Date: Fri, 1 Mar 2013 17:17:17 +0100 Subject: [PATCH] [-] BO : fixed bug when save image shop association --- .../template/controllers/products/images.tpl | 1 + controllers/admin/AdminProductsController.php | 30 ++++++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/admin-dev/themes/default/template/controllers/products/images.tpl b/admin-dev/themes/default/template/controllers/products/images.tpl index 06ccec39b..544d57f0e 100644 --- a/admin-dev/themes/default/template/controllers/products/images.tpl +++ b/admin-dev/themes/default/template/controllers/products/images.tpl @@ -280,6 +280,7 @@ { "action":"UpdateProductImageShopAsso", "id_image":id, + "id_product":id_product, "id_shop": id_shop, "active":active, "token" : "{/literal}{$token}{literal}", diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 828a791fe..f958d4e7f 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -1401,6 +1401,7 @@ class AdminProductsControllerCore extends AdminController public function ajaxProcessUpdateProductImageShopAsso() { + $id_product = Tools::getValue('id_product'); if (($id_image = Tools::getValue('id_image')) && ($id_shop = (int)Tools::getValue('id_shop'))) if (Tools::getValue('active') == 'true') $res = Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'image_shop (`id_image`, `id_shop`) VALUES('.(int)$id_image.', '.(int)$id_shop.')'); @@ -1408,18 +1409,33 @@ class AdminProductsControllerCore extends AdminController $res = Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'image_shop WHERE `id_image` = '.(int)$id_image.' AND `id_shop` = '.(int)$id_shop); // Clean covers in image table - $count_cover_image = Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'image i INNER JOIN '._DB_PREFIX_.'image_shop ish ON (i.id_image = ish.id_image AND ish.id_shop = '.(int)$id_shop.') WHERE i.cover = 1'); + $count_cover_image = Db::getInstance()->getValue(' + SELECT COUNT(*) FROM '._DB_PREFIX_.'image i + INNER JOIN '._DB_PREFIX_.'image_shop ish ON (i.id_image = ish.id_image AND ish.id_shop = '.(int)$id_shop.') + WHERE i.cover = 1 AND `id_product` = '.(int)$id_product); + + $id_image = Db::getInstance()->getValue(' + SELECT i.`id_image` FROM '._DB_PREFIX_.'image i + INNER JOIN '._DB_PREFIX_.'image_shop ish ON (i.id_image = ish.id_image AND ish.id_shop = '.(int)$id_shop.') + WHERE `id_product` = '.(int)$id_product); + if ($count_cover_image < 1) - Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image i, '._DB_PREFIX_.'image_shop ish SET i.cover = 1 WHERE i.id_image = ish.id_image AND ish.id_shop = '.(int)$id_shop.' LIMIT 1'); + Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image i SET i.cover = 1 WHERE i.id_image = '.(int)$id_image.' AND i.`id_product` = '.(int)$id_product.' LIMIT 1'); + if ($count_cover_image > 1) - Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image i, '._DB_PREFIX_.'image_shop ish SET i.cover = 0 WHERE cover = 1 AND i.id_image = ish.id_image AND is.id_shop = '.(int)$id_shop.' LIMIT '.intval($count_cover_image - 1)); - + Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image i SET i.cover = 0 WHERE i.id_image <> '.(int)$id_image.' AND i.`id_product` = '.(int)$id_product); + // Clean covers in image_shop table - $count_cover_image_shop = Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'image_shop ish WHERE ish.id_shop = '.(int)$id_shop.' AND ish.cover = 1'); + $count_cover_image_shop = Db::getInstance()->getValue(' + SELECT COUNT(*) + FROM '._DB_PREFIX_.'image_shop ish + INNER JOIN '._DB_PREFIX_.'image i ON (i.id_image = ish.id_image AND i.`id_product` = '.(int)$id_product.') + WHERE ish.id_shop = '.(int)$id_shop.' AND ish.cover = 1'); + if ($count_cover_image_shop < 1) - Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image_shop ish SET ish.cover = 1 WHERE ish.id_shop = '.(int)$id_shop.' LIMIT 1'); + Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image_shop ish SET ish.cover = 1 WHERE ish.id_image = '.(int)$id_image.' AND ish.id_shop = '.(int)$id_shop.' LIMIT 1'); if ($count_cover_image_shop > 1) - Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image_shop ish SET ish.cover = 0 WHERE ish.cover = 1 AND ish.id_shop = '.(int)$id_shop.' LIMIT '.intval($count_cover_image_shop - 1)); + Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'image_shop ish SET ish.cover = 0 WHERE ish.id_image <> '.(int)$id_image.' AND ish.cover = 1 AND ish.id_shop = '.(int)$id_shop.' LIMIT '.intval($count_cover_image_shop - 1)); if ($res) $this->jsonConfirmation($this->_conf[27]);