From 0fa5151cbaf4a7232193de5d58cf1fa0f67a77aa Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 11 Apr 2004 00:40:14 +0000
Subject: [PATCH] blocs multis

---
 ecrire/articles.php3     |  8 ++---
 ecrire/inc_filtres.php3  | 68 ++++++++++++++++++++++++++++++++++++++++
 ecrire/inc_mots.php3     | 10 +++---
 ecrire/inc_texte.php3    |  9 ++++--
 ecrire/lang/spip_fr.php3 |  2 +-
 ecrire/mots_tous.php3    |  4 +--
 6 files changed, 86 insertions(+), 15 deletions(-)

diff --git a/ecrire/articles.php3 b/ecrire/articles.php3
index 2320a11bd6..b8f8a59e1b 100644
--- a/ecrire/articles.php3
+++ b/ecrire/articles.php3
@@ -851,7 +851,7 @@ if ($flag_editable AND $options == 'avancees') {
 	}
 	else {
 		echo "<TABLE CELLPADDING=5 CELLSPACING=0 BORDER=0 WIDTH=100% BACKGROUND=''>";
-		echo "<TR><TD BGCOLOR='$couleur_foncee'><FONT SIZE=1 COLOR='#FFFFFF' face='Verdana,Arial,Sans,sans-serif'><b>"._T('texte_date_creation_article')." : ";
+		echo "<TR><TD BGCOLOR='$couleur_foncee'><FONT SIZE=1 COLOR='#FFFFFF' face='Verdana,Arial,Sans,sans-serif'><b>"._T('texte_date_creation_article');
 		echo majuscules(affdate($date))."</font></B></FONT>".aide('artdate')."</TD></TR>";
 		echo "</TABLE>";
 	}
@@ -962,7 +962,7 @@ if ($cherche_auteur) {
 			$email_auteur = $row['email'];
 			$bio_auteur = $row['bio'];
 
-			echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>$nom_auteur</FONT></B>";
+			echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>".typo($nom_auteur)."</FONT></B>";
 			echo "</FONT>\n";
 		}
 		echo "</UL>";
@@ -983,13 +983,13 @@ if ($cherche_auteur) {
 				$email_auteur = $row['email'];
 				$bio_auteur = $row['bio'];
 
-				echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>$nom_auteur</FONT></B>";
+				echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>".typo($nom_auteur)."</FONT></B>";
 
 				if ($email_auteur) echo " ($email_auteur)";
 				echo " | <A HREF=\"articles.php3?id_article=$id_article&ajout_auteur=oui&nouv_auteur=$id_auteur#auteurs\">"._T('lien_ajouter_auteur')."</A>";
 
 				if (trim($bio_auteur)) {
-					echo "<BR><FONT SIZE=1>".propre(couper($bio_auteur, 100))."</FONT>\n";
+					echo "<BR><FONT SIZE=1>".couper(propre($bio_auteur), 100)."</FONT>\n";
 				}
 				echo "</FONT><p>\n";
 			}
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 33948db5a6..6eda70a8d2 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -681,4 +681,72 @@ function post_autobr($texte, $delim="\n_ ") {
 	return $texte;
 }
 
