From 84bd6df78639e4ca59ec3e61d6bf12329cc7ce62 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 11 May 2004 22:10:25 +0000 Subject: [PATCH] =?UTF-8?q?des=20modifs=20assez=20cons=C3=A9quentes=20sur?= =?UTF-8?q?=20le=20multilang=20de=20l'espace=20public=20;=20-=20on=20revie?= =?UTF-8?q?nt=20aux=20bases=20de=20SPIP=20:=20un=20URL=20=3D=20un=20fichie?= =?UTF-8?q?r=20cache=20-=20notation=20plus=20simple=20#MENU=5FLANG=20et=20?= =?UTF-8?q?#MENU=5FLANG=5FECRIRE=20-=20une=20variable=20de=20personnalisat?= =?UTF-8?q?ion=20"$forcer=5Flang"=20pour=20un=20"saut=20automatique"=20=20?= =?UTF-8?q?=20vers=20l'URL=20&lang=3Dxxxx=20(cas=20typique=20:=20la=20page?= =?UTF-8?q?=20de=20login)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend-dist.html | 56 ++++++----------------------------------- ecrire/inc_lang.php3 | 36 +++++++++++++++++++++++--- ecrire/inc_version.php3 | 2 +- inc-calcul-squel.php3 | 37 ++++++++++++++++----------- inc-calcul.php3 | 31 +++++++++++++---------- inc-champ-squel.php3 | 2 +- inc-public-global.php3 | 56 +++++++++++------------------------------ login-dist.html | 2 +- spip_cookie.php3 | 3 +++ spip_login.php3 | 2 +- spip_pass.php3 | 1 + 11 files changed, 104 insertions(+), 124 deletions(-) diff --git a/backend-dist.html b/backend-dist.html index 31962eb156..569c71c23d 100644 --- a/backend-dist.html +++ b/backend-dist.html @@ -1,4 +1,3 @@ -<?php echo '<'.'?xml version="1.0" encoding="#CHARSET"?'.'>'; ?> <rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> @@ -14,71 +13,32 @@ <description></description> </image> -<!-- d'abord les articles specifiques a une langue - syntaxe backend.php3?lang=xx --> - - <BOUCLE_langue(ARTICLES){lang}{par date}{inverse}{0,10}> - <item> - <title>[(#TITRE|texte_backend)]</title> - <link>#URL_SITE_SPIP/#URL_ARTICLE</link> - <date>#DATE</date> - <description>[<img src="#URL_SITE_SPIP/IMG/(#LOGO_ARTICLE|fichier)" align="left" hspace="4" vspace="4"> ][(#INTRODUCTION|texte_backend)]</description> - <author><BOUCLE_aut_lang(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut_lang></author> - <dc:date>[(#DATE|date_iso)]</dc:date> - <dc:format>text/html</dc:format> - <dc:language>#LANG</dc:language> - <dc:creator><BOUCLE_aut_langb(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut_langb></dc:creator> - </item> - </BOUCLE_langue> - -<!-- sinon, les articles specifiques a une rubrique - syntaxe backend.php3?id_rubrique=123 --> - -<BOUCLE_rub(RUBRIQUES){id_rubrique}> - <BOUCLE1(ARTICLES){branche}{par date}{inverse}{0,10}> - <item> - <title>[(#TITRE|texte_backend)]</title> - <link>#URL_SITE_SPIP/#URL_ARTICLE</link> - <date>#DATE</date> - <description>[<img src="#URL_SITE_SPIP/IMG/(#LOGO_ARTICLE|fichier)" align="left" hspace="4" vspace="4"> ][(#INTRODUCTION|texte_backend)]</description> - <author><BOUCLE_aut1(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut1></author> - <dc:date>[(#DATE|date_iso)]</dc:date> - <dc:format>text/html</dc:format> - <dc:language>#LANG</dc:language> - <dc:creator><BOUCLE_aut1b(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut1b></dc:creator> - </item> - </BOUCLE1> -</BOUCLE_rub> - -<!-- en dernier recours, tous les articles du site - syntaxe backend.php3 --> - - <BOUCLE2(ARTICLES){tout}{par date}{inverse}{0,10}{unique}> + <BOUCLE_10recents(ARTICLES){lang ?}{branche ?}{par date}{inverse}{0,10}{unique}> <item> <title>[(#TITRE|texte_backend)]</title> <link>#URL_SITE_SPIP/#URL_ARTICLE</link> <date>#DATE</date> <description>[<img src="#URL_SITE_SPIP/IMG/(#LOGO_ARTICLE|fichier)" align="left" hspace="4" vspace="4"> ][(#INTRODUCTION|texte_backend)]</description> - <author><BOUCLE_aut2(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut2></author> + <author><BOUCLE_auteurs(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_auteurs></author> <dc:date>[(#DATE|date_iso)]</dc:date> <dc:format>text/html</dc:format> <dc:language>#LANG</dc:language> - <dc:creator><BOUCLE_aut2b(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut2b></dc:creator> + <dc:creator><BOUCLE_auteursb(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_auteursb></dc:creator> </item> - </BOUCLE2> - <BOUCLE3(ARTICLES){tout}{par date}{inverse}{age<3}{unique}> + </BOUCLE_10recents> + <BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{par date}{inverse}{age<3}{unique}> <item> <title>[(#TITRE|texte_backend)]</title> <link>#URL_SITE_SPIP/#URL_ARTICLE</link> <date>#DATE</date> <description>[<img src="#URL_SITE_SPIP/IMG/(#LOGO_ARTICLE|fichier)" align="left" hspace="4" vspace="4"> ][(#INTRODUCTION|texte_backend)]</description> - <author><BOUCLE_aut3(auteurs){id_article}{","}>[(#NOM|texte_backend)]</BOUCLE_aut3></author> + <author><BOUCLE_auteurs_t(AUTEURS){id_article}{","}>[(#NOM|texte_backend)]</BOUCLE_auteurs_t></author> <dc:date>[(#DATE|date_iso)]</dc:date> <dc:format>text/html</dc:format> <dc:language>#LANG</dc:language> - <dc:creator><BOUCLE_aut3b(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_aut3b></dc:creator> + <dc:creator><BOUCLE_auteurs_tb(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_auteurs_tb></dc:creator> </item> - </BOUCLE3> - -<//B_rub> -<//B_langue> + </BOUCLE_tres_recents> </channel> diff --git a/ecrire/inc_lang.php3 b/ecrire/inc_lang.php3 index a7a21dbc70..7a6b8db4b7 100644 --- a/ecrire/inc_lang.php3 +++ b/ecrire/inc_lang.php3 @@ -398,9 +398,7 @@ function lang_dselect ($rien='') { // - 'changer_lang' = langue de l'article, espace prive // function menu_langues($nom_select = 'var_lang', $default = '', $texte = '', $herit = '') { - global $couleur_foncee, $couleur_claire, $flag_ecrire, $connect_id_auteur, $multilang; - - if (!$flag_ecrire AND !$multilang AND ($nom_select == 'var_lang' OR $nom_select == 'var_lang_ecrire')) return; + global $couleur_foncee, $couleur_claire, $flag_ecrire, $connect_id_auteur; if ($default == '') $default = $GLOBALS['spip_lang']; @@ -471,6 +469,38 @@ function menu_langues($nom_select = 'var_lang', $default = '', $texte = '', $her } + +// +// Cette fonction est appelee depuis inc-public-global si on a installe +// la variable de personnalisation $forcer_lang ; elle renvoie le brouteur +// si necessaire vers l'URL xxxx?lang=ll +// +function verifier_lang_url() { + global $HTTP_GET_VARS, $HTTP_COOKIE_VARS, $spip_lang, $clean_link; + + // quelle langue est demandee ? + $lang_demandee = lire_meta('langue_site'); + if ($HTTP_COOKIE_VARS['spip_lang_ecrire']) $lang_demandee = $HTTP_COOKIE_VARS['spip_lang_ecrire']; + if ($HTTP_COOKIE_VARS['spip_lang']) $lang_demandee = $HTTP_COOKIE_VARS['spip_lang']; + if ($HTTP_GET_VARS['lang']) $lang_demandee = $HTTP_GET_VARS['lang']; + + // Verifier que la langue demandee existe + include_ecrire('inc_lang.php3'); + lang_select($lang_demandee); + $lang_demandee = $spip_lang; + + // Renvoyer si besoin + if (!($HTTP_GET_VARS['lang']<>'' AND $lang_demandee == $HTTP_GET_VARS['lang']) + AND !($HTTP_GET_VARS['lang']=='' AND $lang_demandee == lire_meta('langue_site'))) + { + $destination = $clean_link; + $destination->addvar('lang', $lang_demandee); + @header("Location: ".$destination->getUrl()); + exit; + } +} + + // // Selection de langue haut niveau // diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index c214c9935a..24adc6c3ce 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -176,7 +176,7 @@ if ($flag_ecrire) { $spip_version = 1.732; // version de spip -$spip_version_affichee = "1.7.2 pr1"; +$spip_version_affichee = "1.7.2 pr3"; // version de spip / tag cvs if (ereg('Name: v(.*) ','$Name$', $regs)) $spip_version_affichee = $regs[1]; diff --git a/inc-calcul-squel.php3 b/inc-calcul-squel.php3 index fbf20794a9..65a3b56408 100644 --- a/inc-calcul-squel.php3 +++ b/inc-calcul-squel.php3 @@ -339,19 +339,22 @@ function parser_boucle($texte, $id_parent) { else if ($param == 'racine') { $req_where[] = "$table.id_parent=0"; } - else if ($param == 'branche') { - $req_where[] = "$table.id_rubrique IN (\".calcul_branche(\$id_rubrique).\")"; + else if (ereg("^branche *(\??)", $param, $regs)) { + if (!$regs[1]) + $req_where[] = "$table.id_rubrique IN (\".calcul_branche(\$id_rubrique).\")"; + else + $req_where[] = "('\$id_rubrique'='' OR $table.id_rubrique IN (\".calcul_branche(\$id_rubrique).\"))"; } // Restriction de valeurs (implicite ou explicite) - else if (ereg('^([a-zA-Z_]+) *((!?)(<=?|>=?|==?) *"?([^<>=!"]*))?"?$', $param, $match)) { + else if (ereg('^([a-zA-Z_]+) *(\??) *((!?)(<=?|>=?|==?|\?) *"?([^<>=!"?]*))?"?$', $param, $match)) { // Variable comparee $col = $match[1]; $col_table = $table; // Valeur de comparaison - if ($match[2]) - $val = $match[5]; + if ($match[3]) + $val = $match[6]; else { $val = $match[1]; // Si id_parent, comparer l'id_parent avec l'id_objet de la boucle superieure @@ -363,6 +366,9 @@ function parser_boucle($texte, $id_parent) { $val = '$'.$val; } + // operateur optionnel {lang?} + $ou_rien = ($match[2]) ? "'$val'='' OR " : ''; + // Traitement general des relations externes if ($s = $tables_relations[$type][$col]) { $col_table = "rel_$type"; @@ -463,8 +469,8 @@ function parser_boucle($texte, $id_parent) { $plat = true; // Operateur de comparaison - if ($match[4]) { - $op = $match[4]; + if ($match[5]) { + $op = $match[5]; if ($op == '==') $op = ' REGEXP '; } else { @@ -472,8 +478,9 @@ function parser_boucle($texte, $id_parent) { } if ($col_table) $col_table .= '.'; - $where = "$col_table$col$op'".addslashes($val)."'"; - if ($match[3] == '!') $where = "NOT ($where)"; + $where = "($ou_rien$col_table$col$op'".addslashes($val)."')"; + + if ($match[4] == '!') $where = "NOT ($where)"; $req_where[] = $where; } @@ -586,11 +593,11 @@ function parser_boucle($texte, $id_parent) { if ($type == 'hierarchie') $requete = $req_limit; else if ($req_select) { - $requete = 'SELECT '.join(',', $req_select).' FROM '.join(',', $req_from); - if ($req_where) $requete .= ' WHERE '.join(' AND ', $req_where); + $requete = 'SELECT '.join(',', $req_select)." FROM ".join(',', $req_from); + if ($req_where) $requete .= " WHERE ".join(" AND ", $req_where); $requete .= $req_group; $requete .= $req_order; - if ($req_limit) $requete .= ' LIMIT '.$req_limit; + if ($req_limit) $requete .= " LIMIT ".$req_limit; } $result->type_requete = $type; $result->requete = $requete; @@ -1243,7 +1250,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var) } $id_on_off = $GLOBALS['tables_doublons'][$boucles[$id_boucle]->type_requete]; if ($id_on_off) - $code = "(\$GLOBALS['$id_on_off'] == \$contexte['$id_on_off']) ? '$on' : '$off'"; + $code = "(\$GLOBALS[contexte_inclus]['$id_on_off'] == \$contexte['$id_on_off']) ? '$on' : '$off'"; else $code = "'$off'"; break; @@ -1320,7 +1327,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var) // // Formulaire de changement de langue - case 'FORMULAIRE_LANG': + case 'MENU_LANG': $milieu = ' $'.$nom_var.' = "<"."?php include_ecrire(\"inc_lang.php3\"); @@ -1333,7 +1340,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var) // // Formulaire de changement de langue / page de login - case 'FORMULAIRE_LANG_ECRIRE': + case 'MENU_LANG_ECRIRE': $milieu = ' $'.$nom_var.' = "<"."?php include_ecrire(\"inc_lang.php3\"); diff --git a/inc-calcul.php3 b/inc-calcul.php3 index f0fdbe0dcd..d230a8da8f 100644 --- a/inc-calcul.php3 +++ b/inc-calcul.php3 @@ -439,7 +439,7 @@ function calculer_page($fond, $contexte) { function calculer_page_globale($fond) { - global $contexte; + global $contexte, $contexte_inclus; global $fichier_requete; global $id_rubrique_fond; @@ -459,19 +459,24 @@ function calculer_page_globale($fond) { else $contexte['date'] = $contexte['date_redac'] = date("Y-m-d H:i:s"); - if (eregi("[a-z_]+",$GLOBALS['lang'], $regs) AND (substr(",".$regs[0].",", "-,".lire_meta('langues_utilisees').","))) { - $contexte['lang'] = $regs[0]; - lang_select($regs[0]); - } + if ($GLOBALS['lang']) + $contexte['lang'] = $GLOBALS['lang']; + + $contexte_inclus = $contexte; // Par souci d'homogeneite (utile pour #EXPOSER) // Analyser les URLs personnalisees (inc-urls-...) recuperer_parametres_url($fond, $fichier_requete); $lang = lire_meta('langue_site'); - // Calcul de la rubrique associee a la requete - // (selection de squelette specifique) - - if ($id_rubrique = $contexte['id_rubrique']) { + // + // Affiner le choix du squelette : + // calcul de la rubrique associee a la requete + // + selection de la langue + // + if ($contexte['lang']) { + $lang = $contexte['lang']; // l'URL peut fixer lang=xx, mais inc-urls peut aussi agir sur $contexte[lang] + } + else if ($id_rubrique = $contexte['id_rubrique']) { $id_rubrique_fond = $id_rubrique; if ($row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"))) if ($row['lang']) $lang = $row['lang']; @@ -499,14 +504,14 @@ function calculer_page_globale($fond) { else { $id_rubrique_fond = 0; } - // selectionner la langue & affiner le squelette - if ($contexte['lang']) - $lang = $contexte['lang']; // si inc-urls veut fixer la langue lang_select($lang); - $fond = chercher_squelette($fond, $id_rubrique_fond, $lang); + $fond = chercher_squelette($fond, $id_rubrique_fond, $spip_lang); + + // // Special stats et boutons admin + // reset($contexte_defaut); while (list($key, $val) = each($contexte_defaut)) { if ($contexte[$val]) { diff --git a/inc-champ-squel.php3 b/inc-champ-squel.php3 index f9a7543133..bd67d9dea6 100755 --- a/inc-champ-squel.php3 +++ b/inc-champ-squel.php3 @@ -92,7 +92,7 @@ function init_champs_squel() { 'TAILLE', 'EXTENSION', 'DEBUT_SURLIGNE', 'FIN_SURLIGNE', 'TYPE_DOCUMENT', 'EXTENSION_DOCUMENT', 'FORMULAIRE_ADMIN', 'LOGIN_PRIVE', 'LOGIN_PUBLIC', 'URL_LOGOUT', 'PUCE', 'EXTRA', - 'ON_OFF', 'EXPOSER', 'FORMULAIRE_LANG', 'FORMULAIRE_LANG_ECRIRE' + 'ON_OFF', 'EXPOSER', 'MENU_LANG', 'MENU_LANG_ECRIRE' ); reset($c); while (list(, $val) = each($c)) { diff --git a/inc-public-global.php3 b/inc-public-global.php3 index 96e6967ce4..8c8e3af2ac 100644 --- a/inc-public-global.php3 +++ b/inc-public-global.php3 @@ -17,35 +17,6 @@ if (!isset($delais)) $t0 = $t1; }*/ -// -// Gestion de la langue du visiteur -// -function chercher_langue_squelette ($fichier_cache, $contexte='') { - global $lang, $multilang, $spip_lang; - - // multilingue visiteur - if ($contexte['lang']) - $lang_squel = $contexte['lang']; - else if ($multilang) { - include_ecrire('inc_lang.php3'); - utiliser_langue_visiteur(); - $contexte['lang'] = $lang_squel = $spip_lang; - } - else if ($lang) - $contexte['lang'] = $lang_squel = $lang; - - if ($lang_squel) - $fichier_cache .= "-$lang_squel"; - - return array($fichier_cache, $lang_squel, $contexte); -} - -// securite -if ($lang) { - if (!ereg("^[a-z_]+$", $lang)) unset($lang); - if (!ereg(",$lang,", ",".lire_meta('langues_utilisees').",")) unset($lang); -} - // // Inclusions de squelettes @@ -60,9 +31,6 @@ function inclure_fichier($fond, $delais, $contexte_inclus = "") { $fichier_requete .= '&'.$key.'='.$val; } $fichier_cache = generer_nom_fichier_cache($fichier_requete); - - list($fichier_cache, $lang_squel, $contexte_inclus) = chercher_langue_squelette ($fichier_cache, $contexte_inclus); - $chemin_cache = "CACHE/$fichier_cache"; $use_cache = utiliser_cache($chemin_cache, $delais); @@ -70,7 +38,7 @@ function inclure_fichier($fond, $delais, $contexte_inclus = "") { include_local("inc-calcul.php3"); $timer_a = explode(" ", microtime()); - $fond = chercher_squelette($fond, $contexte_inclus['id_rubrique'], $lang_squel); + $fond = chercher_squelette($fond, $contexte_inclus['id_rubrique'], $contexte_inclus['lang']); $page = calculer_page($fond, $contexte_inclus); $timer_b = explode(" ", microtime()); if ($page) { @@ -94,23 +62,29 @@ if ($HTTP_COOKIE_VARS['spip_session'] OR ($PHP_AUTH_USER AND !$ignore_auth_http) } +// +// Gestion de la langue dans l'URL +// +if ($forcer_lang) { + include_ecrire('inc_lang.php3'); + verifier_lang_url(); +} +if ($lang = $HTTP_GET_VARS['lang']) { + include_ecrire('inc_lang.php3'); + lang_select($lang); +} + + // // Gestion du cache et calcul de la page // -// nom du fichier cache +// Nom du fichier cache $fichier_requete = $REQUEST_URI; $fichier_requete = strtr($fichier_requete, '?', '&'); $fichier_requete = eregi_replace('&(submit|valider|PHPSESSID|(var_[^=&]*)|recalcul)=[^&]*', '', $fichier_requete); $fichier_cache = generer_nom_fichier_cache($fichier_requete); - -list ($fichier_cache, $lang_squel) = chercher_langue_squelette($fichier_cache, $contexte); - -if ($multilang AND !$lang) $lang = $lang_squel; -if ($multilang) $spip_lang = $lang; -$menu_lang = $spip_lang; - $chemin_cache = "CACHE/$fichier_cache"; $use_cache = utiliser_cache($chemin_cache, $delais); diff --git a/login-dist.html b/login-dist.html index 30e7e7a10b..3f19a8ae2c 100644 --- a/login-dist.html +++ b/login-dist.html @@ -11,7 +11,7 @@ <div align="center"> <h3 class="spip">#NOM_SITE_SPIP<br> <small><:login_acces_prive:></small></h3> -<div align="#LANG_RIGHT">#FORMULAIRE_LANG_ECRIRE</div> +<div align="#LANG_RIGHT">#MENU_LANG_ECRIRE</div> </div> #LOGIN_PRIVE </td></tr></table></center> diff --git a/spip_cookie.php3 b/spip_cookie.php3 index 2abfc0e7d6..78f9fa5af1 100644 --- a/spip_cookie.php3 +++ b/spip_cookie.php3 @@ -204,6 +204,9 @@ if ($var_lang_ecrire) { ajouter_session($auteur_session, $spip_session); // enregistrer dans le fichier de session } } + + $cible->delvar('lang'); + $cible->addvar('lang', $var_lang_ecrire); } } diff --git a/spip_login.php3 b/spip_login.php3 index 2ee02503e4..ac053a10d9 100644 --- a/spip_login.php3 +++ b/spip_login.php3 @@ -3,7 +3,7 @@ $fond = "login"; $delais = 3600; $flag_dynamique = true; $flag_preserver = true; -$multilang=true; +$forcer_lang = true; include ("inc-public.php3"); diff --git a/spip_pass.php3 b/spip_pass.php3 index 8a77801ff4..7f17fc6fb3 100644 --- a/spip_pass.php3 +++ b/spip_pass.php3 @@ -14,6 +14,7 @@ include_ecrire ("inc_acces.php3"); include_local("inc-formulaires.php3"); utiliser_langue_site(); +utiliser_langue_visiteur(); $inscriptions_ecrire = (lire_meta("accepter_inscriptions") == "oui") ; unset($erreur); -- GitLab