[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / dump / formulaires / restaurer.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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')) {
14 return;
15 }
16 include_spip('base/dump');
17 include_spip('inc/dump');
18
19 /**
20 * Charger #FORMULAIRE_RESTAURER
21 *
22 * @return array
23 */
24 function formulaires_restaurer_charger_dist() {
25 // ici on liste tout, les tables exclue sont simplement non cochees
26
27 $valeurs = array(
28 '_dir_dump' => dump_repertoire(),
29 'choisi' => _request('fichier') ? _request('fichier') : _request('nom'),
30 'nom_sauvegarde' => '',
31 'tout_restaurer' => (_request('check_tables') and !_request('tout_restaurer')) ? '' : 'oui',
32 'fichier' => '',
33 'tri' => 'nom',
34 );
35
36 return $valeurs;
37 }
38
39 /**
40 * Verifier
41 *
42 * @return array
43 */
44 function formulaires_restaurer_verifier_dist() {
45 $erreurs = array();
46 $nom = '';
47 if (!$fichier = _request('fichier') and !$nom = _request('nom_sauvegarde')) {
48 $erreurs['fichier'] = _T('info_obligatoire');
49 } elseif ($fichier) {
50 $fichier = basename($fichier); // securite
51 if (!file_exists(dump_repertoire() . $fichier)) {
52 $erreurs['fichier'] = _T('dump:erreur_nom_fichier');
53 } else {
54 $nom = $fichier;
55 }
56 } else {
57 $nom = basename($nom); // securite
58 if (!file_exists(dump_repertoire() . $nom)) {
59 $erreurs['nom_sauvegarde'] = _T('dump:erreur_nom_fichier');
60 $nom = '';
61 }
62 }
63 if (!$nom) {
64 $erreurs['message_erreur'] = _T('dump:erreur_restaurer_verifiez');
65 }
66
67 if ($nom) {
68 $archive = dump_repertoire() . $nom;
69 if (!$args = dump_connect_args($archive)) {
70 $erreurs['tout_restaurer'] = _T('dump:erreur_sqlite_indisponible');
71 }
72 dump_serveur($args);
73 $tables = base_lister_toutes_tables('dump');
74 $tables = base_saisie_tables('tables', $tables, array(), _request('tables') ? _request('tables') : array(), 'dump');
75 $erreurs['tables'] = "<ol class='spip'><li class='choix'>\n" . join(
76 "</li>\n<li class='choix'>",
77 $tables
78 ) . "</li></ol><input type='hidden' name='check_tables' value='oui' />\n";
79 if (!count(_request('tables')) and !_request('tout_restaurer') and _request('check_tables')) {
80 $erreurs['tout_restaurer'] = _T('dump:selectionnez_table_a_restaurer');
81 }
82 }
83
84 if ($nom
85 and (!count($erreurs) or (count($erreurs) == 1 and isset($erreurs['tables'])))
86 ) {
87 if (_request('confirm') !== $nom) {
88 $erreurs['message_confirm'] =
89 _T(
90 'dump:info_selection_sauvegarde',
91 array('fichier' => '<i>' . joli_repertoire(dump_repertoire() . $nom) . '</i>')
92 )
93 . "<br /><input type='checkbox' name='confirm' value='$nom' id='confirm' /> ";
94 $erreurs['message_confirm'] .= "<label for='confirm'><strong>";
95 if (_request('tables')) {
96 $erreurs['message_confirm'] .= _T('dump:confirmer_ecraser_tables_selection');
97 } else {
98 $erreurs['message_confirm'] .= _T('dump:confirmer_ecraser_base');
99 }
100 $erreurs['message_confirm'] .= '</strong></label>';
101 } else {
102 // passer a traiter()
103 unset($erreurs['tables']);
104 }
105 }
106
107 if (count($erreurs) and !isset($erreurs['message_erreur'])) {
108 $erreurs['message_erreur'] = '';
109 } // pas de message general automatique ici
110 return $erreurs;
111 }
112
113 /**
114 * Traiter
115 *
116 * @return array
117 */
118 function formulaires_restaurer_traiter_dist() {
119
120 $archive = (_request('fichier') ? _request('fichier') : _request('nom'));
121 $dir_dump = dump_repertoire();
122 $archive = $dir_dump . basename($archive, '.sqlite');
123
124 $status_file = base_dump_meta_name(0) . '_restauration';
125
126 if (_request('tout_restaurer')) {
127 $args = dump_connect_args($archive);
128 dump_serveur($args);
129 $tables = base_lister_toutes_tables('dump');
130 } else {
131 $tables = _request('tables');
132 }
133
134 include_spip('inc/dump');
135 $res = dump_init($status_file, $archive, $tables, array('spip_meta' => "impt='oui'"));
136
137 if ($res === true) {
138 // on lance l'action restaurer qui va realiser la sauvegarde
139 // et finira par une redirection vers la page sauvegarde_fin
140 include_spip('inc/actions');
141 $redirect = generer_action_auteur('restaurer', $status_file);
142
143 return array('message_ok' => 'ok', 'redirect' => $redirect);
144 } else {
145 return array('message_erreur' => $res);
146 }
147 }