diff --git a/ecrire/balise/formulaire_signature.php b/ecrire/balise/formulaire_signature.php index fbed9222c9703ec2eb31db22067da310a2332cd5..2cf7b12a88dca91ef75652ed112d95c7260a6381 100644 --- a/ecrire/balise/formulaire_signature.php +++ b/ecrire/balise/formulaire_signature.php @@ -93,8 +93,7 @@ function reponse_confirmation($var_confirm = '') { static $confirm = ''; if (!$var_confirm) return $confirm; - spip_connect(); - if ($GLOBALS['db_ok']) { + if (spip_connect()) { include_spip('inc/texte'); include_spip('inc/filtres'); @@ -177,7 +176,7 @@ function reponse_confirmation($var_confirm = '') { function reponse_signature($id_article, $nom_email, $adresse_email, $message, $nom_site, $url_site, $url_page) { - if (!$GLOBALS['db_ok']) return _T('form_pet_probleme_technique'); + if (!spip_connect()) return _T('form_pet_probleme_technique'); include_spip('inc/texte'); include_spip('inc/filtres'); diff --git a/ecrire/base/db_mysql.php b/ecrire/base/db_mysql.php index 22ac341d085611cb404f79c106d0587d7a02865e..1d0437f53c10ea146b406ca0e20c6dce79426ceb 100644 --- a/ecrire/base/db_mysql.php +++ b/ecrire/base/db_mysql.php @@ -21,6 +21,35 @@ define('SPIP_NUM', MYSQL_NUM); // Appel de requetes SQL // +// fonction pour la premiere connexion + +function base_db_mysql_dist() +{ + // fichier d'init present ? + if (!_FILE_CONNECT) { + if ($GLOBALS['exec'] != 'install') // est-ce l'installation ? + return false; // non, faut faire sans + else return 'spip_query_db'; // oui; valeur d'office + } + + include_once(_FILE_CONNECT); + + // Version courante = 0.3 + // + // les versions 0.1 et 0.2 fonctionnent toujours, meme si : + // - la version 0.1 est moins performante que la 0.2 + // - la 0.2 fait un include_ecrire('inc_db_mysql.php3') + // En tout cas on ne force pas la mise a niveau + if ($GLOBALS['spip_connect_version'] >= 0.1) + return 'spip_query_db'; + + // La version 0.0 (non numerotee) doit etre refaite par un admin + + if (!_DIR_RESTREINT) return false; + + redirige_par_entete(generer_url_ecrire('upgrade', 'reinstall=oui', true)); +} + // http://doc.spip.org/@spip_query_db function spip_query_db($query) { @@ -197,7 +226,7 @@ function spip_connect_db($host, $port, $login, $pass, $db) { $err = 'Echec connexion MySQL '.spip_sql_errno().' '.spip_sql_error(); spip_log($err); spip_log($err, 'mysql'); - } + } else $GLOBALS['db_ok'] = 'spip_query_db'; return $GLOBALS['db_ok']; } diff --git a/ecrire/exec/install.php b/ecrire/exec/install.php index 8cb614b12989c354676efd78647ce013ddf2e511..d7c342a56fe74c2c815681168e7197a0413f681c 100644 --- a/ecrire/exec/install.php +++ b/ecrire/exec/install.php @@ -29,7 +29,7 @@ function exec_install_dist() @unlink(_FILE_META); unset($GLOBALS['meta']); include_spip('inc/lang'); - init_langues(); + init_langues(); // pourquoi faut-il l'appeler encore une fois ? include_spip('base/create'); include_spip('base/db_mysql'); diff --git a/ecrire/inc/actions.php b/ecrire/inc/actions.php index 3958df19e78bba013dff6b07198bddf24575f1d8..cf2c279f1f334e0845fa539a71db6d764311da60 100644 --- a/ecrire/inc/actions.php +++ b/ecrire/inc/actions.php @@ -186,9 +186,7 @@ function verifier_php_auth() { && !$GLOBALS['ignore_auth_http']) { $result = spip_query("SELECT * FROM spip_auteurs WHERE login=" . spip_abstract_quote($_SERVER['PHP_AUTH_USER'])); - if (!$GLOBALS['db_ok']) return false; - - $row = spip_fetch_array($result); + $row = @spip_fetch_array($result); if ($row AND $row['source'] != 'ldap') { if ($row['pass'] == md5($row['alea_actuel'] . $_SERVER['PHP_AUTH_PW'])) { $GLOBALS['auteur_session'] = $row; diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php index d9c0ec41fa25ab06fa907ff9b6f2fb67bee5290e..540f14d6346546e6baaf557d4df7d2def00977f2 100644 --- a/ecrire/inc/auth.php +++ b/ecrire/inc/auth.php @@ -218,7 +218,7 @@ function auth_prefs() function auth_areconnecter($auth_login) { include_spip('inc/minipres'); - if (!$GLOBALS['db_ok']) { + if (!spip_connect()) { spip_log("Erreur base de donnees"); minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'). "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>"); diff --git a/ecrire/inc/install_4.php b/ecrire/inc/install_4.php index 293901e5da96d37abac3f27d3ed955a761cfd613..9208d9228169e866ca9a30dc2a1d02b6b8e4a312 100644 --- a/ecrire/inc/install_4.php +++ b/ecrire/inc/install_4.php @@ -17,9 +17,6 @@ function inc_install_4() install_debut_html(); - // Necessaire pour appeler les fonctions SQL wrappees - include_spip('base/db_mysql'); - echo "<BR />\n<FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=3>"._T('info_creation_tables')."</FONT>"; echo "<P>\n"; @@ -38,7 +35,7 @@ function inc_install_4() mysql_select_db($sel_db); // Message pour spip_query : tout va bien ! - $GLOBALS['db_ok'] = true; + $GLOBALS['db_ok'] = 'spip_connect_db'; $GLOBALS['spip_connect_version'] = 0.3; // Test si SPIP deja installe @@ -57,7 +54,7 @@ function inc_install_4() $ligne_rappel = ''; spip_query("DELETE FROM spip_meta WHERE nom='mysql_rappel_nom_base'"); } else { - echo " (erreur rappel nom base `$sel_db`.spip_meta) "; + echo " (erreur rappel nom base `$sel_db`.spip_meta $nouvelle) "; $GLOBALS['mysql_rappel_nom_base'] = false; $ligne_rappel = "\$GLOBALS['mysql_rappel_nom_base'] = false; ". "/* echec du test sur `$sel_db`.spip_meta lors de l'installation. */\n"; @@ -74,7 +71,6 @@ function inc_install_4() } echo "($result_ok) -->"; - if ($result_ok) { if (preg_match(',(.*):(.*),', $adresse_db, $r)) list(,$adresse_db, $port) = $r; diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php index 4014dc0b6e98e5341c80a305f34229502ed2bed8..627f7a887bbcdb3ad54afefd21886ffbe34f45e2 100644 --- a/ecrire/inc/meta.php +++ b/ecrire/inc/meta.php @@ -14,14 +14,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@lire_metas function lire_metas() { - $result = spip_query("SELECT nom,valeur FROM spip_meta"); - if($GLOBALS['db_ok']) { + if (!_FILE_CONNECT) return; + if ($result = @spip_query("SELECT nom,valeur FROM spip_meta")) { + $GLOBALS['meta'] = array(); while ($row = spip_fetch_array($result)) $GLOBALS['meta'][$row['nom']] = $row['valeur']; + + if (!$GLOBALS['meta']['charset']) + ecrire_meta('charset', _DEFAULT_CHARSET); } - if (!$GLOBALS['meta']['charset']) - ecrire_meta('charset', _DEFAULT_CHARSET); } // http://doc.spip.org/@ecrire_meta @@ -73,7 +75,7 @@ if (!isset($GLOBALS['meta'])) // On force le renouvellement de l'alea de l'espace prive tous les 2 jours -if (!_DIR_RESTREINT AND abs(time() - $GLOBALS['meta']['alea_ephemere_date']) > 2 * 24*3600) { +if ((!_DIR_RESTREINT) AND _FILE_CONNECT AND abs(time() - $GLOBALS['meta']['alea_ephemere_date']) > 2 * 24*3600) { include_spip('inc/acces'); renouvelle_alea(); } diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 1ea0b0e58b5636e249fe4c77cfb3e3fc9b6e5378..95a2d9afa83b5844bdc2ce77d012e6a35ba41328 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -203,53 +203,37 @@ function spip_log($message, $logname='spip') { spip_log($message); } +// API d'appel a la base de donnees: +// on charge le fichier du repertoire base/ donne en argument +// et on execute la fonction homonyme censee initaliser la connexion +// et renvoyer le nom de la fonction a connexion persistante. +// On memorise ce nom dans une statique pour n'appeler qu'une fois. -// API d'appel a la base de donnees // http://doc.spip.org/@spip_connect -function spip_connect() { - static $t; - if ($t++) return; +function spip_connect($serveur='') { + static $t = array(); - include_spip('base/db_mysql'); - include_once(_FILE_CONNECT); +// Assimiler spip_connect() et spip_connect('') [PHP les distingue]. +// Tous deux designent le serveur SQL std (moche mais historique) - // Version courante = 0.3 - // - // les versions 0.1 et 0.2 fonctionnent toujours, meme si : - // - la version 0.1 est moins performante que la 0.2 - // - la 0.2 fait un include_ecrire('inc_db_mysql.php3') - // En tout cas on ne force pas la mise a niveau - if ($GLOBALS['spip_connect_version'] >= 0.1) - return; - - // La version 0.0 (non numerotee) doit etre refaite - if ($GLOBALS['spip_connect_version'] < 0.1) { - if (!_DIR_RESTREINT) { - $GLOBALS['db_ok'] = false; - return; - } - redirige_par_entete( - generer_url_ecrire('upgrade', 'reinstall=oui', true)); - } + if (!$serveur) $serveur = 'db_mysql'; + + if (isset($t[$serveur])) return $t[$serveur]; + + $f = charger_fonction($serveur, 'base', true); + + $t[$serveur] = ($f ? $f() : false); + spip_log("spip_connect($serveur) $f " . $t[$serveur]); + return $t[$serveur]; } // http://doc.spip.org/@spip_query -function spip_query($query) { - - // Remarque : si on est appele par l'install, - // la connexion initiale a ete faite avant - if (!$GLOBALS['db_ok']) { - // Essaie de se connecter - if (_FILE_CONNECT) - spip_connect(); - - // Erreur de connexion - if (!$GLOBALS['db_ok']) - return; - } +function spip_query($query, $serveur='') { + + if (!($f = spip_connect($serveur))) return; // Erreur de connexion - // Faire la requete - return spip_query_db($query); + // executer la requete + return $f($query); } // a demenager dans base/abstract_sql a terme @@ -1084,7 +1068,7 @@ function spip_initialisation() { $GLOBALS['spip_lang'] = $GLOBALS['langue_site']; // Verifier le visiteur - verifier_visiteur(); + if (_FILE_CONNECT) verifier_visiteur(); } // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ; diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php index 371448c22b875bb1e9a8f3a2a8545a7f56e7293b..c97a1d1e3cad7783b6d5c447937389b97aca1dff 100644 --- a/ecrire/public/cacher.php +++ b/ecrire/public/cacher.php @@ -294,9 +294,8 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la // Faut-il effacer des pages invalidees (en particulier ce cache-ci) ? if (isset($GLOBALS['meta']['invalider'])) { - // tester si la base est dispo - spip_connect(); - if ($GLOBALS['db_ok']) { + // le faire si la base est disponible + if (spip_connect()) { include_spip('inc/meta'); lire_metas(); retire_caches($chemin_cache); @@ -321,12 +320,8 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la $use_cache = 1; } - - // tester si la base est dispo - spip_connect(); - // Si pas valide mais pas de connexion a la base, le garder quand meme - if (!$GLOBALS['db_ok']) { + if (!spip_connect()) { if (file_exists(_DIR_CACHE . $chemin_cache)) $use_cache = 0 ; else {