Project

General

Profile

Anomalie #3799

appliquer_filtre ne s'applique pas aux filtres image_

Added by RealET 🔸 about 3 years ago. Updated over 2 years ago.

Status:
Nouveau
Priority:
Haut
Assignee:
-
Category:
filtres et balises
Target version:
Start date:
06/30/2016
Due date:
% Done:

0%

Resolution:
Navigateur:

Description

Bonjour,

En lisant le code de ecrire/inc/filtres.php, j'ai constaté :
  • que appliquer_filtre n'utilise que chercher_filtre
  • que chercher_filtre ne gère pas le cas des filtres image_...
  • que c'est filtrer qui commence par regarder si le nom du filtre commence par image_ et qui dans ce cas là applique image_filtrer
  • et qu'enfin, la doc de appliquer filtre parle pas de force=true qui est documenté dans le code, mais dont le code fait exactement le contraire de la doc (il faut passer true pour que si le filtre n'est pas disponible le traitement puissent continuer de manière transparente)
Donc, il faudrait :
  • corriger la doc (puisque du code sur la zone s'appuie déjà sur le fonctionnement)
  • corriger appliquer_filtre afin qu'il fonctionne aussi sur les filtres d'images

appliquer_filtre_historique.patch View - Une possibilité pour appliquer_filtre() (6.11 KB) marcimat 🌈, 02/10/2017 12:18 AM

History

#1 Updated by RealET 🔸 about 3 years ago

Au cas où, pour tester, je fais ça avec le plugin smush http://www.mediaspip.net/documentation/les-plugins-developpes-pour-mediaspip/article/smush-optimisation-des-images

  • |image_smush provoque une message d'erreur de filtre non trouvé si le plugin n'est pas là
  • |appliquer_filtre{image_smush,true} provoque une fin de calcul pure et simple au réafichage d'une page déjà en cache

#2 Updated by RealET 🔸 about 3 years ago

J'avais oublié le lien vers la doc : http://www.spip.net/fr_article5068.html#appliquer_filtre

#3 Updated by marcimat 🌈 over 2 years ago

C'est quoi le problème et pourquoi ne pas utiliser du coup |filtrer directement ?
pourquoi y aurait-il 2 fonctions qui font la même chose en fait ?

#4 Updated by marcimat 🌈 over 2 years ago

PHPDoc corrigé par r23408

#6 Updated by RealET 🔸 over 2 years ago

marcimat ???? a écrit :

C'est quoi le problème et pourquoi ne pas utiliser du coup |filtrer directement ?

Le problème, c'est que appliquer_filtre utilisant un filtre d'image fourni par un plugin fait une page blanche si le plugin n'est pas installé.
cf : #3799#note-1

pourquoi y aurait-il 2 fonctions qui font la même chose en fait ?

|filtrer n'est pas documentée sur http://www.spip.net/@?lang=fr

Alors que http://www.spip.net/fr_article5068.html#appliquer_filtre l'est (mal, il manque le paramètre true)

#7 Updated by marcimat 🌈 over 2 years ago

Bon donc il y a une erreur en plus avec la 3è option (heureusement pas documentée).
Effectivement lors d'un appel avec : `[(#BALISE|appliquer_filtre{fonction_specifique, param1, param2})]`
alors si la "fonction_specifique" n'est pas présente, le contenu de `#BALISE` sera retourné, alors que
ce n'est pas ce que prévoit la fonction à la base (ie elle devrait retourner '').

Je propose d'introduire `appliquer_si_filtre()` pour l'usage qui retournerait systématiquement le contenu entrant si le filtre n'est pas trouvé.

Par ailleurs `filtrer` lève une erreur de squelettes si le filtre est absent. C'est donc un usage effectivement différent.

#8 Updated by marcimat 🌈 over 2 years ago

  • Target version changed from 3.1 to 3.2

#9 Updated by RealET 🔸 over 2 years ago

J'oubliais : l'intention de |appliquer_filtre, c'est de permettre de faire du progressive enchancement dans un squelette distribué en plugin :
  • si le filtre demandé (généralement fourni par un autre plugin) n'est pas là, ça ne casse rien
  • si le filtre demandé est là, alors ça améliore le résultat final

Et ça, je trouve ça génial comme intention !

#10 Updated by marcimat 🌈 over 2 years ago

L'intention que tu cites n'était peut être pas forcément le but de la fonction appliquer_filtre() à l'origine.

Bon, j'ai un problème. Comme je disais en #note-7 il y a un bug sur appliquer filtre et l'option qui avait été ajoutée en r71781.

En plein dans le bug

Il y a un cas intéressant sur la zone dans SarkaSPIP, parmi d'autres :

[(#ENV{id_rubrique}|appliquer_filtre{accesrestreint_rubrique_restreinte,0}|oui) #SET{retour_logout, #URL_PAGE{sommaire}}]

function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur = null) {

Le zéro passé en second paramètre, on ne sait pas s'il était
- à destination de appliquer_filtre() pour éviter absolument qu'il retourne la valeur id_rubrique SI accès restreint est absent, ou s'il était
- à destination de accesrestreint_rubrique_restreinte() pour indiquer l'auteur 0 (ce qui est peu probable)
Et du coup, ça casse le fonctionnement de accesrestreint_rubrique_restreinte() car ça ne prend pas en compte le visiteur courant car $id_auteur ne vaut plus null

À d'autres endroits au contraire, par exemple dans Emballe Medias, on trouve :

[(#INCLURE{javascript/jquery.shiftcheckbox.js}|appliquer_filtre{minifier,js})]

Ici, la présence de l'option 'js' fait que appliquer_filtre va comprendre qu'il doit toujours retourner le contenu d'origine même en absence du filtre.
C'est d'ailleurs très certainement ce qui est souhaité ici. Sauf que ce n'est pas voulu explicitement a priori.

On trouve aussi un usage avec |sinon :

["geometry": (#GEOMETRY|appliquer_filtre{wkt_to_json}|sinon{{"type": "Point", "coordinates": \[#LON, #LAT\]}}),]

Corrections de appliquer_filtre en créant une seconde fonction ?

Ces 2 derniers exemples montrent que quelque soit l'option choisie pour corriger on va casser des usages (en créant une seconde fonction pour faire l'inverse), ie :

Option Historique)
- T|appliquer_filtre{F} retourne '' si F introuvable
- T|appliquer_filtre_ou_continuer retourne T si F introuvable

Option Chaînage)
- T|appliquer_filtre{F} retourne T si F introuvable
- T|appliquer_filtre_sinon_rien{F} retourne '' si F introuvable

Ou déprécier appliquer_filtre()

Une autre solution est de créer 2 nouvelles fonctions pour remplacer appliquer_filtre et son fonctionnement incertain.
Contrainte : elles ne doivent pas commencer par filtre_.
- T|utiliser_filtre{F} retourne T si F introuvable (chaînage)
- T|utiliser_filtre_sinon_rien{F} retourne '' si F introuvable

C'est peut être une solution acceptable. On aurait du être plus vigilent en introduisant une nouvelle fonction plutôt qu'un paramètre en plus à appliquer_filtre() alors que celle ci utilise func_get_args…

#11 Updated by marcimat 🌈 over 2 years ago

Un petit patch avec l'option Historique + la gestion des filtres d'images dans appliquer_filtre().
Juste pour pas le perdre.

#12 Updated by marcimat 🌈 over 2 years ago

J'ai introduit un morceau du patch là : https://core.spip.net/projects/spip/repository/revisions/23423
La fonction "trouver_filtre_matrice()".
(note : ça ne corrige en rien ce ticket).

Also available in: Atom PDF