예제 #1
0
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;
}
예제 #2
0
/**
 * 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;
}