Skip to content
Extraits de code Groupes Projets
Valider 2d2f6265 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

report de [15127] [15128] [15129] [15130] [15132] [15137] [15138] [15139] [15140] [15141]

concernant la sauvegarde et la restauration
parent a53808cf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -14,6 +14,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/lang');
include_spip('inc/actions');
include_spip('base/dump');
// http://doc.spip.org/@action_export_all_dist
function action_export_all_dist()
......@@ -21,18 +22,13 @@ function action_export_all_dist()
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
@list($quoi, $gz, $archive, $rub, $version) = explode(',', $arg);
$meta = "status_dump_$rub_" . $GLOBALS['visiteur_session']['id_auteur'];
$tables = _request('export');
// determine upload va aussi initialiser l'index "restreint"
$maindir = determine_upload();
if (!$GLOBALS['visiteur_session']['restreint'])
$maindir = _DIR_DUMP;
$dir = sous_repertoire($maindir, $meta);
@list(, $gz, $archive, $rub, $version) = explode(',', $arg);
$meta = base_dump_meta_name($rub);
$dir = base_dump_dir($meta);
$file = $dir . $archive;
utiliser_langue_visiteur();
if ($quoi=='end') export_all_fin($file, $meta, $rub);
export_all_fin($file, $meta, $rub);
}
// http://doc.spip.org/@export_all_fin
......@@ -51,7 +47,6 @@ function export_all_fin($file, $meta, $rub)
$corps = _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .'));
} else {
ecrire_fichier($file, export_enpied(),false,false);
$subdir = dirname($file);
$dir = dirname($subdir);
$nom = basename($file);
......@@ -110,8 +105,4 @@ function export_all_fin($file, $meta, $rub)
}
// production de l'entete du fichier d'archive
// http://doc.spip.org/@export_enpied
function export_enpied () { return "</SPIP>\n";}
?>
......@@ -557,16 +557,16 @@ function sql_test_date($type, $serveur='', $option=true)
// http://doc.spip.org/@description_table
function description_table($nom){
global $tables_principales, $tables_auxiliaires;
global $tables_principales, $tables_auxiliaires;
static $f;
include_spip('base/serial');
if (isset($tables_principales[$nom]))
return $tables_principales[$nom];
include_spip('base/serial');
if (isset($tables_principales[$nom]))
return $tables_principales[$nom];
include_spip('base/auxiliaires');
if (isset($tables_auxiliaires[$nom]))
return $tables_auxiliaires[$nom];
include_spip('base/auxiliaires');
if (isset($tables_auxiliaires[$nom]))
return $tables_auxiliaires[$nom];
if (!$f) $f = charger_fonction('trouver_table', 'base');
return $f($nom);
......
......@@ -30,27 +30,105 @@ if (@is_readable(_CACHE_PLUGINS_FCT)){
include_once(_CACHE_PLUGINS_FCT);
}
// par defaut tout est exporte sauf les tables ci-dessous
global $EXPORT_tables_noexport;
$EXPORT_tables_noexport= array(
'spip_caches', // plugin invalideur
'spip_resultats', // resultats de recherche ... c'est un cache !
'spip_referers',
'spip_referers_articles',
'spip_visites',
'spip_visites_articles',
'spip_versions', // le dump des fragments n'est pas robuste
'spip_versions_fragments' // le dump des fragments n'est pas robuste
);
function base_dump_meta_name($rub){
return $meta = "status_dump_$rub_" . $GLOBALS['visiteur_session']['id_auteur'];
}
function base_dump_dir($meta){
// determine upload va aussi initialiser l'index "restreint"
$maindir = determine_upload();
if (!$GLOBALS['visiteur_session']['restreint'])
$maindir = _DIR_DUMP;
$dir = sous_repertoire($maindir, $meta);
return $dir;
}
/**
* Lister les tables non exportables par defaut
* (liste completable par le pipeline lister_tables_noexport
*
* @staticvar array $EXPORT_tables_noexport
* @return array
*/
function lister_tables_noexport(){
// par defaut tout est exporte sauf les tables ci-dessous
static $EXPORT_tables_noexport = null;
if (!is_null($EXPORT_tables_noexport))
return $EXPORT_tables_noexport;
if (!$GLOBALS['connect_toutes_rubriques']){
$EXPORT_tables_noexport[]='spip_messages';
$EXPORT_tables_noexport[]='spip_auteurs_messages';
$EXPORT_tables_noexport= array(
'spip_caches', // plugin invalideur
'spip_resultats', // resultats de recherche ... c'est un cache !
'spip_referers',
'spip_referers_articles',
'spip_visites',
'spip_visites_articles',
'spip_versions', // le dump des fragments n'est pas robuste
'spip_versions_fragments' // le dump des fragments n'est pas robuste
);
if (!$GLOBALS['connect_toutes_rubriques']){
$EXPORT_tables_noexport[]='spip_messages';
$EXPORT_tables_noexport[]='spip_auteurs_messages';
}
//var_dump($EXPORT_tables_noexport);
$EXPORT_tables_noexport = pipeline('lister_tables_noexport',$EXPORT_tables_noexport);
return $EXPORT_tables_noexport;
}
//var_dump($EXPORT_tables_noexport);
$EXPORT_tables_noexport = pipeline('lister_tables_noexport',$EXPORT_tables_noexport);
/**
* Lister les tables non importables par defaut
* (liste completable par le pipeline lister_tables_noexport
*
* @staticvar array $IMPORT_tables_noimport
* @return array
*/
function lister_tables_noimport(){
static $IMPORT_tables_noimport=null;
if (!is_null($EXPORT_tables_noexport))
return $EXPORT_tables_noexport;
$IMPORT_tables_noimport = array();
// par defaut tout est importe sauf les tables ci-dessous
// possibiliter de definir cela tables via la meta
// compatibilite
if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])){
$IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']);
if (!is_array($IMPORT_tables_noimport)){
include_spip('inc/meta');
effacer_meta('IMPORT_tables_noimport');
}
}
$IMPORT_tables_noimport = pipeline('lister_tables_noimport',$IMPORT_tables_noimport);
return $IMPORT_tables_noimport;
}
/**
* Lister les tables a ne pas effacer
* (liste completable par le pipeline lister_tables_noerase
*
* @staticvar array $IMPORT_tables_noerase
* @return array
*/
function lister_tables_noerase(){
static $IMPORT_tables_noerase=null;
if (!is_null($IMPORT_tables_noerase))
return $IMPORT_tables_noerase;
$IMPORT_tables_noerase = array(
'spip_meta',
// par defaut on ne vide pas les stats, car elles ne figurent pas dans les dump
// et le cas echeant, un bouton dans l'admin permet de les vider a la main...
'spip_referers',
'spip_referers_articles',
'spip_visites',
'spip_visites_articles'
);
$IMPORT_tables_noerase = pipeline('lister_tables_noerase',$IMPORT_tables_noerase);
return $IMPORT_tables_noerase;
}
/**
......
......@@ -12,32 +12,22 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('base/serial');
include_spip('base/auxiliaires');
// par defaut tout est importe sauf les tables ci-dessous
// possibiliter de definir cela tables via la meta
global $IMPORT_tables_noimport;
if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])){
$IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']);
if (!is_array($IMPORT_tables_noimport)){
ecrire_meta('IMPORT_tables_noimport',serialize(array()),'non');
$IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']);
}
}
else{
ecrire_meta('IMPORT_tables_noimport',
serialize($IMPORT_tables_noimport),'non');
}
// NB: Ce fichier peut ajouter des tables (old-style)
// donc il faut l'inclure "en globals"
if ($f = find_in_path('mes_fonctions.php')) {
global $dossier_squelettes;
@include_once ($f);
}
// http://doc.spip.org/@base_import_all_dist
include_spip('base/dump');
/**
* On arrive ici depuis inc/admin
* - au lancement
* - puis apres chaque timeout avec dans ce cas $reprise=true
*
* import_all_debut() est appele la premiere fois et initialise le dump
* import_all_milieu() est appele a chaque retour ici
* quand on en sort,
* - soit on relance pour la seconde etape de fusion
* - soit on finit
*
* @param string $titre
* @param bool $reprise
*/
function base_import_all_dist($titre='', $reprise=false)
{
if (!$titre) return; // anti-testeur automatique
......@@ -62,14 +52,16 @@ function base_import_all_dist($titre='', $reprise=false)
$res = import_all_milieu($request, $archive);
// Cas particulier de la fusion/insertion :
// a la fin de la premiere passe on relance pour l'etape suivante
if (!$res AND $request['insertion'] == 'on') {
$request['insertion'] = 'passe2';
if ($request['url_site']
AND substr($request['url_site'],-1) != '/')
$request['url_site'] .= '/';
ecrire_meta("import_all", serialize($request),'non');
import_all_debut();
$res = import_all_milieu($request, $archive);
$request['insertion'] = 'passe2';
if ($request['url_site']
AND substr($request['url_site'],-1) != '/')
$request['url_site'] .= '/';
ecrire_meta("import_all", serialize($request),'non');
import_all_debut();
$res = import_all_milieu($request, $archive);
}
echo $res, "</body></html>\n";
......@@ -97,7 +89,9 @@ function import_all_milieu($request, $archive)
if ($request['insertion'] == 'passe2') {
include_spip('inc/import_insere');
$trans = translate_init($request);
} else $trans = array();
}
else
$trans = array();
return import_tables($request, $archive);
}
......
......@@ -104,8 +104,9 @@ function admin_sauvegardes($dir_dump, $tri)
. '</table>';
$plie = _T('info_options_avancees');
// restauration partielle / fusion
$res .= debut_cadre_enfonce('',true) .
$opt = debut_cadre_enfonce('',true) .
"\n<div>" .
"<input name='insertion' id='insertion' type='checkbox' />&nbsp; <label for='insertion'>".
_T('sauvegarde_fusionner') .
......@@ -119,6 +120,7 @@ function admin_sauvegardes($dir_dump, $tri)
" &nbsp;\n<input name='url_site' id='url_site' type='text' size='25' />" .
'</div>' .
fin_cadre_enfonce(true);
$res .= block_parfois_visible('import_tables', $plie, $opt, '', false);
return generer_form_ecrire('import_all', $res, '', _T('bouton_restaurer_base'));
}
......
......@@ -18,9 +18,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
* - le premier coup on initialise par exec_export_all_args puis export_all_start
* - ensuite on enchaine sur inc/export, qui remplit le dump et renvoie ici a chaque timeout
* - a chaque coup on relance inc/export
* - lorsque inc/export a fini, il retourne $arg que l'on renvoie
* vers action=export_all avec un end
* - action=export_all clos le fichier et affiche le resume
* - lorsque inc/export a fini, il retourne $arg
* - on l'utilise pour clore le fichier
* - on renvoie
* vers action=export_all pour afficher le resume
*
*/
......@@ -30,9 +31,7 @@ include_spip('base/dump');
// http://doc.spip.org/@exec_export_all_dist
function exec_export_all_dist(){
$rub = intval(_request('id_parent'));
$meta = "status_dump_"
. ($rub ? ($rub .'_') : '')
. $GLOBALS['visiteur_session']['id_auteur'];
$meta = base_dump_meta_name($rub);
if (!isset($GLOBALS['meta'][$meta])){
// c'est un demarrage en arrivee directe depuis exec=admin_tech
......@@ -42,6 +41,10 @@ function exec_export_all_dist(){
$export = charger_fonction('export', 'inc');
$arg = $export($meta);
@list(, $gz, $archive, $rub, $version) = explode(',', $arg);
// quand on sort de $export c'est qu'on a fini
export_all_end($meta,$archive);
include_spip('inc/headers');
redirige_par_entete(generer_action_auteur("export_all",$arg,'',true, true));
......@@ -64,7 +67,7 @@ function exec_export_all_args($meta, $rub, $gz){
// si pas de tables listees en post, utiliser la liste par defaut
if (!$tables = _request('export'))
list($tables,) = base_liste_table_for_dump($GLOBALS['EXPORT_tables_noexport']);
list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
export_all_start($meta, $gz, $archive, $rub, _VERSION_ARCHIVE, $tables);
......@@ -107,6 +110,12 @@ function export_all_start($meta, $gz, $archive, $rub, $version, $tables){
}
function export_all_end($meta, $archive){
$dir = base_dump_dir($meta);
$file = $dir . $archive;
ecrire_fichier($file, export_enpied(),false,false);
}
// http://doc.spip.org/@export_entete
function export_entete($version_archive)
{
......@@ -122,4 +131,10 @@ $GLOBALS['meta']['charset']."\"?".">\n" .
dir_logos=\"" . _DIR_LOGOS . "\"
>\n";
}
// production de l'entete du fichier d'archive
// http://doc.spip.org/@export_enpied
function export_enpied () { return "</SPIP>\n";}
?>
......@@ -14,6 +14,21 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/headers');
/**
* On arrive ici le premier coup depuis admin_tech
* -> dans ce cas on verifie si le dump est lisible et dans une version connu
* -> on affiche un message qui va bien
* -> on passe la main a inc/admin qui va verifier les droits a executer
* base/import_all (fichier ftp ou webmestres) et lancer ce dernier
*
* Lorsqu'un timeout se produit, on rerentre par ici :
* -> on lit la meta import_all pour voir si on est bien en cours de restauration
* -> dans ce cas on passe la main a inc/admin qui verifie les droits et relance
* base/import_all
*
*/
// Restauration d'une base. Comme ca peut etre interrompu pour cause
// de Timeout, un javascript relance automatiquement (cf inc/import.php)
// Comme il peut relancer une action qui vient de se terminer,
......@@ -27,12 +42,20 @@ function exec_import_all_dist()
if (!strlen($archive)) {
$_POST['archive'] = $archive = _request('archive_perso');
}
// si on arrive ici en debut d'operation
if ($archive) {
$dir = import_queldir();
$_POST['dir'] = $dir;
// voir si un message d'avertissement est necessaire
$commentaire = verifier_sauvegarde($dir . $archive);
$insert = _request('insertion');
} elseif (isset($GLOBALS['meta']['import_all'])) {
// est-ce une fusion de base au lieu d'un ecrasement ?
$insert = _request('insertion');
}
// sinon, si on a bien la meta qui donne l'etat d'avancement
// on est en cours d'operation
elseif (isset($GLOBALS['meta']['import_all'])) {
$request = @unserialize($GLOBALS['meta']['import_all']);
// Tester si l'archive est toujous la:
// ca sert pour forcer a sortir d'une restauration inachevee
......@@ -61,7 +84,13 @@ function exec_import_all_dist()
include_spip('inc/import');
detruit_restaurateur();
effacer_meta('admin');
redirige_url_ecrire();
// et verifier la session
include_spip('inc/auth');
if (!$auteur = auth_retrouver_login($GLOBALS['visiteur_session']['login'])
OR $auteur['id_auteur']!=$GLOBALS['visiteur_session']['id_auteur'])
auth_deloger();
else
redirige_url_ecrire();
}
}
......@@ -88,7 +117,15 @@ function import_queldir()
}
// http://doc.spip.org/@verifier_sauvegarde
/**
* Verifier que le dump qu'on essaye d'importer est bien compatible avec la
* version en cours, ou alerter des risques et perils
*
* @global string $spip_version_base
* @param string $archive
* @return string
* message d'avertissement ou d'erreur si necessaire
*/
function verifier_sauvegarde ($archive) {
global $spip_version_base;
......@@ -103,7 +140,7 @@ function verifier_sauvegarde ($archive) {
$buf = $_fread($f, $buf_len);
if (preg_match('/<SPIP\s+[^>]*version_base="([0-9.]+)"[^>]*version_archive="([^"]+)"/', $buf, $regs)
AND $regs[1] == $spip_version_base
AND version_compare($regs[1], "1.813", ">=")
AND import_charge_version($regs[2]) )
return ''; // c'est bon
......@@ -115,12 +152,20 @@ function verifier_sauvegarde ($archive) {
));
}
// http://doc.spip.org/@import_charge_version
/**
* Verifier qu'on a bien le script qui sait lire la version d'archive
*
* @param string $version_archive
* @return string
*/
function import_charge_version($version_archive)
{
// si c'est une archive xml par phpmyadmin, on sait la lire avec le script import_1_3
if (preg_match("{^phpmyadmin::}is",$version_archive)){
$fimport = 'import_1_3';
} else $fimport = 'import_' . str_replace('.','_',$version_archive);
}
else
$fimport = 'import_' . str_replace('.','_',$version_archive);
return charger_fonction($fimport, 'inc', true);
}
......
......@@ -481,6 +481,11 @@ function auth_terminer_identifier_login($auth_methode, $login, $serveur=''){
}
function auth_deloger(){
$logout = charger_fonction('logout','action');
$logout();
}
/**
* Tester la possibilite de modifier le login d'authentification
* pour la methode donnee
......
......@@ -96,6 +96,12 @@ function liste_metas()
// http://doc.spip.org/@actualise_metas
function actualise_metas($liste_meta)
{
$meta_serveur =
array('version_installee','adresse_site','alea_ephemere_ancien','alea_ephemere','alea_ephemere_date','langue_site','langues_proposees','date_calcul_rubriques','derniere_modif','optimiser_table','drapeau_edition','creer_preview','taille_preview','creer_htpasswd','creer_htaccess','gd_formats_read','gd_formats',
'netpbm_formats','formats_graphiques','image_process','plugin_header','plugin');
// verifier le impt=non
sql_updateq('spip_meta',array('impt'=>'non'),sql_in('nom',$meta_serveur));
while (list($nom, $valeur) = each($liste_meta)) {
if (!$GLOBALS['meta'][$nom]) {
ecrire_meta($nom, $valeur);
......
......@@ -12,7 +12,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
define('_EXPORT_TRANCHES_LIMITE', 400);
define('_EXPORT_TRANCHES_LIMITE', 200);
define('_EXTENSION_PARTIES', '.gz');
// http://doc.spip.org/@exec_export_all_args
......@@ -95,9 +95,13 @@ function inc_export_dist($meta)
echo "<div style='text-align: left'>\n";
$etape = 1;
foreach($tables_for_dump as $table){
if ($etape_actuelle <= $etape) { // sauter les deja faits
if ($etape_actuelle > $etape) {
// sauter les deja faits, mais rappeler qu'ils sont fait
echo ( "\n<br /><strong>".$etape. '. '."</strong>". $tables_sauvegardees[$table]);
}
else {
echo ( "\n<br /><strong>".$etape. '. '. $table."</strong> ");
$r = sql_countsel($table);
echo ( "\n<br /><strong>".$etape. '. '. $table."</strong> ");
flush();
if (!$r) $r = ( _T('texte_vide'));
else {
......@@ -107,7 +111,7 @@ function inc_export_dist($meta)
// info pas fiable si interruption+partiel
if ($rub AND $etape_actuelle > 1) $r = ">= $r";
}
echo $r;
echo " $r";
flush();
$sous_etape = 0;
// on utilise l'index comme ca c'est pas grave si on ecrit plusieurs fois la meme
......@@ -241,7 +245,7 @@ function export_objets($table, $cpt, $total, $filetable, $les_rubriques, $les_me
include_spip('inc/headers');
redirige_par_entete("./?exec=export_all&rub=$rub&x=$s");
} /* */
echo(" $debut");
echo(". ");
flush();
}
......
......@@ -16,27 +16,6 @@ include_spip('inc/presentation');
include_spip('inc/acces');
include_spip('base/abstract_sql');
// NB: Ce fichier peut ajouter des tables (old-style)
// donc il faut l'inclure "en globals"
if ($f = find_in_path('mes_fonctions.php')) {
global $dossier_squelettes;
@include_once ($f);
}
if (@is_readable(_CACHE_PLUGINS_FCT)){
// chargement optimise precompile
include_once(_CACHE_PLUGINS_FCT);
}
global $IMPORT_tables_noerase;
$IMPORT_tables_noerase[]='spip_meta';
// par defaut on ne vide pas les stats, car elles ne figurent pas dans les dump
// et le cas echeant, un bouton dans l'admin permet de les vider a la main...
$IMPORT_tables_noerase[]='spip_referers';
$IMPORT_tables_noerase[]='spip_referers_articles';
$IMPORT_tables_noerase[]='spip_visites';
$IMPORT_tables_noerase[]='spip_visites_articles';
// Retourne la premiere balise XML figurant dans le buffet de la sauvegarde
// et avance dans ce buffet jusqu'au '>' de cette balise.
// Si le 2e argument (passe par reference) est non vide
......@@ -109,10 +88,15 @@ function xml_parse_tag($t) {
return $res;
}
// Balise ouvrante:
// 'SPIP' si fait par spip, nom de la base source si fait par phpmyadmin
// http://doc.spip.org/@import_debut
/**
* Lire l'entete du fichier importe
* Balise ouvrante:
* 'SPIP' si fait par spip, nom de la base source si fait par phpmyadmin
*
* @param resource $f
* @param string $gz
* @return array
*/
function import_debut($f, $gz='fread') {
// Pour les anciennes archives, indiquer le charset par defaut:
......@@ -146,13 +130,18 @@ $tables_trans = array(
// http://doc.spip.org/@import_init_tables
function import_init_tables($request)
{
global $IMPORT_tables_noerase, $connect_id_auteur;
function import_init_tables($request){
global $connect_id_auteur;
// commencer par verifier les meta et le champ impt=non
$config = charger_fonction('config','inc');
$config();
// grand menage
// on vide toutes les tables dont la restauration est demandee
$tables = import_table_choix($request);
$tables = array_diff($tables,$IMPORT_tables_noerase);
list($tables,) = base_liste_table_for_dump(lister_tables_noerase());
spip_log(count($tables) . " tables effacees " . join(', ', $tables),'import');
foreach($tables as $table){
// regarder si il y a au moins un champ impt='non'
......@@ -170,7 +159,8 @@ function import_init_tables($request)
sql_updateq('spip_auteurs', array('id_auteur'=>0, 'webmestre'=>$connect_id_auteur), "id_auteur=$connect_id_auteur");
sql_delete("spip_auteurs", "id_auteur!=0");
return $tables;
// retourner la liste des tables a importer, pas celle des tables videes !
return import_table_choix($request);
}
// Effacement de la bidouille ci-dessus
......@@ -243,7 +233,7 @@ function import_tables($request, $archive) {
if ($abs_pos==0) {
list($tag, $atts, $charset) = import_debut($file, $gz);
// improbable: fichier correct avant debut_admin et plus apres
// improbable: fichier correct avant debut_admin et plus apres
if (!$tag) return !($import_ok = true);
$version_archive = import_init_meta($tag, $atts, $charset, $request);
} else {
......@@ -273,6 +263,7 @@ function import_tables($request, $archive) {
$cpt = 0;
$pos = $abs_pos;
// BOUCLE principale qui tourne en rond jusqu'a le fin du fichier
while ($table = $fimport($file, $request, $gz, $atts)) {
// memoriser pour pouvoir reprendre en cas d'interrupt,
// mais pas d'ecriture sur fichier, ca ralentit trop
......@@ -281,22 +272,22 @@ function import_tables($request, $archive) {
if (_DEBUG_IMPORT){
ecrire_fichier(_DIR_TMP."debug_import.log","----\n".$GLOBALS['debug_import_avant']."\n<<<<\n$table\n>>>>\n".$GLOBALS['debug_import_apres']."\n----\n",false,false);
}
if ($oldtable) spip_log("$cpt entrees");
spip_log("Analyse de $table (commence en $pos)");
if ($oldtable) spip_log("$cpt entrees","import");
spip_log("Analyse de $table (commence en $pos)","import");
affiche_progression_javascript($abs_pos,$size,$table);
$oldtable = $table;
$cpt = 0;
$pos = $abs_pos;
}
}
$cpt++;
}
spip_log("$cpt entrees");
spip_log("fin de l'archive, statut: " .($import_ok ? 'ok' : 'alert'));
spip_log("$cpt entrees","import");
spip_log("fin de l'archive, statut: " .($import_ok ? 'ok' : 'alert'),"import");
if (!$import_ok)
return _T('avis_archive_invalide') . ' ' .
_T('taille_octets', array('taille' => $pos)) ;
if ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['version_installee']))){
// il FAUT recharger les bonnes desc serial/aux avant ...
include_spip('base/serial');
......@@ -344,13 +335,15 @@ function import_tables($request, $archive) {
$GLOBALS['meta']["restauration_status_copie"];
if (!$initialisation_copie) {
// vide et liste les tables
// vide les tables qui le necessitent
$tables = import_init_tables($request);
ecrire_meta("restauration_status_copie", "ok",'non');
} else
}
else
// la liste des tables a recopier
$tables = import_table_choix($request);
# var_dump($tables);die();
# var_dump($tables);die();
spip_log("tables a copier :".implode(", ",$tables),'dbdump');
if (in_array('spip_auteurs',$tables)){
$tables = array_diff($tables,array('spip_auteurs'));
$tables[] = 'spip_auteurs';
......@@ -388,6 +381,9 @@ function import_tables($request, $archive) {
}
}
}
// recharger les metas
lire_metas();
#die();
return '' ;
}
......@@ -411,7 +407,7 @@ function import_init_meta($tag, $atts, $charset, $request)
}
if ($old OR $insert) {
$init = $request['init'];
spip_log("import_init_meta lance $init");
spip_log("import_init_meta lance $init","import");
$init($request);
}
......@@ -496,65 +492,10 @@ function affiche_progression_javascript($abs_pos,$size, $table="") {
// http://doc.spip.org/@import_table_choix
function import_table_choix($request)
{
// construction de la liste des tables pour le dump :
// toutes les tables principales
// + toutes les tables auxiliaires hors relations
// + les tables relations dont les deux tables liees sont dans la liste
$tables_for_dump = array();
$tables_pointees = array();
global $IMPORT_tables_noimport;
global $tables_principales;
global $tables_auxiliaires;
global $tables_jointures;
if (!isset($IMPORT_tables_noimport)) $IMPORT_tables_noimport=array();
// on construit un index des tables de liens
// pour les ajouter SI les deux tables qu'ils connectent sont sauvegardees
$tables_for_link = array();
foreach($tables_jointures as $table=>$liste_relations)
if (is_array($liste_relations))
{
$nom = $table;
if (!isset($tables_auxiliaires[$nom])&&!isset($tables_principales[$nom]))
$nom = "spip_$table";
if (isset($tables_auxiliaires[$nom])||isset($tables_principales[$nom])){
foreach($liste_relations as $link_table){
if (isset($tables_auxiliaires[$link_table])/*||isset($tables_principales[$link_table])*/){
$tables_for_link[$link_table][] = $nom;
}
else if (isset($tables_auxiliaires["spip_$link_table"])/*||isset($tables_principales["spip_$link_table"])*/){
$tables_for_link["spip_$link_table"][] = $nom;
}
}
}
}
$liste_tables = array_merge(array_keys($tables_principales),array_keys($tables_auxiliaires));
foreach($liste_tables as $table){
$name = preg_replace("{^spip_}","",$table);
if ( !isset($tables_pointees[$table])
&& !in_array($table,$IMPORT_tables_noimport)
&& !isset($tables_for_link[$table])){
$tables_for_dump[] = $table;
$tables_pointees[$table] = 1;
}
}
foreach ($tables_for_link as $link_table =>$liste){
$connecte = true;
foreach($liste as $connect_table)
if (!in_array($connect_table,$tables_for_dump))
$connecte = false;
if ($connecte)
# on ajoute les liaisons en premier
# si une restauration est interrompue, cela se verra mieux si il manque des objets
# que des liens
array_unshift($tables_for_dump,$link_table);
}
spip_log(count($tables_for_dump)
. " tables importees " . join(', ', $tables_for_dump));
return $tables_for_dump;
function import_table_choix($request){
spip_log("noimport:".implode(',',lister_tables_noimport()),'noimport');
list($tables,) = base_liste_table_for_dump(lister_tables_noimport());
spip_log("liste:".implode(',',$tables),'noimport');
return $tables;
}
?>
......@@ -52,7 +52,7 @@ function inc_import_1_3_dist($lecteur, $request, $gz='fread', $atts=array()) {
elseif (isset($field_desc[$boucle][$table]))
$desc = $field_desc[$boucle][$table];
else {
// recuperer la description de la table pour connaitre ses champs valides
// recuperer la description de la table pour connaitre ses champs valides
$desc = description_table($table);
if (!isset($desc['field']))
$desc = $defaut;
......@@ -60,6 +60,7 @@ function inc_import_1_3_dist($lecteur, $request, $gz='fread', $atts=array()) {
AND $request['insertion']=='on')
$desc['field'] = import_collecte($desc);
$field_desc[$boucle][$table] = $desc;
#spip_log("$table :".var_export($field_desc[$boucle][$table],1),'dbrest');
}
$values = import_lire_champs($lecteur,
......@@ -135,6 +136,7 @@ function import_replace($values, $table, $desc, $request, $atts='') {
if ($where) {
$where = substr($where,4);
$impt = sql_getfetsel('impt', $table, $where);
#spip_log("IMPT : $table/$where/impt=$impt/",'dbrest');
if ($impt === NULL)
sql_insertq($table, $values);
elseif ($impt == 'oui') {
......
......@@ -292,7 +292,9 @@ $spip_pipeline = array(
'insert_head' => '|f_jQuery',
'jquery_plugins' => '',
# 'insert_js' => '',
'lister_tables_noerase' => '',
'lister_tables_noexport' => '',
'lister_tables_noimport' => '',
'libelle_association_mots' => '',
# 'verifie_js_necessaire' => '',
'mots_indexation' => '',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter