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 000000000..6b43d7e23
Binary files /dev/null and b/modules/pscleaner/logo.png differ
diff --git a/modules/pscleaner/pscleaner.php b/modules/pscleaner/pscleaner.php
new file mode 100644
index 000000000..a2bd99a05
--- /dev/null
+++ b/modules/pscleaner/pscleaner.php
@@ -0,0 +1,483 @@
+
+ * @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 .= '
+
+
+ ';
+ 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