From 644fea738f22d8c4ee949ab8cbb76e505b75bff1 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 13 Dec 2010 09:26:57 +0000
Subject: [PATCH] report ameliore et plus generique de
 http://core.spip.org/trac/spip/changeset/aa0a47b Il subsiste un defaut :
 seuls les criteres present avant le {recherche} sont pris en compte dans la
 recherche. A ameliorer si possible.

---
 ecrire/inc/prepare_recherche.php | 24 +++++++++++++++++++-----
 ecrire/public/criteres.php       |  3 ++-
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/ecrire/inc/prepare_recherche.php b/ecrire/inc/prepare_recherche.php
index 0e5faf2287..2f01166dda 100644
--- a/ecrire/inc/prepare_recherche.php
+++ b/ecrire/inc/prepare_recherche.php
@@ -16,10 +16,24 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/rechercher');
 if (!defined('_DELAI_CACHE_resultats')) define('_DELAI_CACHE_resultats', 600);
 
-// Preparer les listes id_article IN (...) pour les parties WHERE
-// et points =  des requetes du moteur de recherche
-// http://doc.spip.org/@inc_prepare_recherche_dist
-function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, $serveur='') {
+/**
+ * Preparer les listes id_article IN (...) pour les parties WHERE
+ * et points =  des requetes du moteur de recherche
+ * http://doc.spip.org/@inc_prepare_recherche_dist
+ *
+ * @param string $recherche
+ *    chaine recherchee
+ * @param string $table
+ *    table dans laquelle porte la recherche
+ * @param bool $cond
+ *    critere conditionnel sur {recherche?}
+ * @param string $serveur
+ *    serveur de base de donnees
+ * @param array $modificateurs
+ *    modificateurs de boucle, ie liste des criteres presents
+ * @return array
+ */
+function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, $serveur='', $modificateurs = array()) {
 	static $cache = array();
 	$delai_fraicheur = min(_DELAI_CACHE_resultats,time()-$GLOBALS['meta']['derniere_modif']);
 
@@ -60,7 +74,7 @@ function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false,
 
 		// permettre aux plugins de modifier le resultat
 		$points = pipeline('prepare_recherche',array(
-			'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur),
+			'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur,'modificateurs'=>$modificateurs),
 			'data'=>$points
 		));
 
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 4d10729e1a..fc44fd4a1a 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -187,10 +187,11 @@ function critere_recherche_dist($idb, &$boucles, $crit) {
 	else
 		$quoi = '@$Pile[0]["recherche"]';
 
+	$_modificateur = var_export($boucle->modificateur,true);
 	$boucle->hash .= '
 	// RECHERCHE
 	$prepare_recherche = charger_fonction(\'prepare_recherche\', \'inc\');
-	list($rech_select, $rech_where) = $prepare_recherche('.$quoi.', "'.$boucle->id_table.'", "'.$crit->cond.'","' . $boucle->sql_serveur . '");
+	list($rech_select, $rech_where) = $prepare_recherche('.$quoi.', "'.$boucle->id_table.'", "'.$crit->cond.'","' . $boucle->sql_serveur . '",'.$_modificateur.');
 	';
 
 	$t = $boucle->id_table . '.' . $boucle->primary;
-- 
GitLab