From 22a57c6479aef373f1fc8461c08c0ec75659329b Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Sun, 16 Mar 2008 19:31:00 +0000
Subject: [PATCH] complement de [11315] - des quotes en trop, definir la
 matrice pour les filtres couleur_xx aussi - gerer les exceptions dans filtrer
 et non plus dans le compilateur - lorsqu'il ne s'agit pas d'un filtre image,
 se rabattre sur chercher_filtre par homogeneite avec le compilateur, et
 retourner une erreur skel si pas trouve

---
 ecrire/inc/filtres.php       | 26 +++++++++++++++++++++-----
 ecrire/public/references.php |  3 +--
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 501aeec772..91221ad2bb 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -165,6 +165,7 @@ function version_svn_courante($dir) {
 // La matrice est necessaire pour ne filtrer _que_ des fonctions definies dans filtres_images
 // et laisser passer les fonctions personnelles baptisees image_...
 $GLOBALS['spip_matrice']['image_valeurs_trans'] = true;
+$GLOBALS['spip_matrice']['image_graver'] = true;
 $GLOBALS['spip_matrice']['image_reduire'] = true;
 $GLOBALS['spip_matrice']['image_reduire_par'] = true;
 $GLOBALS['spip_matrice']['image_recadre'] = true;
@@ -189,16 +190,30 @@ $GLOBALS['spip_matrice']['image_imagick'] = true;
 $GLOBALS['spip_matrice']['image_ramasse_miettes'] = true;
 $GLOBALS['spip_matrice']['image_passe_partout'] = true;
 
+$GLOBALS['spip_matrice']['couleur_dec_to_hex'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_hex_to_dec'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_extreme'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_inverser'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_eclaircir'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_foncer'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_foncer_si_claire'] = 'inc/filtres_images.php';
+$GLOBALS['spip_matrice']['couleur_eclaircir_si_foncee'] = 'inc/filtres_images.php';
+
 // charge les fonctions graphiques et applique celle demandee
 // http://doc.spip.org/@filtrer
 function filtrer($filtre) {
-	find_in_path('filtres_images.php', 'inc/', true);
+	if (is_string($f = $GLOBALS['spip_matrice'][$filtre]))
+		find_in_path($f,'', true);
 	$tous = func_get_args();
-	if (substr($filtre,0,6)=='image_' && $GLOBALS['spip_matrice']['$filtre'])
+	if (substr($filtre,0,6)=='image_' && $GLOBALS['spip_matrice'][$filtre])
 		return image_filtrer($tous);
-	else{
-		array_shift($tous); # enlever $filtre
-		return call_user_func_array($filtre, $tous);
+	elseif($f = chercher_filtre($filtre)) {
+		array_shift($tous);
+		return call_user_func_array($f, $tous);
+	}
+	else {
+		// le filtre n'existe pas, on provoque une erreur
+		erreur_squelette(texte_script(_T('zbug_erreur_filtre', array('filtre'=>$filtre))),'');
 	}
 }
 
@@ -213,6 +228,7 @@ function image_filtrer($args){
 	$filtre = array_shift($args); # enlever $filtre
 	$texte = array_shift($args);
 	if (!$texte) return;
+	find_in_path('filtres_images.php','inc/', true);
 
 	// Cas du nom de fichier local
 	if ( strpos(substr($texte,strlen(_DIR_RACINE)),'..')===FALSE
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index cf5a466137..fc48e1fbdb 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -424,7 +424,6 @@ function applique_filtres($p) {
 // http://doc.spip.org/@compose_filtres
 function compose_filtres(&$p, $code) {
 	global $table_criteres_infixes;
-	static $exceptions = array('image_typo');
 
 	$image_miette = false;
 	foreach($p->param as $filtre) {
@@ -451,7 +450,7 @@ function compose_filtres(&$p, $code) {
 			if (in_array($fonc, $table_criteres_infixes))
 				$code = "($code $fonc " . substr($arglist,1) . ')';
 
-			elseif (((substr($fonc,0,6)=='image_') OR substr($fonc,0,8)=='couleur_') AND !in_array($fonc, $exceptions)) {
+			elseif (isset($GLOBALS['spip_matrice'][$fonc])) {
 				$code = "filtrer('$fonc',$code$arglist)";
 				if ($is_filtre_image) $image_miette = true;
 			}
-- 
GitLab