X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Fbase%2Frepair.php;h=81c910eaaca0e10760587d6288fd55a0358f4c8f;hb=9a3d4353e89ac94da6b21cff26e28fa704369cb2;hp=548fb2d503448fefe63b7c8c42c5bd83543c3cf7;hpb=a9541742f84ce7e258d46dd8407242289ab2ec72;p=lhc%2Fweb%2Fwww.git diff --git a/www/ecrire/base/repair.php b/www/ecrire/base/repair.php index 548fb2d5..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-2012 * + * 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 .= "
".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; } -?>