From 8ac6b4df3403256490adce01ac2283e292949f77 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Thu, 1 Apr 2010 09:34:16 +0000 Subject: [PATCH] Report de [15550] [15551] [15552] [15553] [15554] --- ecrire/base/trouver_table.php | 69 +++++++++++++++++++++++------------ ecrire/inc/filtres.php | 2 +- prive/modeles/formulaire.html | 2 +- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/ecrire/base/trouver_table.php b/ecrire/base/trouver_table.php index 3b93b09dbc..c57f3fe018 100644 --- a/ecrire/base/trouver_table.php +++ b/ecrire/base/trouver_table.php @@ -36,8 +36,18 @@ function base_trouver_table_dist($nom, $serveur=''){ if (!spip_connect($serveur) OR !preg_match('/^[a-zA-Z0-9._-]*/',$nom)) return null; + + $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; + + // le nom du cache depend du serveur mais aussi du nom de la db et du prefixe + // ce qui permet une auto invalidation en cas de modif manuelle du fichier + // de connexion, et tout risque d'ambiguite if (!isset($nom_cache_desc_sql[$serveur])) - $nom_cache_desc_sql[$serveur] = _DIR_CACHE . 'sql_desc' . ($serveur ? '_'.md5($serveur):'') . '.txt'; + $nom_cache_desc_sql[$serveur] = + _DIR_CACHE . 'sql_desc_' + . ($serveur ? "$serveur_":"") + . substr(md5($connexion['db'].":".$connexion['prefixe']),0,8) + .'.txt'; // un appel avec $nom vide est une demande explicite de vidange du cache des descriptions if (!$nom){ @@ -55,44 +65,52 @@ function base_trouver_table_dist($nom, $serveur=''){ $fdesc = $desc = ''; $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; - // base sous SPIP: gerer les abreviations des noms de table + // base sous SPIP: gerer les abreviations explicites des noms de table if ($connexion['spip_connect_version']) { include_spip('public/interfaces'); if (isset($table_des_tables[$nom])) { $nom = $table_des_tables[$nom]; $nom_sql = 'spip_' . $nom; } - if (!isset($connexion['tables'][$nom_sql])) { - include_spip('base/serial'); - if (isset($tables_principales[$nom_sql])) - $fdesc = $tables_principales[$nom_sql]; - else { - include_spip('base/auxiliaires'); - if (isset($tables_auxiliaires['spip_' .$nom])) { - $nom_sql = 'spip_' . $nom; - $fdesc = $tables_auxiliaires[$nom_sql]; - } # table locale a cote de SPIP, comme non SPIP: - } - } } // si c'est la premiere table qu'on cherche // et si on est pas explicitement en recalcul // on essaye de recharger le cache des decriptions de ce serveur // dans le fichier cache - if (!isset($connexion['tables'][$nom_sql]) + if (!isset($connexion['tables'][$nom]) AND $GLOBALS['var_mode']!=='recalcul' AND (!isset($connexion['tables']) OR !$connexion['tables'])) { if (lire_fichier($nom_cache_desc_sql[$serveur],$desc_cache) AND $desc_cache=unserialize($desc_cache)) $connexion['tables'] = $desc_cache; } - if (!isset($connexion['tables'][$nom_sql])) { + if (!isset($connexion['tables'][$nom])) { + include_spip('base/serial'); + + if (isset($tables_principales[$nom_sql])) + $fdesc = $tables_principales[$nom_sql]; + // meme si pas d'abreviation declaree, trouver la table spip_$nom + // si c'est une table principale, + // puisqu'on le fait aussi pour les tables auxiliaires + elseif ($nom_sql==$nom AND isset($tables_principales['spip_' .$nom])){ + $nom_sql = 'spip_' . $nom; + $fdesc = &$tables_principales[$nom_sql]; + } + else { + include_spip('base/auxiliaires'); + if (isset($tables_auxiliaires['spip_' .$nom])) { + $nom_sql = 'spip_' . $nom; + $fdesc = &$tables_auxiliaires[$nom_sql]; + } # table locale a cote de SPIP, comme non SPIP: + } + + // faut il interpreter le prefixe 'spip_' ? + $transposer_spip = ($nom_sql != $nom); // La *vraie* base a la priorite if (true /* !$bdesc OR !$bdesc['field'] */) { - $t = ($nom_sql != $nom); - $desc = sql_showtable($nom_sql, $t, $serveur); + $desc = sql_showtable($nom_sql, $transposer_spip, $serveur); if (!$desc OR !$desc['field']) { if (!$fdesc) { spip_log("trouver_table: table inconnue '$serveur' '$nom'"); @@ -110,17 +128,22 @@ function base_trouver_table_dist($nom, $serveur=''){ $desc['key']['PRIMARY KEY'] = array_shift(array_keys($desc['field'])); $desc['table']= $nom_sql; - $desc['id_table']= $nom; $desc['connexion']= $serveur; - $desc['titre'] = isset($GLOBALS['table_titre'][$nom]) - ? $GLOBALS['table_titre'][$nom] : ''; - $connexion['tables'][$nom_sql] = $desc; + // objet_type peut provoquer un appel reentrant ici. + // pour ne pas faire de boucle infinie, on stocke ce qu'on a deja trouve + $connexion['tables'][$nom] = $desc; + + $table = table_objet(objet_type($nom)); + $desc['titre'] = + isset($GLOBALS['table_titre'][$table]) ? $GLOBALS['table_titre'][$table] : ''; + $connexion['tables'][$nom] = $desc; // une nouvelle table a ete descrite // mettons donc a jour le cache des descriptions de ce serveur if (is_writeable(_DIR_CACHE)) ecrire_fichier($nom_cache_desc_sql[$serveur],serialize($connexion['tables'])); } - return $connexion['tables'][$nom_sql]; + $connexion['tables'][$nom]['id_table']=$nom; + return $connexion['tables'][$nom]; } ?> diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 3b02ee6f8f..be3ee2e69c 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -2349,7 +2349,7 @@ function singulier_ou_pluriel($nb,$chaine_un,$chaine_plusieurs,$var='nb'){ * @param string $fonction * @return string */ -function filtre_icone_dist($lien, $texte, $fond, $align="", $fonction="", $class=""){ +function filtre_icone_dist($lien, $texte, $fond, $align="", $fonction="", $class="",$javascript=""){ if ($icone_renommer = charger_fonction('icone_renommer','inc',true)) list($fond,$fonction) = $icone_renommer($fond,$fonction); diff --git a/prive/modeles/formulaire.html b/prive/modeles/formulaire.html index 0f651bcf66..b193a27112 100644 --- a/prive/modeles/formulaire.html +++ b/prive/modeles/formulaire.html @@ -1,4 +1,4 @@ <div><?php /* une fonction qui produit du php qui ne sera execute qu'au service final de la page */ -echo executer_balise_dynamique('FORMULAIRE_[(#ENV{class}|strtoupper|texte_script)]',[(#ENV{args}|var_export{true})],array(),'#ENV{lang}',0); +echo executer_balise_dynamique('FORMULAIRE_[(#ENV{class}|strtoupper|texte_script)]',[(#ENV{args}|var_export{true})],array('','','','','#ENV{lang}')); ?></div> \ No newline at end of file -- GitLab