diff --git a/ecrire/base/dump.php b/ecrire/base/dump.php index b2b8d38d844c478d60ebd1d1ace2c1a531a009cc..5c42e3f88bf915c3bf4843530af9c3ae990e9d51 100644 --- a/ecrire/base/dump.php +++ b/ecrire/base/dump.php @@ -42,6 +42,63 @@ function base_dump_dir($meta){ return $dir; } +/** + * Lister toutes les tables d'un serveur + * en excluant eventuellement une liste fournie + * + * @param string $serveur + * @param array $tables + * @param array $exclude + * @return array + */ +function base_lister_toutes_tables($serveur='', $tables=array(), $exclude = array()) { + spip_connect($serveur); + $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0]; + $prefixe = $connexion['prefixe']; + + $p = '/^' . $prefixe . '/'; + $res = $tables; + foreach(sql_alltable(null,$serveur) as $t) { + if (preg_match($p, $t)) { + $t = preg_replace($p, 'spip', $t); + if (!in_array($t, $tables) AND !in_array($t, $exclude)) $res[]= $t; + } + } + sort($res); + return $res; +} + + +/** + * Fabrique la liste a cocher des tables a traiter (copie, delete, sauvegarde) + * + * @param string $name + * @param bool $check + * @return string + */ +function base_saisie_tables($name, $tables, $exclude = array(), $post=null, $serveur='') { + include_spip('inc/filtres'); + foreach ($tables as $k => $t) { + // par defaut tout est coche sauf les tables dans $exclude + if (is_null($post)) + $check = (in_array($t,$exclude)?false:true); + // mais si on a poste une selection, la reprendre + else + $check = in_array($t,$post); + + $res[$k] = "<input type='checkbox' value='$t' name='$name" + . "[]' id='$name$k'" + . ($check ? " checked='checked'" : '') + . "/>\n" + . "<label for='$name$k'>".$t."</label>" + . " (" + . sinon(singulier_ou_pluriel(sql_countsel($t,'','','',$serveur), 'dump:une_donnee', 'dump:nb_donnees'),_T('dump:aucune_donnee')) + . ")"; + } + return $res; +} + + /** * Lister les tables non exportables par defaut * (liste completable par le pipeline lister_tables_noexport diff --git a/ecrire/exec/delete_all.php b/ecrire/exec/delete_all.php index 342ab61212e59d413c4e360280eef3b54692c7e0..4d898faabcc7e84e9592c5c58520edd52c15a3d4 100644 --- a/ecrire/exec/delete_all.php +++ b/ecrire/exec/delete_all.php @@ -20,12 +20,14 @@ function exec_delete_all_dist() include_spip('inc/minipres'); echo minipres(); } else { - $res = liste_tables_en_base('delete'); + include_spip('base/dump'); + $res = base_lister_toutes_tables(); if (!$res) { include_spip('inc/minipres'); spip_log("Erreur base de donnees"); echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'). "<p><tt>".sql_errno()." ".sql_error()."</tt></p>"); } else { + $res = base_saisie_tables('delete', $res); include_spip('inc/headers'); $res = "\n<ol style='text-align:left'><li>\n" . join("</li>\n<li>", $res) . @@ -39,18 +41,4 @@ function exec_delete_all_dist() } } -function liste_tables_en_base($name) -{ - $res = sql_alltable(); - $c = "type='checkbox' checked='checked'"; - foreach ($res as $k => $t) { - $res[$k] = "<input $c value='$t' id='$name_$t' name='$name" - . "[]' />\n" - . $t - . " (" - . sql_countsel($t) - . ")"; - } - return $res; -} -?> +?> \ No newline at end of file