3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
17 * On arrive ici depuis exec=admin_tech
18 * - le premier coup on initialise par exec_export_all_args puis export_all_start
19 * - ensuite on enchaine sur inc/export, qui remplit le dump et renvoie ici a chaque timeout
20 * - a chaque coup on relance inc/export
21 * - lorsque inc/export a fini, il retourne $arg
22 * - on l'utilise pour clore le fichier
24 * vers action=export_all pour afficher le resume
26 * Deux parametres sont geres mais non disponibles en standard;
27 * $serveur : nom d'une base externe qu'on veut exporter
28 * $save : fonction creant la sauvegarde (defaut: inc_export_xml)
31 include_spip('inc/presentation');
32 include_spip('base/dump');
34 // http://doc.spip.org/@exec_export_all_dist
35 function exec_export_all_dist(){
36 exec_export_all_init(intval(_request('id_parent')),
39 preg_replace('@[^\d\w-_]@', '_', _request('serveur')),
40 preg_replace('@[^\d\w-_]@', '_', _request('save')));
43 function exec_export_all_init($rub, $gz, $tables, $serveur='', $save=''){
44 $meta = base_dump_meta_name($rub);
45 utiliser_langue_visiteur();
46 if (!isset($GLOBALS['meta'][$meta])){
47 // c'est un demarrage en arrivee directe depuis exec=admin_tech
48 // on initialise (mais si c'est le validateur, ne rien faire)
49 if ($GLOBALS['exec'] == 'valider_xml') return;
50 $archive = exec_export_all_args($rub, $gz);
51 $tables = export_all_start($meta, $archive, $rub, $tables);
52 $v = array($gz, $archive, $rub, $tables, 1, 0, $serveur, $save);
53 ecrire_meta($meta, serialize($v), 'non');
54 // rub=$rub sert AUSSI a distinguer cette redirection
55 // d'avec l'appel initial sinon FireFox croit malin
56 // d'optimiser la redirection
57 $url = generer_url_ecrire('export_all',"rub=$rub", true);
60 $export = charger_fonction('export', 'inc');
61 $arg = $export($meta);
62 // Si retour de $export c'est fini; dernier appel pour ramasser
63 // et produire l'en tete du fichier a partir de l'espace public
64 $url = generer_action_auteur("export_all",$arg,'',true, true, true);
66 include_spip('inc/headers');
67 redirige_par_entete($url);
70 function exec_export_all_args($rub, $gz){
72 $gz = $gz ?
'.gz' : '';
74 ?
_request('znom_sauvegarde')
75 : _request('nom_sauvegarde');
77 if (!preg_match(',^[\w_][\w_.]*$,', $nom)) $nom = 'dump';
78 return $nom . '.xml' . $gz;
81 // Ici on construit la liste des tables pour confirmation.
83 function export_all_start($meta, $archive, $rub, $tables){
85 // si pas de tables listees en post, utiliser la liste par defaut
87 list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
89 // en mode partiel, commencer par les articles et les rubriques
90 // pour savoir quelles parties des autres tables sont a sauver
92 if ($t = array_search('spip_rubriques', $tables)) {
94 array_unshift($tables, 'spip_rubriques');
96 if ($t = array_search('spip_articles', $tables)) {
98 array_unshift($tables, 'spip_articles');
100 if ($t = array_search('spip_documents', $tables)) {
102 array_push($tables, 'spip_documents');