diff --git a/modules/pscleaner/pscleaner.php b/modules/pscleaner/pscleaner.php index 67ea6595c..5b00d4831 100644 --- a/modules/pscleaner/pscleaner.php +++ b/modules/pscleaner/pscleaner.php @@ -131,6 +131,31 @@ class PSCleaner extends Module $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 NOT NULL AND name != "")'; + if ($db->Execute($query)) + if ($affected_rows = $db->Affected_Rows()) + $logs[$query] = $affected_rows; + // 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, 4 => module_name