b646f208061af6c0050094ec2c555bf5c4b7dc30
[lhc/web/www.git] / www / ecrire / genie / maintenance.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
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 des différentes tâches de maintenance
15 *
16 * @package SPIP\Core\Genie\Maintenance
17 */
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 /**
24 * Diverses tâches de maintenance
25 *
26 * - (re)mettre .htaccess avec 'Deny from all'
27 * dans les deux répertoires dits inaccessibles par http
28 * - Vérifier qu'aucune table ne s'est crashée
29 *
30 * @uses verifier_htaccess()
31 * @uses verifier_crash_tables()
32 *
33 * @param object $t
34 * @return bool Toujours à true.
35 */
36 function genie_maintenance_dist($t) {
37
38 // (re)mettre .htaccess avec deny from all
39 // dans les deux repertoires dits inaccessibles par http
40 include_spip('inc/acces');
41 verifier_htaccess(_DIR_ETC);
42 verifier_htaccess(_DIR_TMP);
43
44 // Verifier qu'aucune table n'est crashee
45 if (!_request('reinstall')) {
46 verifier_crash_tables();
47 }
48
49 return 1;
50 }
51
52
53 /**
54 * Vérifier si une table a crashé
55 *
56 * Pour cela, on vérifie si on peut se connecter à la base de données.
57 *
58 * @see message_crash_tables()
59 *
60 * @return bool|array
61 * Si pas de table de crashée, on retourne `false`.
62 * Sinon, retourne un tableau contenant tous les noms
63 * des tables qui ont crashé.
64 */
65 function verifier_crash_tables() {
66 if (spip_connect()) {
67 include_spip('base/serial');
68 include_spip('base/auxiliaires');
69 $crash = array();
70 foreach (array('tables_principales', 'tables_auxiliaires') as $com) {
71 foreach ($GLOBALS[$com] as $table => $desc) {
72 if (!sql_select('*', $table, '', '', '', 1)
73 and !defined('spip_interdire_cache')
74 ) # cas "LOST CONNECTION"
75 {
76 $crash[] = $table;
77 }
78 }
79 }
80 #$crash[] = 'test';
81 if ($crash) {
82 ecrire_meta('message_crash_tables', serialize($crash));
83 spip_log('crash des tables', 'err');
84 spip_log($crash, 'err');
85 } else {
86 effacer_meta('message_crash_tables');
87 }
88
89 return $crash;
90 }
91
92 return false;
93 }
94
95 /**
96 * Vérifier si une table a crashé et crée un message en conséquence.
97 *
98 * S'il y a un crash, on affiche un message avec le nom
99 * de la ou des tables qui ont crashé.
100 * On génère un lien vers la page permettant la
101 * réparation de la base de données.
102 *
103 * @uses verifier_crash_tables()
104 *
105 * @return string
106 */
107 function message_crash_tables() {
108 if ($crash = verifier_crash_tables()) {
109 return
110 '<strong>' . _T('texte_recuperer_base') . '</strong><br />'
111 . ' <tt>' . join(', ', $crash) . '</tt><br />'
112 . generer_form_ecrire('base_repair',
113 _T('texte_crash_base'), '',
114 _T('bouton_tenter_recuperation'));
115 }
116 }