3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2011 *
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
28 include_spip('inc/presentation');
29 include_spip('base/dump');
31 // http://doc.spip.org/@exec_export_all_dist
32 function exec_export_all_dist(){
33 $rub = intval(_request('id_parent'));
34 $meta = base_dump_meta_name($rub);
36 if (!isset($GLOBALS['meta'][$meta])){
37 // c'est un demarrage en arrivee directe depuis exec=admin_tech
38 // on initialise (mais si c'est le validateur, ne rien faire)
39 if ($GLOBALS['exec'] == 'valider_xml') return;
40 exec_export_all_args($meta, $rub, _request('gz'));
43 $export = charger_fonction('export', 'inc');
44 $arg = $export($meta);
45 @list
(, $gz, $archive, $rub, $version) = explode(',', $arg);
47 // quand on sort de $export c'est qu'on a fini
48 export_all_end($meta,$archive);
50 include_spip('inc/headers');
51 redirige_par_entete(generer_action_auteur("export_all",$arg,'',true, true));
55 // L'en tete du fichier doit etre cree a partir de l'espace public
56 // Ici on construit la liste des tables pour confirmation.
57 // Envoi automatique en cas d'inaction (sauf si appel incorrect $nom=NULL)
59 function exec_export_all_args($meta, $rub, $gz){
61 $gz = $gz ?
'.gz' : '';
63 ?
_request('znom_sauvegarde')
64 : _request('nom_sauvegarde');
66 if (!preg_match(',^[\w_][\w_.]*$,', $nom)) $nom = 'dump';
67 $archive = $nom . '.xml' . $gz;
69 // si pas de tables listees en post, utiliser la liste par defaut
70 if (!$tables = _request('export'))
71 list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
73 export_all_start($meta, $gz, $archive, $rub, _VERSION_ARCHIVE
, $tables);
78 function export_all_start($meta, $gz, $archive, $rub, $version, $tables){
80 // determine upload va aussi initialiser l'index "restreint"
81 $maindir = determine_upload();
82 if (!$GLOBALS['visiteur_session']['restreint'])
84 $dir = sous_repertoire($maindir, $meta);
85 $file = $dir . $archive;
87 utiliser_langue_visiteur();
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');
101 // creer l'en tete du fichier et retourner dans l'espace prive
102 ecrire_fichier($file, export_entete($version),false);
103 $v = serialize(array($gz, $archive, $rub, $tables, 1, 0));
104 ecrire_meta($meta, $v, 'non');
105 include_spip('inc/headers');
106 // rub=$rub sert AUSSI a distinguer cette redirection
107 // d'avec l'appel initial sinon FireFox croit malin
108 // d'optimiser la redirection
109 redirige_url_ecrire('export_all',"rub=$rub");
114 function export_all_end($meta, $archive){
115 $dir = base_dump_dir($meta);
116 $file = $dir . $archive;
117 ecrire_fichier($file, export_enpied(),false,false);
120 // http://doc.spip.org/@export_entete
121 function export_entete($version_archive)
124 "<" . "?xml version=\"1.0\" encoding=\"".
125 $GLOBALS['meta']['charset']."\"?".">\n" .
127 version=\"" . $GLOBALS['spip_version_affichee'] . "\"
128 version_base=\"" . $GLOBALS['spip_version_base'] . "\"
129 version_archive=\"" . $version_archive . "\"
130 adresse_site=\"" . $GLOBALS['meta']["adresse_site"] . "\"
131 dir_img=\"" . _DIR_IMG
. "\"
132 dir_logos=\"" . _DIR_LOGOS
. "\"
137 // production de l'entete du fichier d'archive
138 // http://doc.spip.org/@export_enpied
139 function export_enpied () { return "</SPIP>\n";}