c4e8fb348e16906c8c8bff021843cf14590348a4
[velocampus/web/www.git] / www / ecrire / base / dump.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 define('_VERSION_ARCHIVE', '1.3');
16
17 include_spip('base/serial');
18 include_spip('base/auxiliaires');
19 include_spip('public/interfaces'); // pour table_jointures
20
21 // NB: Ce fichier peut ajouter des tables (old-style)
22 // donc il faut l'inclure "en globals"
23 if ($f = find_in_path('mes_fonctions.php')) {
24 global $dossier_squelettes;
25 @include_once(_ROOT_CWD . $f);
26 }
27
28 if (@is_readable(_CACHE_PLUGINS_FCT)){
29 // chargement optimise precompile
30 include_once(_CACHE_PLUGINS_FCT);
31 }
32
33 function base_dump_meta_name($rub){
34 return $meta = "status_dump_$rub_" . $GLOBALS['visiteur_session']['id_auteur'];
35 }
36 function base_dump_dir($meta){
37 // determine upload va aussi initialiser l'index "restreint"
38 $maindir = determine_upload();
39 if (!$GLOBALS['visiteur_session']['restreint'])
40 $maindir = _DIR_DUMP;
41 $dir = sous_repertoire($maindir, $meta);
42 return $dir;
43 }
44
45 /**
46 * Lister les tables non exportables par defaut
47 * (liste completable par le pipeline lister_tables_noexport
48 *
49 * @staticvar array $EXPORT_tables_noexport
50 * @return array
51 */
52 function lister_tables_noexport(){
53 // par defaut tout est exporte sauf les tables ci-dessous
54 static $EXPORT_tables_noexport = null;
55 if (!is_null($EXPORT_tables_noexport))
56 return $EXPORT_tables_noexport;
57
58 $EXPORT_tables_noexport= array(
59 'spip_caches', // plugin invalideur
60 'spip_resultats', // resultats de recherche ... c'est un cache !
61 'spip_referers',
62 'spip_referers_articles',
63 'spip_visites',
64 'spip_visites_articles',
65 'spip_versions', // le dump des fragments n'est pas robuste
66 'spip_versions_fragments' // le dump des fragments n'est pas robuste
67 );
68
69 if (!$GLOBALS['connect_toutes_rubriques']){
70 $EXPORT_tables_noexport[]='spip_messages';
71 $EXPORT_tables_noexport[]='spip_auteurs_messages';
72 }
73
74 //var_dump($EXPORT_tables_noexport);
75 $EXPORT_tables_noexport = pipeline('lister_tables_noexport',$EXPORT_tables_noexport);
76
77 return $EXPORT_tables_noexport;
78 }
79
80 /**
81 * Lister les tables non importables par defaut
82 * (liste completable par le pipeline lister_tables_noexport
83 *
84 * @staticvar array $IMPORT_tables_noimport
85 * @return array
86 */
87 function lister_tables_noimport(){
88 static $IMPORT_tables_noimport=null;
89 if (!is_null($EXPORT_tables_noexport))
90 return $EXPORT_tables_noexport;
91
92 $IMPORT_tables_noimport = array();
93 // par defaut tout est importe sauf les tables ci-dessous
94 // possibiliter de definir cela tables via la meta
95 // compatibilite
96 if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])){
97 $IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']);
98 if (!is_array($IMPORT_tables_noimport)){
99 include_spip('inc/meta');
100 effacer_meta('IMPORT_tables_noimport');
101 }
102 }
103 $IMPORT_tables_noimport = pipeline('lister_tables_noimport',$IMPORT_tables_noimport);
104 return $IMPORT_tables_noimport;
105 }
106
107
108 /**
109 * Lister les tables a ne pas effacer
110 * (liste completable par le pipeline lister_tables_noerase
111 *
112 * @staticvar array $IMPORT_tables_noerase
113 * @return array
114 */
115 function lister_tables_noerase(){
116 static $IMPORT_tables_noerase=null;
117 if (!is_null($IMPORT_tables_noerase))
118 return $IMPORT_tables_noerase;
119
120 $IMPORT_tables_noerase = array(
121 'spip_meta',
122 // par defaut on ne vide pas les stats, car elles ne figurent pas dans les dump
123 // et le cas echeant, un bouton dans l'admin permet de les vider a la main...
124 'spip_referers',
125 'spip_referers_articles',
126 'spip_visites',
127 'spip_visites_articles'
128 );
129 $IMPORT_tables_noerase = pipeline('lister_tables_noerase',$IMPORT_tables_noerase);
130 return $IMPORT_tables_noerase;
131 }
132
133
134 /**
135 * construction de la liste des tables pour le dump :
136 * toutes les tables principales
137 * + toutes les tables auxiliaires hors relations
138 * + les tables relations dont les deux tables liees sont dans la liste
139 *
140 * @global <type> $tables_principales
141 * @global <type> $tables_auxiliaires
142 * @global <type> $tables_jointures
143 * @param array $exclude_tables
144 * @return array
145 */
146 function base_liste_table_for_dump($exclude_tables = array()){
147 $tables_for_dump = array();
148 $tables_pointees = array();
149 global $tables_principales;
150 global $tables_auxiliaires;
151 global $tables_jointures;
152
153 // on construit un index des tables de liens
154 // pour les ajouter SI les deux tables qu'ils connectent sont sauvegardees
155 $tables_for_link = array();
156 foreach($tables_jointures as $table => $liste_relations)
157 if (is_array($liste_relations))
158 {
159 $nom = $table;
160 if (!isset($tables_auxiliaires[$nom])&&!isset($tables_principales[$nom]))
161 $nom = "spip_$table";
162 if (isset($tables_auxiliaires[$nom])||isset($tables_principales[$nom])){
163 foreach($liste_relations as $link_table){
164 if (isset($tables_auxiliaires[$link_table])/*||isset($tables_principales[$link_table])*/){
165 $tables_for_link[$link_table][] = $nom;
166 }
167 else if (isset($tables_auxiliaires["spip_$link_table"])/*||isset($tables_principales["spip_$link_table"])*/){
168 $tables_for_link["spip_$link_table"][] = $nom;
169 }
170 }
171 }
172 }
173
174 $liste_tables = array_merge(array_keys($tables_principales),array_keys($tables_auxiliaires));
175 foreach($liste_tables as $table){
176 // $name = preg_replace("{^spip_}","",$table);
177 if ( !isset($tables_pointees[$table])
178 && !in_array($table,$exclude_tables)
179 && !isset($tables_for_link[$table])){
180 $tables_for_dump[] = $table;
181 $tables_pointees[$table] = 1;
182 }
183 }
184 foreach ($tables_for_link as $link_table =>$liste){
185 $connecte = true;
186 foreach($liste as $connect_table)
187 if (!in_array($connect_table,$tables_for_dump))
188 $connecte = false;
189 if ($connecte)
190 # on ajoute les liaisons en premier
191 # si une restauration est interrompue,
192 # cela se verra mieux si il manque des objets
193 # que des liens
194 array_unshift($tables_for_dump,$link_table);
195 }
196 return array($tables_for_dump, $tables_for_link);
197 }
198
199 ?>