+//
+// Gestion des blocs multilingues
+//
+
+// renvoie la traduction d'un bloc multi dans la langue demandee
+function multi_trad ($lang, $trads) {
+	// si la traduction existe, genial
+	if (isset($trads[$lang]))
+		$retour = $trads[$lang];
+
+	// sinon, renvoyer la premiere du tableau
+	// remarque : on pourrait aussi appeler un service de traduction externe
+	else {
+		list (,$trad) = each($trads);
+		$retour = $trad;
+	}
+
+
+	// dans l'espace prive, mettre un popup multi
+	if ($GLOBALS['flag_ecrire']) {
+		$retour = ajoute_popup_multi($trads, $retour);
+	}
+
+	return $retour;
+}
+
+// analyse un bloc multi
+function extraire_trad ($langue_demandee, $bloc) {
+	$lang = '';
+
+	while (preg_match("/^(.*?)\[([a-z_]+)\]/si", $bloc, $regs)) {
+		$texte = trim($regs[1]);
+		if ($texte OR $lang)
+			$trads[$lang] = $texte;
+		$bloc = substr($bloc, strlen($regs[0]));
+		$lang = $regs[2];
+	}
+	$trads[$lang] = $bloc;
+
+	// faire la traduction avec ces donnees
+	return multi_trad($langue_demandee, $trads);
+}
+
+// repere les blocs multi dans un texte et extrait le bon
+function extraire_multi ($letexte) {
+	global $flag_pcre;
+
+	if ($flag_pcre AND preg_match_all("@<multi>(.*?)</multi>@si", $letexte, $regs, PREG_SET_ORDER)) {
+		foreach($regs as $reg) {
+			$letexte = str_replace($reg[0], extraire_trad($GLOBALS['spip_lang'], $reg[1]), $letexte);
+		}
+	}
+	return $letexte;
+}
+
+// popup des blocs multi dans l'espace prive (a ameliorer)
+function ajoute_popup_multi($trads, $texte) {
+	global $popups_multi, $compteur_multi;
+	while (list($lang,$bloc) = each($trads)) 
+		$popup .= "[$lang] ".supprimer_tags(couper($bloc,20))."\n";
+
+	if ($popup) {
+		$texte .= " <img src=\"img_pack/langues-modif-12.gif\" alt=\"(multi)\" title=\"$popup\" height=\"12\" width=\"12\" border=\"0\" />";
+	}
+
+	return $texte;
+}
+
 ?>
diff --git a/ecrire/inc_mots.php3 b/ecrire/inc_mots.php3
index 1db0ceab25..b73492c919 100644
--- a/ecrire/inc_mots.php3
+++ b/ecrire/inc_mots.php3
@@ -159,7 +159,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 				$type_mot = $row['type'];
 				$descriptif_mot = $row['descriptif'];
 
-				echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>$titre_mot</FONT></B>";
+				echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>".typo($titre_mot)."</FONT></B>";
 				echo "</FONT>\n";
 			}
 			echo "</UL>";
@@ -180,7 +180,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 					$type_mot = $row['type'];
 					$descriptif_mot = $row['descriptif'];
 
-					echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>$titre_mot</FONT></B>";
+					echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>".typo($titre_mot)."</FONT></B>";
 
 					if ($type_mot) echo " ($type_mot)";
 					echo " | <A HREF=\"$url_base&nouv_mot=$id_mot#mots\">"._T('info_ajouter_mot')."</A>";
@@ -295,7 +295,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 			$result_autres_mots = spip_query($query_autres_mots);
 			while ($row_autres = spip_fetch_array($result_autres_mots)) {
 				$le_mot = $row_autres['id_mot'];
-				$le_titre_mot = supprimer_tags($row_autres['titre']);
+				$le_titre_mot = supprimer_tags(typo($row_autres['titre']));
 
 				if ($le_mot == $id_mot) $selected = "SELECTED";
 				else $selected = "";
@@ -307,7 +307,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 			echo "</form>";
 
 		} else {
-			echo "<A HREF='$url'>$titre_mot</A>";
+			echo "<A HREF='$url'>".typo($titre_mot)."</A>";
 		}
 		echo "</TD>";
 
