From 9d0b6de69f9683170ec38b52a8fc379a3f3e0889 Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Fri, 8 Mar 2013 18:10:38 +0100 Subject: [PATCH] [+] MO : new module PrestaShop Cleaner: Check and fix functional integrity constraints and remove default data --- modules/pscleaner/config.xml | 12 + modules/pscleaner/index.php | 35 ++ modules/pscleaner/logo.png | Bin 0 -> 3000 bytes modules/pscleaner/pscleaner.php | 483 +++++++++++++++++++++++ modules/pscleaner/translations/fr.php | 15 + modules/pscleaner/translations/index.php | 35 ++ 6 files changed, 580 insertions(+) create mode 100644 modules/pscleaner/config.xml create mode 100644 modules/pscleaner/index.php create mode 100644 modules/pscleaner/logo.png create mode 100644 modules/pscleaner/pscleaner.php create mode 100644 modules/pscleaner/translations/fr.php create mode 100644 modules/pscleaner/translations/index.php diff --git a/modules/pscleaner/config.xml b/modules/pscleaner/config.xml new file mode 100644 index 000000000..d1f03fa8f --- /dev/null +++ b/modules/pscleaner/config.xml @@ -0,0 +1,12 @@ + + + pscleaner + + + + + + 1 + 0 + + \ No newline at end of file diff --git a/modules/pscleaner/index.php b/modules/pscleaner/index.php new file mode 100644 index 000000000..3f6561f72 --- /dev/null +++ b/modules/pscleaner/index.php @@ -0,0 +1,35 @@ + +* @copyright 2007-2013 PrestaShop SA +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); +header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); + +header("Cache-Control: no-store, no-cache, must-revalidate"); +header("Cache-Control: post-check=0, pre-check=0", false); +header("Pragma: no-cache"); + +header("Location: ../"); +exit; \ No newline at end of file diff --git a/modules/pscleaner/logo.png b/modules/pscleaner/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6b43d7e23721bd6186d17461e412293be97bbae5 GIT binary patch literal 3000 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 u + * @copyright 2007-2013 PrestaShop SA + * @version Release: $Revision: 7060 $ + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + * International Registered Trademark & Property of PrestaShop SA + */ + +if (!defined('_CAN_LOAD_FILES_')) + exit; + +class PSCleaner extends Module +{ + public function __construct() + { + $this->name = 'pscleaner'; + $this->tab = 'administration'; + $this->version = '0.9'; + $this->author = 'PrestaShop'; + $this->need_instance = 0; + + parent::__construct(); + + $this->displayName = $this->l('PrestaShop Cleaner'); + $this->description = $this->l('Check and fix functional integrity constraints and remove default data'); + $this->secure_key = Tools::encrypt($this->name); + } + + public function getContent() + { + $html = '

'.$this->l('Be really careful with this tool - There is no possible rollback!').'

'; + if (Tools::isSubmit('submitCheckAndFix')) + $html .= (count($logs = self::checkAndFix()) ? print_r($logs, true) : $this->l('Nothing that need to be cleaned')).'

'; + if (Tools::isSubmit('submitTruncateCatalog')) + { + self::truncate('catalog'); + $html .= $this->l('Catalog truncated').'

'; + } + if (Tools::isSubmit('submitTruncateSales')) + { + self::truncate('sales'); + $html .= $this->l('Orders and customers truncated').'

'; + } + + $html .= ' +
+
'.$this->l('Functional integrity constraints').' + +
+
+

+
+
'.$this->l('Data').' + +

+ +
+
'; + return $html; + } + + public static function checkAndFix() + { + $db = Db::getInstance(); + $logs = array(); + + // Simple Cascade Delete + $queries = array( + // 0 => DELETE FROM __table__, 1 => WHERE __id__ NOT IN, 2 => NOT IN __table__, 3 => __id__ used in the "NOT IN" table + 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'), + array('cms_block_page', 'id_cms', 'cms', 'id_cms'), + array('cms_block_page', 'id_cms_block', 'cms_block', 'id_cms_block'), + 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'), + array('favorite_product', 'id_product', 'product', 'id_product'), + array('favorite_product', 'id_customer', 'customer', 'id_customer'), + array('favorite_product', 'id_shop', 'shop', 'id_shop'), + 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'), + array('homeslider', 'id_homeslider_slides', 'homeslider_slides', 'id_homeslider_slides'), + 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_available', 'id_shop', 'shop', 'id_shop'), + array('stock_available', 'id_shop_group', 'shop_group', 'id_shop_group'), + 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) + { + $query = 'DELETE FROM `'._DB_PREFIX_.$query_array[0].'` WHERE `'.$query_array[1].'` NOT IN (SELECT `'.$query_array[3].'` FROM `'._DB_PREFIX_.$query_array[2].'`)'; + $db->Execute($query); + if ($affected_rows = $db->Affected_Rows()) + $logs[$query] = $affected_rows; + } + + // _lang table cleaning + $tables = Db::getInstance()->executeS('SHOW TABLES LIKE "'._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).'`)'; + $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`)'; + $db->Execute($query); + if ($affected_rows = $db->Affected_Rows()) + $logs[$query] = $affected_rows; + } + + // _shop table cleaning + $tables = Db::getInstance()->executeS('SHOW TABLES LIKE "'._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('ps2_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).'`)'; + $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`)'; + $db->Execute($query); + if ($affected_rows = $db->Affected_Rows()) + $logs[$query] = $affected_rows; + } + + Category::regenerateEntireNtree(); + + // @Todo: Remove attachment files, images... + Image::clearTmpDir(); + + return $logs; + } + + public function truncate($case) + { + $db = Db::getInstance(); + + switch ($case) + { + case 'catalog': + $id_home = Configuration::get('PS_HOME_CATEGORY'); + $id_root = Configuration::get('PS_ROOT_CATEGORY'); + Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category` WHERE id_category NOT IN ('.(int)$id_home.', '.(int)$id_root.')'); + Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_lang` WHERE id_category NOT IN ('.(int)$id_home.', '.(int)$id_root.')'); + Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'category_shop` WHERE id_category NOT IN ('.(int)$id_home.', '.(int)$id_root.')'); + foreach (scandir(_PS_CAT_IMG_DIR_) as $dir) + if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $dir)) + unlink(_PS_CAT_IMG_DIR_.$dir); + $tables = array( + 'product', + 'product_shop', + 'feature_product', + 'product_lang', + 'category_product', + 'product_tag', + 'image', + 'image_lang', + 'image_shop', + 'specific_price', + 'specific_price_priority', + 'product_carrier', + 'cart_product', + 'compare_product', + 'product_attachment', + 'product_country_tax', + 'product_download', + 'product_group_reduction_cache', + 'product_sale', + 'product_supplier', + 'scene_products', + 'warehouse_product_location', + 'stock', + 'stock_available', + 'stock_mvt', + 'customization', + 'customization_field', + 'supply_order_detail', + 'attribute_impact', + 'product_attribute', + 'product_attribute_shop', + 'product_attribute_combination', + 'product_attribute_image', + 'attribute', + 'attribute_impact', + 'attribute_lang', + 'attribute_group', + 'attribute_group_lang', + 'attribute_group_shop', + 'attribute_shop', + 'product_attribute', + 'product_attribute_shop', + 'product_attribute_combination', + 'product_attribute_image', + 'stock_available', + 'manufacturer', + 'manufacturer_lang', + 'manufacturer_shop', + 'supplier', + 'supplier_lang', + 'supplier_shop', + 'customization', + 'customization_field', + 'customization_field_lang', + 'customized_data', + 'feature', + 'feature_lang', + 'feature_product', + 'feature_shop', + 'feature_value', + 'feature_value_lang', + 'pack', + 'scene', + 'scene_category', + 'scene_lang', + 'scene_products', + 'scene_shop', + 'search_index', + 'search_word', + 'specific_price', + 'specific_price_priority', + 'specific_price_rule', + 'specific_price_rule_condition', + 'specific_price_rule_condition_group', + 'stock', + 'stock_available', + 'stock_mvt', + ); + foreach ($tables as $table) + $db->execute('TRUNCATE TABLE `'._DB_PREFIX_.bqSQL($table).'`'); + $db->execute('DELETE FROM `'._DB_PREFIX_.'address` WHERE id_customer > 0'); + + Image::deleteAllImages(_PS_PROD_IMG_DIR_); + if (!file_exists(_PS_PROD_IMG_DIR_)) + mkdir(_PS_PROD_IMG_DIR_); + foreach (scandir(_PS_MANU_IMG_DIR_) as $dir) + if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $dir)) + unlink(_PS_MANU_IMG_DIR_.$dir); + foreach (scandir(_PS_SUPP_IMG_DIR_) as $dir) + if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $dir)) + unlink(_PS_SUPP_IMG_DIR_.$dir); + break; + + case 'sales': + $tables = array( + 'customer', + 'cart', + 'cart_product', + 'connections', + 'connections_page', + 'connections_source', + 'customer_group', + 'customer_message', + 'customer_message_sync_imap', + 'customer_thread', + 'guest', + 'message', + 'message_readed', + 'orders', + 'order_carrier', + 'order_cart_rule', + 'order_detail', + 'order_detail_tax', + 'order_history', + 'order_invoice', + 'order_invoice_payment', + 'order_invoice_tax', + 'order_payment', + 'order_return', + 'order_return_detail', + 'order_return_state', + 'order_return_state_lang', + 'order_slip', + 'order_slip_detail', + 'page', + 'pagenotfound', + 'page_type', + 'page_viewed', + 'referrer_cache', + 'sekeyword', + ); + foreach ($tables as $table) + $db->execute('TRUNCATE TABLE `'._DB_PREFIX_.bqSQL($table).'`'); + $db->execute('DELETE FROM `'._DB_PREFIX_.'address` WHERE id_manufacturer > 0 OR id_supplier > 0'); + break; + } + } + + public static function cleanAndOptimize() + { + // Clean (carts...) + } + + protected static function bulle($array) + { + $sorted = false; + $size = count($array); + while (!$sorted) + { + $sorted = true; + for ($i = 0; $i < $size - 1; ++$i) + for ($j = $i + 1; $j < $size; ++$j) + { + if ($array[$i][2] == $array[$j][0]) + { + // var_dump(array($array[$i], $array[$j])); + $tmp = $array[$i]; + $array[$i] = $array[$j]; + $array[$j] = $tmp; + $sorted = false; + } + } + } + return $array; + } +} diff --git a/modules/pscleaner/translations/fr.php b/modules/pscleaner/translations/fr.php new file mode 100644 index 000000000..f66fd335a --- /dev/null +++ b/modules/pscleaner/translations/fr.php @@ -0,0 +1,15 @@ +pscleaner_e5a8af934462c05509c7de5f2f2c18a3'] = 'Nettoyage de PrestaShop'; +$_MODULE['<{pscleaner}prestashop>pscleaner_4bcb9cc248b7f6c8dc7f5c323bde76de'] = 'Vérifie et répare les problèmes d\'intégrité fonctionnelle et supprime les données par défaut (produits, commandes, clients)'; +$_MODULE['<{pscleaner}prestashop>pscleaner_752369f18aebeed9ae8384d8f1b5dc5e'] = 'Soyez très attentifs en utilisant cet outil, il n\'y a pas de retour en arrière possible !'; +$_MODULE['<{pscleaner}prestashop>pscleaner_098c3581a731f08d24311bbf515adbbb'] = 'Rien qui ne nécessite d\'être nettoyer'; +$_MODULE['<{pscleaner}prestashop>pscleaner_1bb7c5eb8682aeada82c407b40ec09c8'] = 'Catalogue supprimé'; +$_MODULE['<{pscleaner}prestashop>pscleaner_ed6ecb7169d5476ef5251524bb17552a'] = 'Commandes et clients supprimés'; +$_MODULE['<{pscleaner}prestashop>pscleaner_3535aa31bd9005bde626ad4312b67d6b'] = 'Contraintes d\'intégrité fonctionnelle'; +$_MODULE['<{pscleaner}prestashop>pscleaner_e84c6595e849214a70b35ed8f95d7d16'] = 'Vérifier et réparer'; +$_MODULE['<{pscleaner}prestashop>pscleaner_f6068daa29dbb05a7ead1e3b5a48bbee'] = 'Données'; +$_MODULE['<{pscleaner}prestashop>pscleaner_b2d7c99e984831bd36221baf34e9c26e'] = 'Supprimer le catalogue'; +$_MODULE['<{pscleaner}prestashop>pscleaner_17ca7f22baf84821b6b73462c96fb1e3'] = 'Supprimer les commandes et clients'; diff --git a/modules/pscleaner/translations/index.php b/modules/pscleaner/translations/index.php new file mode 100644 index 000000000..3f6561f72 --- /dev/null +++ b/modules/pscleaner/translations/index.php @@ -0,0 +1,35 @@ + +* @copyright 2007-2013 PrestaShop SA +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); +header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); + +header("Cache-Control: no-store, no-cache, must-revalidate"); +header("Cache-Control: post-check=0, pre-check=0", false); +header("Pragma: no-cache"); + +header("Location: ../"); +exit; \ No newline at end of file