From cdd77100c185126a1727a9df49e441eb2780c5b1 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 21 May 2007 22:50:43 +0000
Subject: [PATCH] "un critere {collecte xx} qui est pris en compte au moment du
 calcul de la boucle dans la clause order Attention : la collecte doit etre
 coherente avec le charset du champ, en particulier il ne doit pas etre
 binaire "

---
 ecrire/public/compiler.php | 14 +++++++++++++-
 ecrire/public/criteres.php | 12 ++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index f8d7fed889..dda410292b 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -312,7 +312,7 @@ function calculer_requete_sql(&$boucle)
 		     ('"' . join(", ", $boucle->group)) . '"') .
 		', # GROUP
 		array(' .
-			join(', ', $order) .
+			calculer_order($boucle) .
 		"), # ORDER
 		" . (strpos($boucle->limit, 'intval') === false ?
 			"'".$boucle->limit."'" :
@@ -357,6 +357,18 @@ function calculer_from(&$boucle)
   return 'array(' . substr($res,1) . ')';
 }
 
+function calculer_order(&$boucle)
+{
+	$order = $boucle->order;
+	if (isset($boucle->modificateur['collate'])){
+		$col = $boucle->modificateur['collate'];
+		$col = ".($col ?' COLLATE '.$col:'')";
+		foreach($order as $k=>$o)
+			$order[$k] .= $col;
+	}
+	return join(', ', $order);
+}
+
 //
 // fonction traitant les criteres {1,n} (analyses dans inc-criteres)
 //
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index afa5aa5c10..9af626e199 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -276,6 +276,18 @@ function critere_fusion_dist($idb,&$boucles, $crit) {
 			"{groupby ?} BOUCLE$idb");
 }
 
+// c'est la commande SQL "COLLATE"
+// qui peut etre appliquee sur les order by, group by, where like ...
+function critere_collecte_dist($idb,&$boucles, $crit) {
+	if (isset($crit->param[0])) {
+		$_coll = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
+		$boucle = $boucles[$idb];
+		$boucle->modificateur['collate'] = $_coll;
+	} else 
+		erreur_squelette(_T('zbug_info_erreur_squelette'),
+			"{collecte ?} BOUCLE$idb");
+}
+
 // http://doc.spip.org/@calculer_critere_arg_dynamique
 function calculer_critere_arg_dynamique($idb, &$boucles, $crit, $suffix='')
 {
-- 
GitLab