X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fexec%2Fexport_all.php;fp=www%2Fecrire%2Fexec%2Fexport_all.php;h=51f2b868c645136320bf5e2ccba2107ae57d0da9;hp=c22ae2ad0d9ee34b2000063965b0e2d4bb720782;hb=e99f0878011913365e49b30d90e496c24c301393;hpb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed diff --git a/www/ecrire/exec/export_all.php b/www/ecrire/exec/export_all.php index c22ae2a..51f2b86 100644 --- a/www/ecrire/exec/export_all.php +++ b/www/ecrire/exec/export_all.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2011 * + * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -23,6 +23,9 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * - on renvoie * vers action=export_all pour afficher le resume * + * Deux parametres sont geres mais non disponibles en standard; + * $serveur : nom d'une base externe qu'on veut exporter + * $save : fonction creant la sauvegarde (defaut: inc_export_xml) */ include_spip('inc/presentation'); @@ -30,33 +33,41 @@ include_spip('base/dump'); // http://doc.spip.org/@exec_export_all_dist function exec_export_all_dist(){ - $rub = intval(_request('id_parent')); - $meta = base_dump_meta_name($rub); + exec_export_all_init(intval(_request('id_parent')), + _request('gz'), + _request('export'), + preg_replace('@[^\d\w-_]@', '_', _request('serveur')), + preg_replace('@[^\d\w-_]@', '_', _request('save'))); +} +function exec_export_all_init($rub, $gz, $tables, $serveur='', $save=''){ + $meta = base_dump_meta_name($rub); + utiliser_langue_visiteur(); if (!isset($GLOBALS['meta'][$meta])){ // c'est un demarrage en arrivee directe depuis exec=admin_tech // on initialise (mais si c'est le validateur, ne rien faire) if ($GLOBALS['exec'] == 'valider_xml') return; - exec_export_all_args($meta, $rub, _request('gz')); + $archive = exec_export_all_args($rub, $gz); + $tables = export_all_start($meta, $archive, $rub, $tables); + $v = array($gz, $archive, $rub, $tables, 1, 0, $serveur, $save); + ecrire_meta($meta, serialize($v), 'non'); + // rub=$rub sert AUSSI a distinguer cette redirection + // d'avec l'appel initial sinon FireFox croit malin + // d'optimiser la redirection + $url = generer_url_ecrire('export_all',"rub=$rub", true); + } else { + // appels suivants + $export = charger_fonction('export', 'inc'); + $arg = $export($meta); + // Si retour de $export c'est fini; dernier appel pour ramasser + // et produire l'en tete du fichier a partir de l'espace public + $url = generer_action_auteur("export_all",$arg,'',true, true, true); } - - $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)); - + redirige_par_entete($url); } -// L'en tete du fichier doit etre cree a partir de l'espace public -// Ici on construit la liste des tables pour confirmation. -// Envoi automatique en cas d'inaction (sauf si appel incorrect $nom=NULL) - -function exec_export_all_args($meta, $rub, $gz){ +function exec_export_all_args($rub, $gz){ $gz = $gz ? '.gz' : ''; $nom = $gz @@ -64,27 +75,16 @@ function exec_export_all_args($meta, $rub, $gz){ : _request('nom_sauvegarde'); if (!preg_match(',^[\w_][\w_.]*$,', $nom)) $nom = 'dump'; - $archive = $nom . '.xml' . $gz; - - // si pas de tables listees en post, utiliser la liste par defaut - if (!$tables = _request('export')) - list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); - - export_all_start($meta, $gz, $archive, $rub, _VERSION_ARCHIVE, $tables); - + return $nom . '.xml' . $gz; } +// Ici on construit la liste des tables pour confirmation. -function export_all_start($meta, $gz, $archive, $rub, $version, $tables){ - - // determine upload va aussi initialiser l'index "restreint" - $maindir = determine_upload(); - if (!$GLOBALS['visiteur_session']['restreint']) - $maindir = _DIR_DUMP; - $dir = sous_repertoire($maindir, $meta); - $file = $dir . $archive; +function export_all_start($meta, $archive, $rub, $tables){ - utiliser_langue_visiteur(); + // si pas de tables listees en post, utiliser la liste par defaut + if (!$tables) + list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); // en mode partiel, commencer par les articles et les rubriques // pour savoir quelles parties des autres tables sont a sauver @@ -97,45 +97,12 @@ function export_all_start($meta, $gz, $archive, $rub, $version, $tables){ unset($tables[$t]); array_unshift($tables, 'spip_articles'); } + if ($t = array_search('spip_documents', $tables)) { + unset($tables[$t]); + array_push($tables, 'spip_documents'); + } } - // creer l'en tete du fichier et retourner dans l'espace prive - ecrire_fichier($file, export_entete($version),false); - $v = serialize(array($gz, $archive, $rub, $tables, 1, 0)); - ecrire_meta($meta, $v, 'non'); - include_spip('inc/headers'); - // rub=$rub sert AUSSI a distinguer cette redirection - // d'avec l'appel initial sinon FireFox croit malin - // d'optimiser la redirection - redirige_url_ecrire('export_all',"rub=$rub"); - - -} - -function export_all_end($meta, $archive){ - $dir = base_dump_dir($meta); - $file = $dir . $archive; - ecrire_fichier($file, export_enpied(),false,false); + return $tables; } -// http://doc.spip.org/@export_entete -function export_entete($version_archive) -{ - return -"<" . "?xml version=\"1.0\" encoding=\"". -$GLOBALS['meta']['charset']."\"?".">\n" . -"\n"; -} - - -// production de l'entete du fichier d'archive -// http://doc.spip.org/@export_enpied -function export_enpied () { return "\n";} - ?>