From e068e1c3eabf42f97767d121b6e6ca66880cd651 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 22 Sep 2003 21:13:12 +0000
Subject: [PATCH] simplifie un peu l'usage de changer_typo() [ NB: le plus
 difficile est de tester ! ]

---
 ecrire/articles.php3         | 31 +++++++-------------
 ecrire/inc_lang.php3         |  9 +++++-
 ecrire/inc_presentation.php3 |  9 +++---
 ecrire/lang/spip_eo.php3     |  1 +
 ecrire/lang/spip_fr.php3     | 11 +++----
 ecrire/naviguer.php3         | 56 ++++++++++++++++++------------------
 6 files changed, 59 insertions(+), 58 deletions(-)

diff --git a/ecrire/articles.php3 b/ecrire/articles.php3
index 90d8a6675a..cc4e6f5323 100644
--- a/ecrire/articles.php3
+++ b/ecrire/articles.php3
@@ -21,9 +21,9 @@ if ($id_article==0) {
 
 		$langue_new = '';
 		$result_lang_rub = spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique");
-		if ($row = spip_fetch_array($result_lang_rub)) {
+		if ($row = spip_fetch_array($result_lang_rub))
 			$langue_new = $row["lang"];
-		}
+
 		if (!$langue_new) $langue_new = lire_meta('langue_site');
 		$langue_choisie_new = 'non';
 
@@ -136,19 +136,16 @@ if ($jour_redac && $flag_editable) {
 }
 
 
-// appliquer la modification de langue
+// Appliquer la modification de langue
 if (lire_meta('multi_articles') == 'oui' AND $flag_editable) {
 	$row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$rubrique_article"));
 	$langue_parent = $row['lang'];
 
 	if ($changer_lang) {
-		if ($changer_lang != "herit") {
+		if ($changer_lang != "herit")
 			spip_query("UPDATE spip_articles SET lang='".addslashes($changer_lang)."', langue_choisie='oui' WHERE id_article=$id_article");
-			$langue_article = $changer_lang;
-		} else {
+		else
 			spip_query("UPDATE spip_articles SET lang='".addslashes($langue_parent)."', langue_choisie='non' WHERE id_article=$id_article");
-			$langue_article = $langue_parent;
-		}
 	}
 }
 
@@ -289,7 +286,6 @@ if ($row = spip_fetch_array($result)) {
 	$referers = $row["referers"];
 	$extra = $row["extra"];
 	$id_trad = $row["id_trad"];
-	$langue_article = $row["lang"];
 }
 
 // pour l'affichage du virtuel
@@ -622,7 +618,7 @@ fin_raccourcis();
 debut_droite();
 
 
-changer_typo($langue_article);
+changer_typo('','article'.$id_article);
 
 
 // qu'est-ce que c'est que ces choses ??
@@ -1255,8 +1251,8 @@ if ((lire_meta('multi_articles') == 'oui')
 		}
 
 
-		if ($id_trad != 0) { // Afficher la liste des traductions
-			//$query_trad = "SELECT id_article, titre, lang, statut FROM spip_articles WHERE id_trad = $id_trad AND id_article!=$id_article";
+		// Afficher la liste des traductions
+		if ($id_trad != 0) {
 			$query_trad = "SELECT id_article, titre, lang, statut FROM spip_articles WHERE id_trad = $id_trad";
 			$result_trad = spip_query($query_trad);
 
@@ -1312,10 +1308,9 @@ if ((lire_meta('multi_articles') == 'oui')
 
 				$ret .= "<td class='arial2'>".traduire_nom_langue($lang_trad)."</td>\n";
 			}
-			changer_typo($langue_article);
 
+			// bloc traductions
 			if ($ret) {
-				//debut_cadre_enfonce("traductions-24.gif");
 				echo "<div align='left' style='margin-top: 5px; padding: 0px; border: 1px dashed #999999; background-color: #f0f0f0;' $dir_lang>";
 				echo "<table width='100%' cellspacing='0' border='0' cellpadding='3'>";
 				echo "<tr bgcolor='#eeeecc'><td colspan='4'><font size=2 face='Georgia,Garamond,Times,serif'><b>"._T('trad_article_traduction')."</b></font></td></tr>";
@@ -1325,21 +1320,17 @@ if ((lire_meta('multi_articles') == 'oui')
 				if ($flag_editable) {
 					echo debut_block_invisible('ne_plus_lier');
 					echo "<div style='width: 100%; padding-top: 1px; padding-bottom: 3px; padding-right: 3px; text-align=right;'>";
-					//echo "<table width='100%'><tr width='100%'><td> &nbsp; </td><td align='right' width='180'>";
 					$lien = $GLOBALS['clean_link'];
 					$lien->delVar($nom_select);
 					$lien = $lien->getUrl();
 					echo "<a href='articles.php3?id_article=$id_article&supp_trad=oui' class='verdana1'>"._T('trad_delier')." <img src='img_pack/croix-rouge.gif' alt='X' width='7' height='7' border='0' align='middle'></a>";
-					//icone_horizontale(_T('trad_delier'), "articles.php3?id_article=$id_article&supp_trad=oui", "traductions-24.gif", "supprimer.gif");
-					//echo "</td></tr></table>";
 					echo "</div>";
 					echo fin_block();
 				}
 				echo "</div>";
-
-
-				//fin_cadre_enfonce();
 			}
+
+			changer_typo($langue_article);
 		}
 
 		echo debut_block_invisible('lier_traductions');
diff --git a/ecrire/inc_lang.php3 b/ecrire/inc_lang.php3
index b0b3a93306..4e0a435719 100644
--- a/ecrire/inc_lang.php3
+++ b/ecrire/inc_lang.php3
@@ -334,15 +334,22 @@ function lang_typo($lang) {
 }
 
 // service pour que l'espace prive reflete la typo et la direction des objets affiches
-function changer_typo($lang = '') {
+function changer_typo($lang = '', $source = '') {
 	global $lang_typo, $lang_dir, $dir_lang;
 
+	if (ereg("^(article|rubrique|breve|auteur)([0-9]+)", $source, $regs)) {
+		$r = spip_fetch_array(spip_query("SELECT lang FROM spip_".$regs[1]."s WHERE id_".$regs[1]."=".$regs[2]));
+		$lang = $r['lang'];
+	}
+
 	if (!$lang)
 		$lang = lire_meta('langue_site');
 
 	$lang_typo = lang_typo($lang);
 	$lang_dir = lang_dir($lang);
 	$dir_lang = " dir='$lang_dir'";
+
+	spip_debug("typo '$source' *$lang $lang_typo $lang_dir");
 }
 
 // selectionner une langue
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 844ff6fb9b..3dd11e5709 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -389,7 +389,7 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 			$date = $row['date'];
 			$statut = $row['statut'];
 			$visites = $row['visites'];
-			$lang = $row['lang'];
+			if ($lang = $row['lang']) changer_typo($lang);
 			$popularite = ceil(min(100,100 * $row['popularite'] / max(1, 0 + lire_meta('popularite_max'))));
 			$descriptif = $row['descriptif'];
 			if ($descriptif) $descriptif = ' title="'.attribut_html(typo($descriptif)).'"';
@@ -528,7 +528,7 @@ function afficher_breves($titre_table, $requete, $affrub=false) {
 			$date_heure = $row['date_heure'];
 			$titre = $row['titre'];
 			$statut = $row['statut'];
-			$lang = $row['lang'];
+			if ($lang = $row['lang']) changer_typo($lang);
 			$id_rubrique = $row['id_rubrique'];
 			switch ($statut) {
 			case 'prop':
@@ -2030,7 +2030,8 @@ function fin_page($credits='') {
 // Afficher la hierarchie des rubriques
 //
 function afficher_parents($id_rubrique) {
-	global $parents, $couleur_foncee;
+	global $parents, $couleur_foncee, $lang_dir;
+
 	$parents = ereg_replace("(~+)","\\1~",$parents);
 	if ($id_rubrique) {
 		$query = "SELECT id_rubrique, id_parent, titre, lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique";
@@ -2042,7 +2043,7 @@ function afficher_parents($id_rubrique) {
 			$titre = $row['titre'];
 			changer_typo($row['lang']);
 
-			$parents = " <FONT SIZE=3 FACE='Verdana,Arial,Helvetica,sans-serif'><a href='naviguer.php3?coll=$id_rubrique'><font color='$couleur_foncee'>".typo($titre)."</font></a></FONT><BR>\n".$parents;
+			$parents = " <FONT SIZE=3 FACE='Verdana,Arial,Helvetica,sans-serif'><a href='naviguer.php3?coll=$id_rubrique'><font color='$couleur_foncee'><span dir='$lang_dir'>".typo($titre)."</span></font></a></FONT><BR>\n".$parents;
 			if (acces_restreint_rubrique($id_rubrique))
 				$parents = " <img src='img_pack/admin-12.gif' alt='' width='12' height='12' title='"._T('info_administrer_rubriques')."'> ".$parents;
 			if (!$id_parent)
diff --git a/ecrire/lang/spip_eo.php3 b/ecrire/lang/spip_eo.php3
index f4ae494184..67689cde74 100644
--- a/ecrire/lang/spip_eo.php3
+++ b/ecrire/lang/spip_eo.php3
@@ -998,6 +998,7 @@ Dankon pro via partopreno
 'lien_forum_public' => 'Mastrumi la publikan forumon de tiu &#265;i artikolo',
 'lien_icones_interface' => 'La piktogramoj de la interfaco estas de <a href=\'http://jimmac.musichall.cz/\'>Jakub \'Jimmac\' Steiner</a>.',
 'lien_liberer' => 'liberigi',
+'lien_liberer_tous' => '<NEW> lib&eacute;rer ces articles',
 'lien_mise_a_jour_syndication' => '&#284;isdatigi nun',
 'lien_modifer_date' => '&#348;an&#285;i la daton',
 'lien_nom_site' => 'NOMO DE LA teksejo:',
diff --git a/ecrire/lang/spip_fr.php3 b/ecrire/lang/spip_fr.php3
index 242d8054ce..160a340923 100644
--- a/ecrire/lang/spip_fr.php3
+++ b/ecrire/lang/spip_fr.php3
@@ -19,8 +19,8 @@ $GLOBALS['i18n_spip_fr'] = array(
 'admin_modifier_mot' => 'Modifier ce mot-cl&eacute;',
 'admin_modifier_rubrique' => 'Modifier cette rubrique',
 'admin_recalculer' => 'Recalculer cette page',
-'alerte_maj_impossible' => '<b>Alerte&nbsp;!</b> La mise &agrave; jour de la base MySQL vers la version @version@ est impossible, peut-&ecirc;tre &agrave; cause d\'un probl&egrave;me de permissions.',
 'aide_non_disponible' => 'Cette partie de l\'aide en ligne n\'est pas encore disponible dans cette langue.',
+'alerte_maj_impossible' => '<b>Alerte&nbsp;!</b> La mise &agrave; jour de la base MySQL vers la version @version@ est impossible, peut-&ecirc;tre &agrave; cause d\'un probl&egrave;me de permissions.',
 'avis_acces_interdit' => 'Acc&egrave;s interdit.',
 'avis_archive_incorrect' => 'le fichier archive n\'est pas un fichier SPIP',
 'avis_archive_invalide' => 'le fichier archive n\'est pas valide',
@@ -706,7 +706,6 @@ exige d\'avoir un acc&egrave;s FTP au site Web.',
 'info_mots_cles' => 'Les mots-cl&eacute;s',
 'info_mots_cles_association' => 'Les mots-cl&eacute;s de ce groupe peuvent &ecirc;tre associ&eacute;s&nbsp;:',
 'info_moyenne' => 'moyenne&nbsp;:',
-'info_multilinguisme' => 'Multilinguisme',
 'info_multi_articles' => 'Activer le menu de langue sur les articles&nbsp;?',
 'info_multi_cet_article' => 'Langue de cet article&nbsp;:',
 'info_multi_herit' => 'Langue par d&eacute;faut',
@@ -714,6 +713,7 @@ exige d\'avoir un acc&egrave;s FTP au site Web.',
 		Les langues d&eacute;j&agrave; utilis&eacute;es dans votre site (affich&eacute;es en premier) ne peuvent pas &ecirc;tre d&eacute;sactiv&eacute;es.',
 'info_multi_rubriques' => 'Activer le menu de langue sur les rubriques&nbsp;?',
 'info_multi_secteurs' => '... seulement pour les rubriques situ&eacute;es &agrave; la racine&nbsp;?',
+'info_multilinguisme' => 'Multilinguisme',
 'info_nexen_1' => 'Votre h&eacute;bergeur est Nexen Services.',
 'info_nexen_2' => 'La protection du r&eacute;pertoire <tt>ecrire/data/</tt> doit se faire par l\'interm&eacute;diaire de',
 'info_nexen_3' => 'l\'espace webmestres',
@@ -1207,8 +1207,8 @@ exige d\'avoir un acc&egrave;s FTP au site Web.',
 'onglet_origine_visites' => 'Origine des visites',
 'onglet_repartition_actuelle' => 'actuellement',
 'onglet_repartition_debut' => 'depuis le d&eacute;but',
-'onglet_repartition_rubrique' => 'R&eacute;partition par rubriques',
 'onglet_repartition_lang' => 'par langues',
+'onglet_repartition_rubrique' => 'R&eacute;partition par rubriques',
 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base',
 'onglet_vider_cache' => 'Vider le cache',
 
@@ -1622,8 +1622,9 @@ avez fait des modifications importantes de graphisme ou de structure du site.',
 'trad_deja_traduit' => 'Cet article est d&eacute;j&agrave; une traduction du pr&eacute;sent article.',
 'trad_delier' => 'Ne plus lier cet article &agrave; ces traductions',
 'trad_lier' => 'Cet article est une traduction de l\'article num&eacute;ro&nbsp;:',
-'trad_new' => "&Eacute;crire une nouvelle traduction de cet article",
-'trad_reference' => "(article de r&eacute;f&eacute;rence)"
+'trad_new' => '&Eacute;crire une nouvelle traduction de cet article',
+'trad_reference' => '(article de r&eacute;f&eacute;rence)'
+
 );
 
 
diff --git a/ecrire/naviguer.php3 b/ecrire/naviguer.php3
index db80f87252..e6957965aa 100644
--- a/ecrire/naviguer.php3
+++ b/ecrire/naviguer.php3
@@ -11,7 +11,7 @@ $flag_mots = lire_meta("articles_mots");
 
 
 function enfant($collection){
-	global $les_enfants, $couleur_foncee;
+	global $les_enfants, $couleur_foncee, $lang_dir;
 	$query2 = "SELECT * FROM spip_rubriques WHERE id_parent=\"$collection\" ORDER BY titre";
 	$result2 = spip_query($query2);
 
@@ -19,15 +19,17 @@ function enfant($collection){
 		$id_rubrique=$row['id_rubrique'];
 		$id_parent=$row['id_parent'];
 		$titre=$row['titre'];
-		$descriptif=propre($row['descriptif']);
 
 		$bouton_layer = bouton_block_invisible("enfants$id_rubrique");
 		$les_sous_enfants = sous_enfant($id_rubrique);
 
+		changer_typo($row['lang']);
+		$descriptif=propre($row['descriptif']);
+
 		$les_enfants.= "<P>";
 		if ($id_parent == "0") $les_enfants .= debut_cadre_relief("secteur-24.gif", true);
 		else  $les_enfants .= debut_cadre_relief("rubrique-24.gif", true);
-		$les_enfants.= "<FONT FACE=\"Verdana,Arial,Helvetica,sans-serif\">";
+		$les_enfants.= "<span dir='$lang_dir'><FONT FACE=\"Verdana,Arial,Helvetica,sans-serif\">";
 
 		if (strlen($les_sous_enfants) > 0){
 			$les_enfants.= $bouton_layer;
@@ -39,7 +41,7 @@ function enfant($collection){
 		if (strlen($descriptif)>1)
 			$les_enfants.="<BR><FONT SIZE=1>$descriptif</FONT>";
 
-		$les_enfants.= "</FONT>";
+		$les_enfants.= "</FONT></span>";
 
 		$les_enfants .= $les_sous_enfants;
 		$les_enfants .= fin_cadre_relief(true);
@@ -47,6 +49,7 @@ function enfant($collection){
 }
 
 function sous_enfant($collection2){
+	global $lang_dir;
 	$query3 = "SELECT * FROM spip_rubriques WHERE id_parent=\"$collection2\" ORDER BY titre";
 	$result3 = spip_query($query3);
 
@@ -56,8 +59,9 @@ function sous_enfant($collection2){
 			$id_rubrique2=$row['id_rubrique'];
 			$id_parent2=$row['id_parent'];
 			$titre2=$row['titre'];
-			
-			$retour.="<LI><A HREF='naviguer.php3?coll=$id_rubrique2'>$titre2</A>\n";
+			changer_typo($row['lang']);
+
+			$retour.="<LI><A HREF='naviguer.php3?coll=$id_rubrique2'><span dir='$lang_dir'>".typo($titre2)."</span></A>\n";
 		}
 		$retour .= "</FONT></ul>\n\n".fin_block()."\n\n";
 	}
@@ -172,6 +176,23 @@ if ($titre) {
 	}
 }
 
+//
+// Appliquer le changement de langue
+//
+if ($changer_lang AND $coll>0 AND lire_meta('multi_rubriques') == 'oui' AND (lire_meta('multi_secteurs') == 'non' OR $id_parent == 0) AND $flag_editable) {
+	if ($changer_lang != "herit")
+		spip_query("UPDATE spip_rubriques SET lang='".addslashes($changer_lang)."', langue_choisie='oui' WHERE id_rubrique=$coll");
+	else {
+		if ($id_parent == 0)
+			$langue_parent = lire_meta('langue_site');
+		else {
+			$row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_parent"));
+			$langue_parent = $row['lang'];
+		}
+		spip_query("UPDATE spip_rubriques SET lang='".addslashes($langue_parent)."', langue_choisie='non' WHERE id_rubrique=$coll");
+	}
+	calculer_langues_rubriques();
+}
 
 //
 // infos sur cette rubrique
@@ -248,6 +269,7 @@ if ($coll  > 0) {
 
 fin_grand_cadre();
 
+changer_typo('', 'rubrique'.$coll);
 
 
 debut_gauche();
@@ -377,20 +399,6 @@ if (strlen($texte) > 1) {
 // Langue de la rubrique
 //
 if ($coll>0 AND lire_meta('multi_rubriques') == 'oui' AND (lire_meta('multi_secteurs') == 'non' OR $id_parent == 0) AND $flag_editable) {
-	if ($changer_lang) {
-		if ($changer_lang != "herit") {
-			spip_query("UPDATE spip_rubriques SET lang='".addslashes($changer_lang)."', langue_choisie='oui' WHERE id_rubrique=$coll");
-		} else {
-			if ($id_parent == 0) {
-				$langue_parent = lire_meta('langue_site');
-			} else {
-				$row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_parent"));
-				$langue_parent = $row['lang'];
-			}
-			spip_query("UPDATE spip_rubriques SET lang='".addslashes($langue_parent)."', langue_choisie='non' WHERE id_rubrique=$coll");
-		}
-		calculer_langues_rubriques();
-	}
 
 	$row = spip_fetch_array(spip_query("SELECT lang, langue_choisie FROM spip_rubriques WHERE id_rubrique=$coll"));
 	$langue_rubrique = $row['lang'];
@@ -401,14 +409,6 @@ if ($coll>0 AND lire_meta('multi_rubriques') == 'oui' AND (lire_meta('multi_sect
 	}
 	else $langue_parent = lire_meta('langue_site');
 
-/*	debut_cadre_enfonce("langues-24.gif");
-	echo "<center><font face='Verdana,Arial,Helvetica,sans-serif' size='2'>";
-	echo menu_langues('changer_lang', $langue_rubrique, _T('info_multi_cette_rubrique').' ', $langue_parent);
-	echo "</font></center>\n";
-	fin_cadre_enfonce();
-*/
-
-
 	debut_cadre_enfonce('langues-24.gif');
 	echo "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=3 WIDTH=100% BACKGROUND=''><TR><TD BGCOLOR='#EEEECC'>";
 	echo bouton_block_invisible('languesrubrique');
-- 
GitLab