protected function truncateTables($case) { if (!Module::isInstalled('agilemultipleseller')) { return truncateTables($case); } $controller = Context::getContext()->controller; if (!$controller->is_seller) { return truncateTables($case); } switch ((int) $case) { case $this->entities[$this->l('Products')]: $subquery = 'SELECT id_product FROM ' . _DB_PREFIX_ . 'product_owner WHERE id_owner=' . (int) $controller->context->cookie->id_employee; Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_shop` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'feature_product` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_lang` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'category_product` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_tag` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'specific_price` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'specific_price_priority` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_carrier` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'cart_product` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'compare_product` WHERE id_product IN (' . $subquery . ')'); if (count(Db::getInstance()->executeS('SHOW TABLES LIKE \'' . _DB_PREFIX_ . 'favorite_product\' '))) { Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'favorite_product` WHERE id_product IN (' . $subquery . ')'); } Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_attachment` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_country_tax` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_download` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_group_reduction_cache` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_sale` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_supplier` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'scene_products` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'warehouse_product_location` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'customization` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'customization_field` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'supply_order_detail` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'attribute_impact` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_attribute` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_attribute_shop` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_attribute_combination` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'product_attribute_image` WHERE id_product IN (' . $subquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'pack` WHERE id_product_pack IN (' . $subquery . ') OR WHERE id_product_item IN (' . $subquery . ')'); $stockquery = 'SELECT id_stock FROM `' . _DB_PREFIX_ . 'stock` WHERE id_product IN (' . $subquery . ')'; Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'stock` WHERE id_product IN (' . $stockquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'stock_available` WHERE id_product IN (' . $stockquery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'stock_mvt` WHERE id_stock IN (' . $stockquery . ')'); $imagequery = 'SELECT id_image FROM `' . _DB_PREFIX_ . 'image` WHERE id_product IN (' . $subquery . ')'; Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'image` WHERE id_iamge IN (' . $imagequery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'image_lang` WHERE id_iamge IN (' . $imagequery . ')'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'image_shop` WHERE id_iamge IN (' . $imagequery . ')'); if (!file_exists(_PS_PROD_IMG_DIR_)) { mkdir(_PS_PROD_IMG_DIR_); } break; } Image::clearTmpDir(); return true; }
public function truncateTable($table) { switch ($table) { case 'customer': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customer'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customer_group'); break; case 'address': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'address'); break; case 'country': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'state'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'country'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'country_lang'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'country'); case 'group': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customer_group'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'group_lang'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'group'); break; case 'combination': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_shop'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_combination'); break; case 'category': Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'category` WHERE id_category != 1'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'category_lang` WHERE id_category != 1'); Db::getInstance()->execute('ALTER TABLE `' . _DB_PREFIX_ . 'category` AUTO_INCREMENT = 2 '); foreach (scandir(_PS_CAT_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_CAT_IMG_DIR_ . $d); } } Image::clearTmpDir(); break; case 'product': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_shop'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'feature_product'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_lang'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'category_product'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_tag'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image_lang'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_shop'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_combination'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'specific_price'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'specific_price_priority'); Image::deleteAllImages(_PS_PROD_IMG_DIR_); Image::clearTmpDir(); @mkdir(_PS_PROD_IMG_DIR_); break; case 'manufacturer': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer_lang'); foreach (scandir(_PS_MANU_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_MANU_IMG_DIR_ . $d); } } Image::clearTmpDir(); break; case 'Suppliers': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier_lang'); foreach (scandir(_PS_SUPP_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_SUPP_IMG_DIR_ . $d); } } Image::clearTmpDir(); break; case 'attribute': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_lang'); break; case 'attributegroup': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group_lang'); break; case 'currency': case 'customer': case 'zone': case 'state': Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . bqSQL($table) . '`'); break; } return true; }
public static function checkAndFix() { $db = Db::getInstance(); $logs = array(); // Remove doubles in the configuration $filtered_configuration = array(); $result = $db->ExecuteS('SELECT * FROM ' . _DB_PREFIX_ . 'configuration'); foreach ($result as $row) { $key = $row['id_shop_group'] . '-|-' . $row['id_shop'] . '-|-' . $row['name']; if (in_array($key, $filtered_configuration)) { $query = 'DELETE FROM ' . _DB_PREFIX_ . 'configuration WHERE id_configuration = ' . (int) $row['id_configuration']; $db->Execute($query); $logs[$query] = 1; } else { $filtered_configuration[] = $key; } } unset($filtered_configuration); // Remove inexisting or monolanguage configuration value from configuration_lang $query = 'DELETE FROM `' . _DB_PREFIX_ . 'configuration_lang` WHERE `id_configuration` NOT IN (SELECT `id_configuration` FROM `' . _DB_PREFIX_ . 'configuration`) OR `id_configuration` IN (SELECT `id_configuration` FROM `' . _DB_PREFIX_ . 'configuration` WHERE name IS NULL OR name = "")'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } // Simple Cascade Delete $queries = self::getCheckAndFixQueries(); $queries = self::bulle($queries); foreach ($queries as $query_array) { // If this is a module and the module is not installed, we continue if (isset($query_array[4]) && !Module::isInstalled($query_array[4])) { continue; } $query = 'DELETE FROM `' . _DB_PREFIX_ . $query_array[0] . '` WHERE `' . $query_array[1] . '` NOT IN (SELECT `' . $query_array[3] . '` FROM `' . _DB_PREFIX_ . $query_array[2] . '`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } } // _lang table cleaning $tables = Db::getInstance()->executeS('SHOW TABLES LIKE "' . preg_replace('/([%_])/', '\\$1', _DB_PREFIX_) . '%_\\_lang"'); foreach ($tables as $table) { $table_lang = current($table); $table = str_replace('_lang', '', $table_lang); $id_table = 'id_' . preg_replace('/^' . _DB_PREFIX_ . '/', '', $table); $query = 'DELETE FROM `' . bqSQL($table_lang) . '` WHERE `' . bqSQL($id_table) . '` NOT IN (SELECT `' . bqSQL($id_table) . '` FROM `' . bqSQL($table) . '`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } $query = 'DELETE FROM `' . bqSQL($table_lang) . '` WHERE `id_lang` NOT IN (SELECT `id_lang` FROM `' . _DB_PREFIX_ . 'lang`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } } // _shop table cleaning $tables = Db::getInstance()->executeS('SHOW TABLES LIKE "' . preg_replace('/([%_])/', '\\$1', _DB_PREFIX_) . '%_\\_shop"'); foreach ($tables as $table) { $table_shop = current($table); $table = str_replace('_shop', '', $table_shop); $id_table = 'id_' . preg_replace('/^' . _DB_PREFIX_ . '/', '', $table); if (in_array($table_shop, array(_DB_PREFIX_ . 'carrier_tax_rules_group_shop'))) { continue; } $query = 'DELETE FROM `' . bqSQL($table_shop) . '` WHERE `' . bqSQL($id_table) . '` NOT IN (SELECT `' . bqSQL($id_table) . '` FROM `' . bqSQL($table) . '`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } $query = 'DELETE FROM `' . bqSQL($table_shop) . '` WHERE `id_shop` NOT IN (SELECT `id_shop` FROM `' . _DB_PREFIX_ . 'shop`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } } // stock_available $query = 'DELETE FROM `' . _DB_PREFIX_ . 'stock_available` WHERE `id_shop` NOT IN (SELECT `id_shop` FROM `' . _DB_PREFIX_ . 'shop`) AND `id_shop_group` NOT IN (SELECT `id_shop_group` FROM `' . _DB_PREFIX_ . 'shop_group`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } Category::regenerateEntireNtree(); // @Todo: Remove attachment files, images... Image::clearTmpDir(); self::clearAllCaches(); return $logs; }
private function truncateTables($case) { switch ((int) $case) { case $this->entities[$this->l('Categories')]: Db::getInstance()->Execute('DELETE FROM `' . _DB_PREFIX_ . 'category` WHERE id_category != 1'); Db::getInstance()->Execute('DELETE FROM `' . _DB_PREFIX_ . 'category_lang` WHERE id_category != 1'); Db::getInstance()->Execute('ALTER TABLE `' . _DB_PREFIX_ . 'category` AUTO_INCREMENT = 2'); foreach (scandir(_PS_CAT_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_CAT_IMG_DIR_ . $d); } } break; case $this->entities[$this->l('Products')]: Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'feature_product'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_lang'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'category_product'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_tag'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image_lang'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'specific_price'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'specific_price_priority'); Image::deleteAllImages(_PS_PROD_IMG_DIR_); mkdir(_PS_PROD_IMG_DIR_); break; case $this->entities[$this->l('Customers')]: Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customer'); break; case $this->entities[$this->l('Addresses')]: Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'address'); break; case $this->entities[$this->l('Combinations')]: Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_impact'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute`'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_combination`'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_image`'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group`'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group_lang`'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute`'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_lang`'); break; case $this->entities[$this->l('Manufacturers')]: Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer_lang'); foreach (scandir(_PS_MANU_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_MANU_IMG_DIR_ . $d); } } break; case $this->entities[$this->l('Suppliers')]: Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier'); Db::getInstance()->Execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier_lang'); foreach (scandir(_PS_SUPP_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_SUPP_IMG_DIR_ . $d); } } break; } Image::clearTmpDir(); return true; }
protected function truncateTables($case) { switch ((int) $case) { case $this->entities[$this->l('Categories')]: Db::getInstance()->execute(' DELETE FROM `' . _DB_PREFIX_ . 'category` WHERE id_category NOT IN (' . (int) Configuration::get('PS_HOME_CATEGORY') . ', ' . (int) Configuration::get('PS_ROOT_CATEGORY') . ')'); Db::getInstance()->execute(' DELETE FROM `' . _DB_PREFIX_ . 'category_lang` WHERE id_category NOT IN (' . (int) Configuration::get('PS_HOME_CATEGORY') . ', ' . (int) Configuration::get('PS_ROOT_CATEGORY') . ')'); Db::getInstance()->execute(' DELETE FROM `' . _DB_PREFIX_ . 'category_shop` WHERE `id_category` NOT IN (' . (int) Configuration::get('PS_HOME_CATEGORY') . ', ' . (int) Configuration::get('PS_ROOT_CATEGORY') . ')'); Db::getInstance()->execute('ALTER TABLE `' . _DB_PREFIX_ . 'category` AUTO_INCREMENT = 3'); foreach (scandir(_PS_CAT_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_CAT_IMG_DIR_ . $d); } } break; case $this->entities[$this->l('Products')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_shop`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'feature_product`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_lang`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'category_product`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_tag`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image_lang`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'image_shop`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'specific_price`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'specific_price_priority`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_carrier`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'cart_product`'); if (count(Db::getInstance()->executeS('SHOW TABLES LIKE \'' . _DB_PREFIX_ . 'favorite_product\' '))) { //check if table exist Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'favorite_product`'); } Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attachment`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_country_tax`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_download`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_group_reduction_cache`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_sale`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_supplier`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'warehouse_product_location`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'stock`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'stock_available`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'stock_mvt`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customization`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customization_field`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supply_order_detail`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_impact`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_shop`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_combination`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_image`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'pack`'); Image::deleteAllImages(_PS_PROD_IMG_DIR_); if (!file_exists(_PS_PROD_IMG_DIR_)) { mkdir(_PS_PROD_IMG_DIR_); } break; case $this->entities[$this->l('Combinations')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_impact`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_lang`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group_lang`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_group_shop`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'attribute_shop`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_shop`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_combination`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'product_attribute_image`'); Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'stock_available` WHERE id_product_attribute != 0'); break; case $this->entities[$this->l('Customers')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'customer`'); break; case $this->entities[$this->l('Addresses')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'address`'); break; case $this->entities[$this->l('Brands')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer_lang`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'manufacturer_shop`'); foreach (scandir(_PS_MANU_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_MANU_IMG_DIR_ . $d); } } break; case $this->entities[$this->l('Suppliers')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier_lang`'); Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'supplier_shop`'); foreach (scandir(_PS_SUPP_IMG_DIR_) as $d) { if (preg_match('/^[0-9]+(\\-(.*))?\\.jpg$/', $d)) { unlink(_PS_SUPP_IMG_DIR_ . $d); } } break; case $this->entities[$this->l('Alias')]: Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'alias`'); break; } Image::clearTmpDir(); return true; }
public static function checkAndFix() { $db = Db::getInstance(); $logs = array(); // Remove doubles in the configuration $filtered_configuration = array(); $result = $db->ExecuteS('SELECT * FROM ' . _DB_PREFIX_ . 'configuration'); foreach ($result as $row) { $key = $row['id_shop_group'] . '-|-' . $row['id_shop'] . '-|-' . $row['name']; if (in_array($key, $filtered_configuration)) { $query = 'DELETE FROM ' . _DB_PREFIX_ . 'configuration WHERE id_configuration = ' . (int) $row['id_configuration']; $db->Execute($query); $logs[$query] = 1; } else { $filtered_configuration[] = $key; } } unset($filtered_configuration); // Remove inexisting or monolanguage configuration value from configuration_lang $query = 'DELETE FROM `' . _DB_PREFIX_ . 'configuration_lang` WHERE `id_configuration` NOT IN (SELECT `id_configuration` FROM `' . _DB_PREFIX_ . 'configuration`) OR `id_configuration` IN (SELECT `id_configuration` FROM `' . _DB_PREFIX_ . 'configuration` WHERE name IS NULL OR name = "")'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } // Simple Cascade Delete $queries = array(array('access', 'id_profile', 'profile', 'id_profile'), array('access', 'id_tab', 'tab', 'id_tab'), array('accessory', 'id_product_1', 'product', 'id_product'), array('accessory', 'id_product_2', 'product', 'id_product'), array('address_format', 'id_country', 'country', 'id_country'), array('attribute', 'id_attribute_group', 'attribute_group', 'id_attribute_group'), array('carrier_group', 'id_carrier', 'carrier', 'id_carrier'), array('carrier_group', 'id_group', 'group', 'id_group'), array('carrier_zone', 'id_carrier', 'carrier', 'id_carrier'), array('carrier_zone', 'id_zone', 'zone', 'id_zone'), array('cart_cart_rule', 'id_cart', 'cart', 'id_cart'), array('cart_product', 'id_cart', 'cart', 'id_cart'), array('cart_rule_carrier', 'id_cart_rule', 'cart_rule', 'id_cart_rule'), array('cart_rule_carrier', 'id_carrier', 'carrier', 'id_carrier'), array('cart_rule_combination', 'id_cart_rule_1', 'cart_rule', 'id_cart_rule'), array('cart_rule_combination', 'id_cart_rule_2', 'cart_rule', 'id_cart_rule'), array('cart_rule_country', 'id_cart_rule', 'cart_rule', 'id_cart_rule'), array('cart_rule_country', 'id_country', 'country', 'id_country'), array('cart_rule_group', 'id_cart_rule', 'cart_rule', 'id_cart_rule'), array('cart_rule_group', 'id_group', 'group', 'id_group'), array('cart_rule_product_rule_group', 'id_cart_rule', 'cart_rule', 'id_cart_rule'), array('cart_rule_product_rule', 'id_product_rule_group', 'cart_rule_product_rule_group', 'id_product_rule_group'), array('cart_rule_product_rule_value', 'id_product_rule', 'cart_rule_product_rule', 'id_product_rule'), array('category_group', 'id_category', 'category', 'id_category'), array('category_group', 'id_group', 'group', 'id_group'), array('category_product', 'id_category', 'category', 'id_category'), array('category_product', 'id_product', 'product', 'id_product'), array('cms', 'id_cms_category', 'cms_category', 'id_cms_category'), array('cms_block', 'id_cms_category', 'cms_category', 'id_cms_category', 'blockcms'), array('cms_block_page', 'id_cms', 'cms', 'id_cms', 'blockcms'), array('cms_block_page', 'id_cms_block', 'cms_block', 'id_cms_block', 'blockcms'), array('compare', 'id_customer', 'customer', 'id_customer'), array('compare_product', 'id_compare', 'compare', 'id_compare'), array('compare_product', 'id_product', 'product', 'id_product'), array('connections', 'id_shop_group', 'shop_group', 'id_shop_group'), array('connections', 'id_shop', 'shop', 'id_shop'), array('connections_page', 'id_connections', 'connections', 'id_connections'), array('connections_page', 'id_page', 'page', 'id_page'), array('connections_source', 'id_connections', 'connections', 'id_connections'), array('customer', 'id_shop_group', 'shop_group', 'id_shop_group'), array('customer', 'id_shop', 'shop', 'id_shop'), array('customer_group', 'id_group', 'group', 'id_group'), array('customer_group', 'id_customer', 'customer', 'id_customer'), array('customer_message', 'id_customer_thread', 'customer_thread', 'id_customer_thread'), array('customer_thread', 'id_shop', 'shop', 'id_shop'), array('customization', 'id_cart', 'cart', 'id_cart'), array('customization_field', 'id_product', 'product', 'id_product'), array('customized_data', 'id_customization', 'customization', 'id_customization'), array('delivery', 'id_shop', 'shop', 'id_shop'), array('delivery', 'id_shop_group', 'shop_group', 'id_shop_group'), array('delivery', 'id_carrier', 'carrier', 'id_carrier'), array('delivery', 'id_zone', 'zone', 'id_zone'), array('editorial', 'id_shop', 'shop', 'id_shop', 'editorial'), array('favorite_product', 'id_product', 'product', 'id_product', 'favoriteproducts'), array('favorite_product', 'id_customer', 'customer', 'id_customer', 'favoriteproducts'), array('favorite_product', 'id_shop', 'shop', 'id_shop', 'favoriteproducts'), array('feature_product', 'id_feature', 'feature', 'id_feature'), array('feature_product', 'id_product', 'product', 'id_product'), array('feature_value', 'id_feature', 'feature', 'id_feature'), array('group_reduction', 'id_group', 'group', 'id_group'), array('group_reduction', 'id_category', 'category', 'id_category'), array('homeslider', 'id_shop', 'shop', 'id_shop', 'homeslider'), array('homeslider', 'id_homeslider_slides', 'homeslider_slides', 'id_homeslider_slides', 'homeslider'), array('hook_module', 'id_hook', 'hook', 'id_hook'), array('hook_module', 'id_module', 'module', 'id_module'), array('hook_module_exceptions', 'id_hook', 'hook', 'id_hook'), array('hook_module_exceptions', 'id_module', 'module', 'id_module'), array('hook_module_exceptions', 'id_shop', 'shop', 'id_shop'), array('image', 'id_product', 'product', 'id_product'), array('message', 'id_cart', 'cart', 'id_cart'), array('message_readed', 'id_message', 'message', 'id_message'), array('message_readed', 'id_employee', 'employee', 'id_employee'), array('module_access', 'id_profile', 'profile', 'id_profile'), array('module_access', 'id_module', 'module', 'id_module'), array('module_country', 'id_module', 'module', 'id_module'), array('module_country', 'id_country', 'country', 'id_country'), array('module_country', 'id_shop', 'shop', 'id_shop'), array('module_currency', 'id_module', 'module', 'id_module'), array('module_currency', 'id_currency', 'currency', 'id_currency'), array('module_currency', 'id_shop', 'shop', 'id_shop'), array('module_group', 'id_module', 'module', 'id_module'), array('module_group', 'id_group', 'group', 'id_group'), array('module_group', 'id_shop', 'shop', 'id_shop'), array('module_preference', 'id_employee', 'employee', 'id_employee'), array('orders', 'id_shop', 'shop', 'id_shop'), array('orders', 'id_shop_group', 'group_shop', 'id_shop_group'), array('order_carrier', 'id_order', 'orders', 'id_order'), array('order_cart_rule', 'id_order', 'orders', 'id_order'), array('order_detail', 'id_order', 'orders', 'id_order'), array('order_detail_tax', 'id_order_detail', 'order_detail', 'id_order_detail'), array('order_history', 'id_order', 'orders', 'id_order'), array('order_invoice', 'id_order', 'orders', 'id_order'), array('order_invoice_payment', 'id_order', 'orders', 'id_order'), array('order_invoice_tax', 'id_order_invoice', 'order_invoice', 'id_order_invoice'), array('order_return', 'id_order', 'orders', 'id_order'), array('order_return_detail', 'id_order_return', 'order_return', 'id_order_return'), array('order_slip', 'id_order', 'orders', 'id_order'), array('order_slip_detail', 'id_order_slip', 'order_slip', 'id_order_slip'), array('pack', 'id_product_pack', 'product', 'id_product'), array('pack', 'id_product_item', 'product', 'id_product'), array('page', 'id_page_type', 'page_type', 'id_page_type'), array('page_viewed', 'id_shop', 'shop', 'id_shop'), array('page_viewed', 'id_shop_group', 'shop_group', 'id_shop_group'), array('page_viewed', 'id_date_range', 'date_range', 'id_date_range'), array('product_attachment', 'id_attachment', 'attachment', 'id_attachment'), array('product_attachment', 'id_product', 'product', 'id_product'), array('product_attribute', 'id_product', 'product', 'id_product'), array('product_attribute_combination', 'id_product_attribute', 'product_attribute', 'id_product_attribute'), array('product_attribute_combination', 'id_attribute', 'attribute', 'id_attribute'), array('product_attribute_image', 'id_image', 'image', 'id_image'), array('product_attribute_image', 'id_product_attribute', 'product_attribute', 'id_product_attribute'), array('product_carrier', 'id_product', 'product', 'id_product'), array('product_carrier', 'id_shop', 'shop', 'id_shop'), array('product_carrier', 'id_carrier_reference', 'carrier', 'id_reference'), array('product_country_tax', 'id_product', 'product', 'id_product'), array('product_country_tax', 'id_country', 'country', 'id_country'), array('product_country_tax', 'id_tax', 'tax', 'id_tax'), array('product_download', 'id_product', 'product', 'id_product'), array('product_group_reduction_cache', 'id_product', 'product', 'id_product'), array('product_group_reduction_cache', 'id_group', 'group', 'id_group'), array('product_sale', 'id_product', 'product', 'id_product'), array('product_supplier', 'id_product', 'product', 'id_product'), array('product_supplier', 'id_supplier', 'supplier', 'id_supplier'), array('product_tag', 'id_product', 'product', 'id_product'), array('product_tag', 'id_tag', 'tag', 'id_tag'), array('range_price', 'id_carrier', 'carrier', 'id_carrier'), array('range_weight', 'id_carrier', 'carrier', 'id_carrier'), array('referrer_cache', 'id_referrer', 'referrer', 'id_referrer'), array('referrer_cache', 'id_connections_source', 'connections_source', 'id_connections_source'), array('scene_category', 'id_scene', 'scene', 'id_scene'), array('scene_category', 'id_category', 'category', 'id_category'), array('scene_products', 'id_scene', 'scene', 'id_scene'), array('scene_products', 'id_product', 'product', 'id_product'), array('search_index', 'id_product', 'product', 'id_product'), array('search_word', 'id_lang', 'lang', 'id_lang'), array('search_word', 'id_shop', 'shop', 'id_shop'), array('shop_url', 'id_shop', 'shop', 'id_shop'), array('specific_price_priority', 'id_product', 'product', 'id_product'), array('stock', 'id_warehouse', 'warehouse', 'id_warehouse'), array('stock', 'id_product', 'product', 'id_product'), array('stock_available', 'id_product', 'product', 'id_product'), array('stock_mvt', 'id_stock', 'stock', 'id_stock'), array('tab_module_preference', 'id_employee', 'employee', 'id_employee'), array('tab_module_preference', 'id_tab', 'tab', 'id_tab'), array('tax_rule', 'id_country', 'country', 'id_country'), array('theme_specific', 'id_theme', 'theme', 'id_theme'), array('theme_specific', 'id_shop', 'shop', 'id_shop'), array('warehouse_carrier', 'id_warehouse', 'warehouse', 'id_warehouse'), array('warehouse_carrier', 'id_carrier', 'carrier', 'id_carrier'), array('warehouse_product_location', 'id_product', 'product', 'id_product'), array('warehouse_product_location', 'id_warehouse', 'warehouse', 'id_warehouse')); $queries = self::bulle($queries); foreach ($queries as $query_array) { // If this is a module and the module is not installed, we continue if (isset($query_array[4]) && !Module::isInstalled($query_array[4])) { continue; } $query = 'DELETE FROM `' . _DB_PREFIX_ . $query_array[0] . '` WHERE `' . $query_array[1] . '` NOT IN (SELECT `' . $query_array[3] . '` FROM `' . _DB_PREFIX_ . $query_array[2] . '`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } } // _lang table cleaning $tables = Db::getInstance()->executeS('SHOW TABLES LIKE "' . preg_replace('/([%_])/', '\\$1', _DB_PREFIX_) . '%_\\_lang"'); foreach ($tables as $table) { $table_lang = current($table); $table = str_replace('_lang', '', $table_lang); $id_table = 'id_' . preg_replace('/^' . _DB_PREFIX_ . '/', '', $table); $query = 'DELETE FROM `' . bqSQL($table_lang) . '` WHERE `' . bqSQL($id_table) . '` NOT IN (SELECT `' . bqSQL($id_table) . '` FROM `' . bqSQL($table) . '`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } $query = 'DELETE FROM `' . bqSQL($table_lang) . '` WHERE `id_lang` NOT IN (SELECT `id_lang` FROM `' . _DB_PREFIX_ . 'lang`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } } // _shop table cleaning $tables = Db::getInstance()->executeS('SHOW TABLES LIKE "' . preg_replace('/([%_])/', '\\$1', _DB_PREFIX_) . '%_\\_shop"'); foreach ($tables as $table) { $table_shop = current($table); $table = str_replace('_shop', '', $table_shop); $id_table = 'id_' . preg_replace('/^' . _DB_PREFIX_ . '/', '', $table); if (in_array($table_shop, array(_DB_PREFIX_ . 'carrier_tax_rules_group_shop'))) { continue; } $query = 'DELETE FROM `' . bqSQL($table_shop) . '` WHERE `' . bqSQL($id_table) . '` NOT IN (SELECT `' . bqSQL($id_table) . '` FROM `' . bqSQL($table) . '`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } $query = 'DELETE FROM `' . bqSQL($table_shop) . '` WHERE `id_shop` NOT IN (SELECT `id_shop` FROM `' . _DB_PREFIX_ . 'shop`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } } // stock_available $query = 'DELETE FROM `' . _DB_PREFIX_ . 'stock_available` WHERE `id_shop` NOT IN (SELECT `id_shop` FROM `' . _DB_PREFIX_ . 'shop`) AND `id_shop_group` NOT IN (SELECT `id_shop_group` FROM `' . _DB_PREFIX_ . 'shop_group`)'; if ($db->Execute($query)) { if ($affected_rows = $db->Affected_Rows()) { $logs[$query] = $affected_rows; } } Category::regenerateEntireNtree(); // @Todo: Remove attachment files, images... Image::clearTmpDir(); self::clearAllCaches(); return $logs; }
private function truncateTables($case) { switch ((int) $case) { case $this->entities[$this->l('Categories')]: $categories = Db::getInstance()->ExecuteS('SELECT `id_category` FROM `' . _DB_PREFIX_ . 'category` WHERE id_category != 1'); foreach ($categories as $category) { $c = new Category((int) $category['id_category']); $c->delete(); } break; case $this->entities[$this->l('Products')]: $products = Db::getInstance()->ExecuteS('SELECT `id_product` FROM `' . _DB_PREFIX_ . 'product`'); foreach ($products as $product) { $p = new Product((int) $product['id_product']); $p->delete(true); } break; case $this->entities[$this->l('Customers')]: $customers = Db::getInstance()->ExecuteS('SELECT `id_customer` FROM `' . _DB_PREFIX_ . 'customer`'); foreach ($customers as $customer) { $c = new Customer((int) $customer['id_customer']); $c->delete(); } break; case $this->entities[$this->l('Addresses')]: $addresses = Db::getInstance()->ExecuteS('SELECT `id_address` FROM `' . _DB_PREFIX_ . 'address`'); foreach ($addresses as $address) { $a = new Address((int) $address['id_address']); $a->delete(); } break; case $this->entities[$this->l('Combinations')]: $products = Db::getInstance()->ExecuteS('SELECT `id_product` FROM `' . _DB_PREFIX_ . 'product`'); foreach ($products as $product) { $p = new Product((int) $product['id_product']); $p->deleteProductAttributes(); } break; case $this->entities[$this->l('Manufacturers')]: $manufacturers = Db::getInstance()->ExecuteS('SELECT `id_manufacturer` FROM `' . _DB_PREFIX_ . 'manufacturer`'); foreach ($manufacturers as $manufacturer) { $m = new Manufacturer((int) $manufacturer['id_manufacturer']); $m->delete(); } break; case $this->entities[$this->l('Suppliers')]: $suppliers = Db::getInstance()->ExecuteS('SELECT `id_supplier` FROM `' . _DB_PREFIX_ . 'supplier`'); foreach ($suppliers as $supplier) { $m = new Supplier((int) $supplier['id_supplier']); $m->delete(); } break; } Image::clearTmpDir(); return true; }