[-] BO : fixed bug #PSCFV-3336
This commit is contained in:
+39
-44
@@ -311,52 +311,47 @@ class CategoryCore extends ObjectModel
|
|||||||
|
|
||||||
$this->clearCache();
|
$this->clearCache();
|
||||||
|
|
||||||
/* Get childs categories */
|
$all_cat = $this->getAllChildren();
|
||||||
$to_delete = array((int)$this->id);
|
$all_cat[] = $this;
|
||||||
$this->recursiveDelete($to_delete, (int)$this->id);
|
foreach ($all_cat as $cat)
|
||||||
$to_delete = array_unique($to_delete);
|
|
||||||
|
|
||||||
/* Delete category and its child from database */
|
|
||||||
$list = count($to_delete) > 1 ? implode(',', array_map('intval', $to_delete)) : (int)$this->id;
|
|
||||||
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category` WHERE `id_category` IN ('.$list.')');
|
|
||||||
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` IN ('.$list.')');
|
|
||||||
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` IN ('.$list.')');
|
|
||||||
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_group` WHERE `id_category` IN ('.$list.')');
|
|
||||||
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_shop` WHERE `id_category` IN ('.$list.')');
|
|
||||||
|
|
||||||
// Delete associated restrictions on cart rules
|
|
||||||
CartRule::cleanProductRuleIntegrity('categories', $to_delete);
|
|
||||||
|
|
||||||
Category::cleanPositions($this->id_parent);
|
|
||||||
|
|
||||||
/* Delete category images and its children images */
|
|
||||||
$tmp_category = new Category();
|
|
||||||
foreach ($to_delete as $id_category)
|
|
||||||
{
|
{
|
||||||
$tmp_category->id = (int)$id_category;
|
parent::delete();
|
||||||
$tmp_category->deleteImage();
|
if (!$this->hasMultishopEntries())
|
||||||
|
{
|
||||||
|
$cat->deleteImage();
|
||||||
|
$cat->cleanGroups();
|
||||||
|
$cat->cleanAssoProducts();
|
||||||
|
// Delete associated restrictions on cart rules
|
||||||
|
CartRule::cleanProductRuleIntegrity('categories', array($cat->id));
|
||||||
|
Category::cleanPositions($cat->id_parent);
|
||||||
|
/* Delete Categories in GroupReduction */
|
||||||
|
if (GroupReduction::getGroupReductionByCategoryId((int)$cat->id))
|
||||||
|
GroupReduction::deleteCategory($cat->id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$all_product_asso = array();
|
||||||
|
$tmp = Db::getInstance()->executeS('SELECT `id_product` FROM `'._DB_PREFIX_.'category_product`');
|
||||||
|
foreach ($tmp as $val)
|
||||||
|
$all_product_asso[] = $val;
|
||||||
|
|
||||||
/* Delete or link products which were not in others categories */
|
/* Delete or link products which were not in others categories */
|
||||||
$result = Db::getInstance()->executeS('
|
$fatherless_products = new Collection('Product', Context::getContext()->language->id);
|
||||||
SELECT `id_product`
|
$fatherless_products->where('id_product', 'notin', $all_product_asso);
|
||||||
FROM `'._DB_PREFIX_.'product`
|
|
||||||
WHERE `id_product` NOT IN (SELECT `id_product` FROM `'._DB_PREFIX_.'category_product`)
|
foreach ($fatherless_products as $poor_product)
|
||||||
');
|
|
||||||
foreach ($result as $p)
|
|
||||||
{
|
{
|
||||||
$product = new Product((int)$p['id_product']);
|
if (Validate::isLoadedObject($poor_product))
|
||||||
if (Validate::isLoadedObject($product))
|
|
||||||
{
|
{
|
||||||
if ($this->remove_products || $this->id_parent == 0)
|
if ($this->remove_products || $this->id_parent == 0)
|
||||||
$product->delete();
|
$poor_product->delete();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ($this->disable_products)
|
if ($this->disable_products)
|
||||||
$product->active = 0;
|
$poor_product->active = 0;
|
||||||
|
|
||||||
$product->addToCategories($this->id_parent);
|
$poor_product->addToCategories($this->id_parent);
|
||||||
$product->save();
|
$poor_product->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,18 +363,13 @@ class CategoryCore extends ObjectModel
|
|||||||
WHERE `id_category_default`
|
WHERE `id_category_default`
|
||||||
NOT IN (SELECT `id_category` FROM `'._DB_PREFIX_.'category`)
|
NOT IN (SELECT `id_category` FROM `'._DB_PREFIX_.'category`)
|
||||||
');
|
');
|
||||||
|
|
||||||
/* Rebuild the nested tree */
|
/* Rebuild the nested tree */
|
||||||
if (!isset($this->doNotRegenerateNTree) || !$this->doNotRegenerateNTree)
|
if (!$this->hasMultishopEntries() && (!isset($this->doNotRegenerateNTree) || !$this->doNotRegenerateNTree))
|
||||||
Category::regenerateEntireNtree();
|
Category::regenerateEntireNtree();
|
||||||
|
|
||||||
Hook::exec('actionCategoryDelete', array('category' => $this));
|
Hook::exec('actionCategoryDelete', array('category' => $this));
|
||||||
|
|
||||||
/* Delete Categories in GroupReduction */
|
|
||||||
foreach ($to_delete as $category)
|
|
||||||
if (GroupReduction::getGroupReductionByCategoryId((int)$category))
|
|
||||||
GroupReduction::deleteCategory($category);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1041,6 +1031,11 @@ class CategoryCore extends ObjectModel
|
|||||||
{
|
{
|
||||||
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_group` WHERE `id_category` = '.(int)$this->id);
|
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_group` WHERE `id_category` = '.(int)$this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function cleanAssoProducts()
|
||||||
|
{
|
||||||
|
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` = '.(int)$this->id);
|
||||||
|
}
|
||||||
|
|
||||||
public function addGroups($groups)
|
public function addGroups($groups)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -310,9 +310,9 @@ abstract class ObjectModelCore
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$fields = array($this->id_lang => $this->formatFields(self::FORMAT_LANG, $this->id_lang));
|
$fields = array($this->id_lang => $this->formatFields(self::FORMAT_LANG, $this->id_lang));
|
||||||
$fields['id_lang'] = $this->id_lang;
|
$fields[$this->id_lang]['id_lang'] = $this->id_lang;
|
||||||
if ($this->id_shop && $is_lang_multishop)
|
if ($this->id_shop && $is_lang_multishop)
|
||||||
$fields['id_shop'] = (int)$this->id_shop;
|
$fields[$this->id_lang]['id_shop'] = (int)$this->id_shop;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $fields;
|
return $fields;
|
||||||
@@ -577,13 +577,12 @@ abstract class ObjectModelCore
|
|||||||
$id_shop_list = Shop::getContextListShopID();
|
$id_shop_list = Shop::getContextListShopID();
|
||||||
if (count($this->id_shop_list) > 0)
|
if (count($this->id_shop_list) > 0)
|
||||||
$id_shop_list = $this->id_shop_list;
|
$id_shop_list = $this->id_shop_list;
|
||||||
|
|
||||||
foreach ($id_shop_list as $id_shop)
|
foreach ($id_shop_list as $id_shop)
|
||||||
{
|
{
|
||||||
$field['id_shop'] = (int)$id_shop;
|
$field['id_shop'] = (int)$id_shop;
|
||||||
$where = pSQL($this->def['primary']).' = '.(int)$this->id
|
$where = pSQL($this->def['primary']).' = '.(int)$this->id
|
||||||
.' AND id_lang = '.(int)$field['id_lang']
|
.' AND id_lang = '.(int)$field['id_lang']
|
||||||
.' AND id_shop = '.$field['id_shop'];
|
.' AND id_shop = '.(int)$id_shop;
|
||||||
|
|
||||||
if (Db::getInstance()->getValue('SELECT COUNT(*) FROM '.pSQL(_DB_PREFIX_.$this->def['table']).'_lang WHERE '.$where))
|
if (Db::getInstance()->getValue('SELECT COUNT(*) FROM '.pSQL(_DB_PREFIX_.$this->def['table']).'_lang WHERE '.$where))
|
||||||
$result &= Db::getInstance()->update($this->def['table'].'_lang', $field, $where);
|
$result &= Db::getInstance()->update($this->def['table'].'_lang', $field, $where);
|
||||||
|
|||||||
Reference in New Issue
Block a user