[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / dump / formulaires / sauvegarder.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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 /**
14 * Gestion du formulaire de sauvegarde de la base de données
15 *
16 * @package SPIP\Dump\Formulaires
17 */
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22 include_spip('base/dump');
23 include_spip('inc/dump');
24
25 /**
26 * Charger `#FORMULAIRE_SAUVEGARDER`
27 *
28 * @return array
29 */
30 function formulaires_sauvegarder_charger_dist() {
31 $dir_dump = dump_repertoire();
32
33 // ici on liste tout, les tables exclue sont simplement non cochees
34 $exclude = lister_tables_noexport();
35 list($tables, ) = base_liste_table_for_dump($exclude);
36 $tables = base_lister_toutes_tables('', $tables);
37
38 $valeurs = array(
39 '_dir_dump' => joli_repertoire($dir_dump),
40 '_dir_img' => joli_repertoire(_DIR_IMG),
41 '_spipnet' => $GLOBALS['home_server'] . '/' . $GLOBALS['spip_lang'] . '_article1489.html',
42 'nom_sauvegarde' => basename(dump_nom_fichier($dir_dump, 'sqlite'), '.sqlite'),
43 'tout_sauvegarder' => (_request('nom_sauvegarde') and !_request('tout_sauvegarder')) ? '' : 'oui',
44 '_tables' => "<ol class='spip'><li class='choix'>\n" . join(
45 "</li>\n<li class='choix'>",
46 base_saisie_tables(
47 'tables',
48 $tables,
49 $exclude,
50 _request('nom_sauvegarde') ? (_request('tables') ? _request('tables') : array()) : null
51 )
52 ) . "</li></ol>\n",
53 '_prefixe' => base_prefixe_tables(''),
54 );
55
56 return $valeurs;
57 }
58
59 /**
60 * Verifier
61 *
62 * @return array
63 */
64 function formulaires_sauvegarder_verifier_dist() {
65 $erreurs = array();
66 if (!$nom = _request('nom_sauvegarde')) {
67 $erreurs['nom_sauvegarde'] = _T('info_obligatoire');
68 } elseif (!preg_match(',^[\w_][\w_.]*$,', $nom)
69 or basename($nom) !== $nom
70 ) {
71 $erreurs['nom_sauvegarde'] = _T('dump:erreur_nom_fichier');
72 }
73
74 return $erreurs;
75 }
76
77 /**
78 * Traiter
79 *
80 * @return array
81 */
82 function formulaires_sauvegarder_traiter_dist() {
83 $status_file = base_dump_meta_name(0);
84 $dir_dump = dump_repertoire();
85 $archive = $dir_dump . basename(_request('nom_sauvegarde'), '.sqlite');
86
87 if (_request('tout_sauvegarder')) {
88 // ici on prend toutes les tables sauf celles exclues par defaut
89 // (tables de cache en pratique)
90 $exclude = lister_tables_noexport();
91 list($tables, ) = base_liste_table_for_dump($exclude);
92 $tables = base_lister_toutes_tables('', $tables, $exclude);
93 } else {
94 $tables = _request('tables');
95 }
96
97 include_spip('inc/dump');
98 $res = dump_init($status_file, $archive, $tables);
99
100 if ($res === true) {
101 // on lance l'action sauvegarder qui va realiser la sauvegarde
102 // et finira par une redirection vers la page sauvegarde_fin
103 include_spip('inc/actions');
104 $redirect = generer_action_auteur('sauvegarder', $status_file);
105
106 return array('message_ok' => 'ok', 'redirect' => $redirect);
107 } else {
108 return array('message_erreur' => $res);
109 }
110 }