[SPIP] ~2.1.12 -->2.1.25
[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-2014 *
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 * 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)
29 */
30
31 include_spip('inc/presentation');
32 include_spip('base/dump');
33
34 // http://doc.spip.org/@exec_export_all_dist
35 function exec_export_all_dist(){
36 exec_export_all_init(intval(_request('id_parent')),
37 _request('gz'),
38 _request('export'),
39 preg_replace('@[^\d\w-_]@', '_', _request('serveur')),
40 preg_replace('@[^\d\w-_]@', '_', _request('save')));
41 }
42
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);
58 } else {
59 // appels suivants
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);
65 }
66 include_spip('inc/headers');
67 redirige_par_entete($url);
68 }
69
70 function exec_export_all_args($rub, $gz){
71
72 $gz = $gz ? '.gz' : '';
73 $nom = $gz
74 ? _request('znom_sauvegarde')
75 : _request('nom_sauvegarde');
76
77 if (!preg_match(',^[\w_][\w_.]*$,', $nom)) $nom = 'dump';
78 return $nom . '.xml' . $gz;
79 }
80
81 // Ici on construit la liste des tables pour confirmation.
82
83 function export_all_start($meta, $archive, $rub, $tables){
84
85 // si pas de tables listees en post, utiliser la liste par defaut
86 if (!$tables)
87 list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
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 if ($t = array_search('spip_documents', $tables)) {
101 unset($tables[$t]);
102 array_push($tables, 'spip_documents');
103 }
104 }
105 return $tables;
106 }
107
108 ?>