function admin_repair_tables() { $connexion = $GLOBALS['connexions'][0]; $prefixe = $connexion['prefixe']; $res1 = sql_showbase(); $res = ""; if ($res1) { while ($r = sql_fetch($res1)) { $tab = array_shift($r); $res .= "<br /><b>$tab</b> "; spip_log("Repare $tab"); $result_repair = sql_repair($tab); if (!$result_repair) return false; $count = sql_countsel($tab); if ($count>1) $res .= "("._T('texte_compte_elements', array('count' => $count)).")\n"; else if ($count==1) $res .= "("._T('texte_compte_element', array('count' => $count)).")\n"; else $res .= "("._T('texte_vide').")\n"; $msg = join(" ", sql_fetch($result_repair)) . ' '; $ok = strpos($msg, ' OK '); if (!$ok) $res .= "<pre><span style='color: red; font-weight: bold;'>".htmlentities($msg)."</span></pre>\n"; else $res .= " "._T('texte_table_ok')."<br />\n"; } } return $res; }
/** * 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'); // recreer les tables manquantes eventuelles include_spip('base/create'); creer_base(); $connexion = $GLOBALS['connexions'][0]; $prefixe = $connexion['prefixe']; $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 = ""; $m = "<strong>{$tab}</strong> "; spip_log("Repare {$tab}", _LOG_INFO_IMPORTANTE); // 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) { $result_repair = sql_repair($tab); 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 ($result_repair 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 .= "<br /><tt>" . spip_htmlentities($msg) . "</tt>\n"; } else { $m .= " " . _T('texte_table_ok'); } $res .= "<div{$class}>{$m}</div>"; } } return $res; }