From e91b83b76e43fab7775db7057184fc67d4f2b314 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Thu, 14 Dec 2006 09:47:41 +0000
Subject: [PATCH] =?UTF-8?q?le=20flag=20boucle->statut=20en=20presence=20du?=
 =?UTF-8?q?=20critere=20statut=20est=20generalise=20:=20boucle->modificate?=
 =?UTF-8?q?ur['criteres'][xxx]=20est=20positionn=C3=A9=20a=20true=20pour?=
 =?UTF-8?q?=20chaque=20critere=20xxx=20rencontr=C3=A9=20permet=20aux=20plu?=
 =?UTF-8?q?gins=20de=20faire=20varier=20le=20contenu=20par=20defaut=20des?=
 =?UTF-8?q?=20boucles=20en=20fonction=20des=20criteres?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/boucles.php  | 16 ++++++++--------
 ecrire/public/criteres.php |  5 ++++-
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/ecrire/public/boucles.php b/ecrire/public/boucles.php
index 7141c818f4..aa046b55d2 100644
--- a/ecrire/public/boucles.php
+++ b/ecrire/public/boucles.php
@@ -58,7 +58,7 @@ function boucle_ARTICLES_dist($id_boucle, &$boucles) {
 	$mstatut = $id_table .'.statut';
 
 	// Restreindre aux elements publies
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		if (!$GLOBALS['var_preview']) {
 			$boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
 			if ($GLOBALS['meta']["post_dates"] == 'non')
@@ -80,7 +80,7 @@ function boucle_AUTEURS_dist($id_boucle, &$boucles) {
 	$mstatut = $id_table .'.statut';
 
 	// Restreindre aux elements publies
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		// Si pas de lien avec un article, selectionner
 		// uniquement les auteurs d'un article publie
 		if (!$GLOBALS['var_preview'])
@@ -110,7 +110,7 @@ function boucle_BREVES_dist($id_boucle, &$boucles) {
 	$mstatut = $id_table .'.statut';
 
 	// Restreindre aux elements publies
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		if (!$GLOBALS['var_preview'])
 			$boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
 		else
@@ -137,7 +137,7 @@ function boucle_FORUMS_dist($id_boucle, &$boucles) {
 		$boucle->where[]= array("'='", "'$id_table." ."id_parent'", 0);
 	}
 	// Restreindre aux elements publies
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		if ($GLOBALS['var_preview'])
 			$boucle->where[]= array("'IN'", "'$mstatut'", "'(\"publie\",\"prive\")'");		
 		else
@@ -160,7 +160,7 @@ function boucle_SIGNATURES_dist($id_boucle, &$boucles) {
 	$boucle->from[$id_table] =  "spip_signatures";
 
 	// Restreindre aux elements publies
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		$boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
 	}
 	return calculer_boucle($id_boucle, $boucles); 
@@ -193,7 +193,7 @@ function boucle_RUBRIQUES_dist($id_boucle, &$boucles) {
 	$mstatut = $id_table .'.statut';
 
 	// Restreindre aux elements publies
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		if (!$GLOBALS['var_preview'])
 			if (!isset($boucle->modificateur['tout']))
 				$boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
@@ -244,7 +244,7 @@ function boucle_SYNDICATION_dist($id_boucle, &$boucles) {
 
 	// Restreindre aux elements publies
 
-	if (!$boucle->statut) {
+	if (!$boucle->modificateur['criteres']['statut']) {
 		if (!$GLOBALS['var_preview']) {
 			$boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
 		} else
@@ -264,7 +264,7 @@ function boucle_SYNDIC_ARTICLES_dist($id_boucle, &$boucles) {
 	$mstatut = $id_table .'.statut';
 
 	// Restreindre aux elements publies, sauf critere contraire
-	if ($boucle->statut) {}
+	if ($boucle->modificateur['criteres']['statut']) {}
 	else if ($GLOBALS['var_preview'])
 		$boucle->where[]= array("'IN'", "'$mstatut'", "'(\"publie\",\"prop\")'");
 	else {
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 4f8136a683..7fbe7e88de 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -690,11 +690,14 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 			$table = $calculer_critere_externe($boucle, $boucle->jointures, $col, $desc, ($crit->cond OR $op !='='), $t);
 	  }
 	}
+	// tag du critere pour permettre aux boucles de modifier leurs requetes par defaut en fonction de ca
+	$boucles[$idb]->modificateur['criteres'][$col] = true;
+	
 	// ajout pour le cas special d'une condition sur le champ statut:
 	// il faut alors interdire a la fonction de boucle
 	// de mettre ses propres criteres de statut
 	// http://www.spip.net/@statut (a documenter)
-
+	// garde pour compatibilite avec code des plugins anterieurs, mais redondant avec la ligne precedente
 	if ($col == 'statut') $boucles[$idb]->statut = true;
 
 	// ajout pour le cas spécial des forums
-- 
GitLab