From 82a2a4d6c0521f6f2bc2ad80f4934e0cbf68b775 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Thu, 2 Feb 2012 10:05:06 +0000
Subject: [PATCH] Utiliser les fonctions de texte de SPIP pour extraire les
 multis en SQLite plutot que refaire une regexp buguee (ici on ne renvoyait
 pas la premiere langue de la multi quand la langue demandee n'etait pas
 definie)

---
 ecrire/req/sqlite_fonctions.php | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/ecrire/req/sqlite_fonctions.php b/ecrire/req/sqlite_fonctions.php
index a109d2f71f..7d807f4e00 100644
--- a/ecrire/req/sqlite_fonctions.php
+++ b/ecrire/req/sqlite_fonctions.php
@@ -206,9 +206,23 @@ function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
  * @return string, l'extrait trouve.
 **/
 function _sqlite_func_extraire_multi($quoi, $lang) {
-	$cherche = "<multi>.*[\[]" . $lang . "[\]]([^\[]*).*</multi>";  
-	$return = preg_replace('%'.$cherche.'%sS', '$1', $quoi);
-	return $return;
+	if (!defined('_EXTRAIRE_MULTI'))
+		include_spip('inc/filtres');
+	if (!function_exists('approcher_langue'))
+		include_spip('inc/lang');
+	if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
+		foreach ($regs as $reg) {
+			// chercher la version de la langue courante
+			$trads = extraire_trads($reg[1]);
+			if ($l = approcher_langue($trads, $lang)) {
+				$trad = $trads[$l];
+			} else {
+				$trad = reset($trads);
+			}
+			$quoi = str_replace($reg[0], $trad, $quoi);
+		}
+	}
+	return $quoi;
 }
 
 
-- 
GitLab