[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / base / repair.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')) return;
14
15 // http://doc.spip.org/@base_admin_repair_dist
16 function base_repair_dist($titre='', $reprise='') {
17
18 $res = admin_repair_tables();
19 if (!$res) {
20 $res = "<div class='error'>"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."</div>\n";
21 } else {
22 include_spip('inc/rubriques');
23 calculer_rubriques();
24 propager_les_secteurs();
25 }
26 include_spip('inc/minipres');
27 $res .= pipeline('base_admin_repair',$res);
28 echo minipres(_T('texte_tentative_recuperation'),
29 $res . generer_form_ecrire('accueil', '','',_T('public:accueil_site')));
30 }
31
32 // http://doc.spip.org/@admin_repair_plat
33 function admin_repair_plat(){
34 spip_log( "verification des documents joints", _LOG_INFO_IMPORTANTE);
35 $out = "";
36 $repertoire = array();
37 include_spip('inc/getdocument');
38 $res = sql_select('*','spip_documents',"fichier REGEXP CONCAT('^',extension,'[^/\]') AND distant='non'");
39
40 while ($row=sql_fetch($res)){
41 $ext = $row['extension'];
42 if (!$ext) {
43 spip_log("document sans extension: " . $row['id_document'], _LOG_INFO_IMPORTANTE);
44 continue;
45 }
46 if (!isset($repertoire[$ext])){
47 if (@file_exists($plat = _DIR_IMG. $ext .".plat"))
48 spip_unlink($plat);
49 $repertoire[$ext] = creer_repertoire_documents($ext);
50 if (preg_match(',_$,',$repertoire[$ext]))
51 $repertoire[$ext] = false;
52 }
53 if ($d=$repertoire[$ext]){
54 $d = substr($d,strlen(_DIR_IMG));
55 $src = $row['fichier'];
56 $dest = $d . substr($src,strlen($d));
57 if (@copy(_DIR_IMG . $src, _DIR_IMG . $dest)
58 AND file_exists(_DIR_IMG . $dest)) {
59 sql_updateq('spip_documents',array('fichier'=>$dest),'id_document='.intval($row['id_document']));
60 spip_unlink(_DIR_IMG . $src);
61 $out .= "$src => $dest<br />";
62 }
63 }
64 }
65
66 return $out;
67 }
68
69 // http://doc.spip.org/@admin_repair_tables
70 function admin_repair_tables() {
71
72 $repair = sql_repair('repair', NULL, 'continue');
73
74 // recreer les tables manquantes eventuelles
75 include_spip('base/create');
76 creer_base();
77
78 $connexion = $GLOBALS['connexions'][0];
79 $prefixe = $connexion['prefixe'];
80 $res1 = sql_showbase();
81 $res = "";
82 if ($res1) {
83 while ($r = sql_fetch($res1)) {
84 $tab = array_shift($r);
85
86 $class = "";
87 $m = "<strong>$tab</strong> ";
88 spip_log("Repare $tab", _LOG_INFO_IMPORTANTE);
89 // supprimer la meta avant de lancer la reparation
90 // car le repair peut etre long ; on ne veut pas boucler
91 effacer_meta('admin_repair');
92 if ($repair){
93 $result_repair = sql_repair($tab);
94 if (!$result_repair) return false;
95 }
96
97 // essayer de maj la table (creation de champs manquants)
98 maj_tables($tab);
99
100 $count = sql_countsel($tab);
101
102 if ($count>1)
103 $m .= "("._T('texte_compte_elements', array('count' => $count)).")\n";
104 else if ($count==1)
105 $m .= "("._T('texte_compte_element', array('count' => $count)).")\n";
106 else
107 $m .= "("._T('texte_vide').")\n";
108
109 if ($result_repair
110 AND $msg = join(" ", sql_fetch($result_repair)) . ' '
111 AND strpos($msg, ' OK ')==FALSE){
112 $class = " class='notice'";
113 $m .= "<br /><tt>".spip_htmlentities($msg)."</tt>\n";
114 }
115 else
116 $m .= " "._T('texte_table_ok');
117
118 $res .="<div$class>$m</div>";
119 }
120 }
121 return $res;
122 }
123 ?>