[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / exec / export_all.php
index c22ae2a..51f2b86 100644 (file)
@@ -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" .
-"<SPIP
-       version=\"" . $GLOBALS['spip_version_affichee'] . "\"
-       version_base=\"" . $GLOBALS['spip_version_base'] . "\"
-       version_archive=\"" . $version_archive . "\"
-       adresse_site=\"" .  $GLOBALS['meta']["adresse_site"] . "\"
-       dir_img=\"" . _DIR_IMG . "\"
-       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";}
-
 ?>