X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Fbase%2Frepair.php;h=81c910eaaca0e10760587d6288fd55a0358f4c8f;hb=9a3d4353e89ac94da6b21cff26e28fa704369cb2;hp=4d13029749589a1bfa56c681844f87258b134e6d;hpb=122c920eb07e3f665789f8734965b576e6c25515;p=lhc%2Fweb%2Fwww.git
diff --git a/www/ecrire/base/repair.php b/www/ecrire/base/repair.php
index 4d130297..81c910ea 100644
--- a/www/ecrire/base/repair.php
+++ b/www/ecrire/base/repair.php
@@ -3,60 +3,91 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2014 *
+ * Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Réparation de la base de données
+ *
+ * @package SPIP\Core\SQL\Reparation
+ */
-// http://doc.spip.org/@base_admin_repair_dist
-function base_repair_dist($titre='', $reprise='') {
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
+
+/**
+ * Action de réparation de la base de données
+ *
+ * Tente de réparer les tables, recalcule les héritages et secteurs
+ * de rubriques. Affiche les erreurs s'il y en a eu.
+ *
+ * @pipeline_appel base_admin_repair
+ * @uses admin_repair_tables()
+ * @uses calculer_rubriques()
+ * @uses propager_les_secteurs()
+ *
+ * @param string $titre Inutilisé
+ * @param string $reprise Inutilisé
+ **/
+function base_repair_dist($titre = '', $reprise = '') {
$res = admin_repair_tables();
if (!$res) {
- $res = "
"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."
\n";
+ $res = "" . _T('avis_erreur_mysql') . ' ' . sql_errno() . ': ' . sql_error() . "
\n";
} else {
include_spip('inc/rubriques');
calculer_rubriques();
propager_les_secteurs();
}
include_spip('inc/minipres');
- $res .= pipeline('base_admin_repair',$res);
+ $res .= pipeline('base_admin_repair', $res);
echo minipres(_T('texte_tentative_recuperation'),
- $res . generer_form_ecrire('accueil', '','',_T('public:accueil_site')));
+ $res . generer_form_ecrire('accueil', '', '', _T('public:accueil_site')));
}
-// http://doc.spip.org/@admin_repair_plat
-function admin_repair_plat(){
- spip_log( "verification des documents joints", _LOG_INFO_IMPORTANTE);
+/**
+ * Réparer les documents stockés dans des faux répertoires .plat
+ *
+ * @deprecated Les fichiers .plat ne sont plus utilisés. Cette fonction n'est plus appelée depuis r14292
+ * @todo à supprimer ou déplacer dans le plugin Medias.
+ *
+ * @return string Description des changements de chemins des documents
+ **/
+function admin_repair_plat() {
+ spip_log("verification des documents joints", _LOG_INFO_IMPORTANTE);
$out = "";
$repertoire = array();
include_spip('inc/getdocument');
- $res = sql_select('*','spip_documents',"fichier REGEXP CONCAT('^',extension,'[^/\]') AND distant='non'");
+ $res = sql_select('*', 'spip_documents', "fichier REGEXP CONCAT('^',extension,'[^/\]') AND distant='non'");
- while ($row=sql_fetch($res)){
+ while ($row = sql_fetch($res)) {
$ext = $row['extension'];
if (!$ext) {
spip_log("document sans extension: " . $row['id_document'], _LOG_INFO_IMPORTANTE);
continue;
}
- if (!isset($repertoire[$ext])){
- if (@file_exists($plat = _DIR_IMG. $ext .".plat"))
+ if (!isset($repertoire[$ext])) {
+ if (@file_exists($plat = _DIR_IMG . $ext . ".plat")) {
spip_unlink($plat);
+ }
$repertoire[$ext] = creer_repertoire_documents($ext);
- if (preg_match(',_$,',$repertoire[$ext]))
+ if (preg_match(',_$,', $repertoire[$ext])) {
$repertoire[$ext] = false;
+ }
}
- if ($d=$repertoire[$ext]){
- $d = substr($d,strlen(_DIR_IMG));
+ if ($d = $repertoire[$ext]) {
+ $d = substr($d, strlen(_DIR_IMG));
$src = $row['fichier'];
- $dest = $d . substr($src,strlen($d));
+ $dest = $d . substr($src, strlen($d));
if (@copy(_DIR_IMG . $src, _DIR_IMG . $dest)
- AND file_exists(_DIR_IMG . $dest)) {
- sql_updateq('spip_documents',array('fichier'=>$dest),'id_document='.intval($row['id_document']));
+ and file_exists(_DIR_IMG . $dest)
+ ) {
+ sql_updateq('spip_documents', array('fichier' => $dest), 'id_document=' . intval($row['id_document']));
spip_unlink(_DIR_IMG . $src);
$out .= "$src => $dest
";
}
@@ -66,10 +97,18 @@ function admin_repair_plat(){
return $out;
}
-// http://doc.spip.org/@admin_repair_tables
+/**
+ * Exécute une réparation de la base de données
+ *
+ * Crée les tables et les champs manquants.
+ * Applique sur les tables un REPAIR en SQL (si le serveur SQL l'accepte).
+ *
+ * @return string
+ * Code HTML expliquant les actions réalisées
+ **/
function admin_repair_tables() {
- $repair = sql_repair('repair', NULL, 'continue');
+ $repair = sql_repair('repair', null, 'continue');
// recreer les tables manquantes eventuelles
include_spip('base/create');
@@ -77,10 +116,17 @@ function admin_repair_tables() {
$connexion = $GLOBALS['connexions'][0];
$prefixe = $connexion['prefixe'];
- $res1 = sql_showbase();
- $res = "";
- if ($res1) {
+ $rows = array();
+ if ($res1 = sql_showbase()) {
while ($r = sql_fetch($res1)) {
+ $rows[] = $r;
+ }
+ sql_free($res1);
+ }
+
+ $res = "";
+ if (count($rows)) {
+ while ($r = array_shift($rows)) {
$tab = array_shift($r);
$class = "";
@@ -89,35 +135,42 @@ function admin_repair_tables() {
// supprimer la meta avant de lancer la reparation
// car le repair peut etre long ; on ne veut pas boucler
effacer_meta('admin_repair');
- if ($repair){
+ if ($repair) {
$result_repair = sql_repair($tab);
- if (!$result_repair) return false;
+ if (!$result_repair) {
+ return false;
+ }
}
// essayer de maj la table (creation de champs manquants)
maj_tables($tab);
$count = sql_countsel($tab);
-
- if ($count>1)
- $m .= "("._T('texte_compte_elements', array('count' => $count)).")\n";
- else if ($count==1)
- $m .= "("._T('texte_compte_element', array('count' => $count)).")\n";
- else
- $m .= "("._T('texte_vide').")\n";
-
+
+ if ($count > 1) {
+ $m .= "(" . _T('texte_compte_elements', array('count' => $count)) . ")\n";
+ } else {
+ if ($count == 1) {
+ $m .= "(" . _T('texte_compte_element', array('count' => $count)) . ")\n";
+ } else {
+ $m .= "(" . _T('texte_vide') . ")\n";
+ }
+ }
+
if ($result_repair
- AND $msg = join(" ", sql_fetch($result_repair)) . ' '
- AND strpos($msg, ' OK ')==FALSE){
+ and $msg = join(" ",
+ (is_resource($result_repair) or is_object($result_repair)) ? sql_fetch($result_repair) : $result_repair) . ' '
+ and strpos($msg, ' OK ') === false
+ ) {
$class = " class='notice'";
- $m .= "
".spip_htmlentities($msg)."\n";
+ $m .= "
" . spip_htmlentities($msg) . "\n";
+ } else {
+ $m .= " " . _T('texte_table_ok');
}
- else
- $m .= " "._T('texte_table_ok');
- $res .="$m
";
- }
+ $res .= "$m
";
+ }
}
+
return $res;
}
-?>