[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / exec / export_all.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
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 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 /**
16 *
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
23 * - on renvoie
24 * vers action=export_all pour afficher le resume
25 *
26 */
27
28 include_spip('inc/presentation');
29 include_spip('base/dump');
30
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);
35
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'));
41 }
42
43 $export = charger_fonction('export', 'inc');
44 $arg = $export($meta);
45 @list(, $gz, $archive, $rub, $version) = explode(',', $arg);
46
47 // quand on sort de $export c'est qu'on a fini
48 export_all_end($meta,$archive);
49
50 include_spip('inc/headers');
51 redirige_par_entete(generer_action_auteur("export_all",$arg,'',true, true));
52
53 }
54
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)
58
59 function exec_export_all_args($meta, $rub, $gz){
60
61 $gz = $gz ? '.gz' : '';
62 $nom = $gz
63 ? _request('znom_sauvegarde')
64 : _request('nom_sauvegarde');
65
66 if (!preg_match(',^[\w_][\w_.]*$,', $nom)) $nom = 'dump';
67 $archive = $nom . '.xml' . $gz;
68
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());
72
73 export_all_start($meta, $gz, $archive, $rub, _VERSION_ARCHIVE, $tables);
74
75 }
76
77
78 function export_all_start($meta, $gz, $archive, $rub, $version, $tables){
79
80 // determine upload va aussi initialiser l'index "restreint"
81 $maindir = determine_upload();
82 if (!$GLOBALS['visiteur_session']['restreint'])
83 $maindir = _DIR_DUMP;
84 $dir = sous_repertoire($maindir, $meta);
85 $file = $dir . $archive;
86
87 utiliser_langue_visiteur();
88
89 // en mode partiel, commencer par les articles et les rubriques
90 // pour savoir quelles parties des autres tables sont a sauver
91 if ($rub) {
92 if ($t = array_search('spip_rubriques', $tables)) {
93 unset($tables[$t]);
94 array_unshift($tables, 'spip_rubriques');
95 }
96 if ($t = array_search('spip_articles', $tables)) {
97 unset($tables[$t]);
98 array_unshift($tables, 'spip_articles');
99 }
100 }
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");
110
111
112 }
113
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);
118 }
119
120 // http://doc.spip.org/@export_entete
121 function export_entete($version_archive)
122 {
123 return
124 "<" . "?xml version=\"1.0\" encoding=\"".
125 $GLOBALS['meta']['charset']."\"?".">\n" .
126 "<SPIP
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 . "\"
133 >\n";
134 }
135
136
137 // production de l'entete du fichier d'archive
138 // http://doc.spip.org/@export_enpied
139 function export_enpied () { return "</SPIP>\n";}
140
141 ?>