@@ -437,7 +437,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 					while($row = spip_fetch_array($result)) {
 						$id_mot = $row['id_mot'];
 						$titre_mot = $row['titre'];
-						$texte_option = entites_html($titre_mot);
+						$texte_option = entites_html(supprimer_tags(typo($titre_mot)));
 						echo "\n<OPTION VALUE=\"$id_mot\">";
 						echo "&nbsp;&nbsp;&nbsp;";
 						echo $texte_option;
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 91a462788a..ce4c83792c 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -132,9 +132,10 @@ function nettoyer_chapo($chapo){
 
 // points d'entree de pre- et post-traitement pour propre() et typo()
 function spip_avant_propre ($letexte) {
+	$letexte = extraire_multi($letexte);
+
 	if (@function_exists('avant_propre'))
 		return avant_propre ($letexte);
-
 	return $letexte;
 }
 
@@ -146,6 +147,8 @@ function spip_apres_propre ($letexte) {
 }
 
 function spip_avant_typo ($letexte) {
+	$letexte = extraire_multi($letexte);
+
 	if (@function_exists('avant_typo'))
 		return avant_typo ($letexte);
 
@@ -914,7 +917,7 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 			/* 11 */	"/(<br[[:space:]]*\/?".">){2,}/",
 			/* 12 */	"/<p>([\n]*)(<br[[:space:]]*\/?".">)+/",
 			/* 13 */	"/<p>/",
-			/* 14 */	"/\n/",
+			/* 14 		"/\n/", */
 			/* 15 */	"/<quote>/",
 			/* 16 */	"/<\/quote>/"
 		);
@@ -933,7 +936,7 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 			/* 11 */	"<p class=\"spip\">",
 			/* 12 */	"<p class=\"spip\">",
 			/* 13 */	"<p class=\"spip\">",
-			/* 14 */	" ",
+			/* 14 		" ", */
 			/* 15 */	"<blockquote class=\"spip\">",
 			/* 16 */	"</blockquote>"
 		);
diff --git a/ecrire/lang/spip_fr.php3 b/ecrire/lang/spip_fr.php3
index c14b8bca99..a211fd57bc 100644
--- a/ecrire/lang/spip_fr.php3
+++ b/ecrire/lang/spip_fr.php3
@@ -1438,7 +1438,7 @@ r&eacute;installation de SPIP pour recr&eacute;er une nouvelle base ainsi qu\'un
 			automatique.',
 'texte_creation_automatique_vignette' => 'La cr&eacute;ation automatique de vignettes de pr&eacute;visualisation est activ&eacute;e sur ce site. Si vous installez &agrave; partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagn&eacute;es d\'une vignette d\'une taille maximale de @taille_preview@&nbsp;pixels.',
 'texte_creer_rubrique' => 'Avant de pouvoir &eacute;crire des articles,<BR> vous devez cr&eacute;er une rubrique.',
-'texte_date_creation_article' => 'DATE DE CR&Eacute;ATION DE L\'ARTICLE',
+'texte_date_creation_article' => 'DATE DE CR&Eacute;ATION DE L\'ARTICLE&nbsp;:',
 'texte_date_publication_anterieure' => 'DATE DE PUBLICATION ANT&Eacute;RIEURE',
 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de publication ant&eacute;rieure.',
 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :',
diff --git a/ecrire/mots_tous.php3 b/ecrire/mots_tous.php3
index bc843ccad0..04ea61e967 100644
--- a/ecrire/mots_tous.php3
+++ b/ecrire/mots_tous.php3
@@ -248,9 +248,9 @@ while ($row_groupes = spip_fetch_array($result_groupes)) {
 				echo "</TD>";
 				echo "<TD class='serif2'>";
 				if ($connect_statut == "0minirezo" OR $nb_articles[$id_mot] > 0)
-					echo "<A HREF='mots_edit.php3?id_mot=$id_mot&redirect=mots_tous.php3'>$titre_mot</A>";
+					echo "<A HREF='mots_edit.php3?id_mot=$id_mot&redirect=mots_tous.php3'>".typo($titre_mot)."</A>";
 				else
-					echo "$titre_mot";
+					echo typo($titre_mot);
 				echo "</TD>";
 				echo "<TD ALIGN='right' class='verdana2'>";
 
-- 
GitLab