From ae58d4157b1e06e30c7505a8f86e3161dba5b3a4 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Fri, 11 Mar 2022 11:03:22 +0100
Subject: [PATCH] Fix #4857 : on utilise un filtre (surchargeable) et un define
 pour determiner le comportement autolien des images, ce qui donne toute
 latitude de personalisation (en fonction du media, de l'extension, de la
 taille voir du id_document eventuellement fourni)

(cherry picked from commit 7ca969c7683e3ab8088002a939f8055f8ea374fb)
---
 medias_fonctions.php       | 23 +++++++++++++++++++++++
 modeles/image.html         |  2 +-
 modeles/image_emb_svg.html |  2 +-
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/medias_fonctions.php b/medias_fonctions.php
index 2f9ba73a..08bc2943 100644
--- a/medias_fonctions.php
+++ b/medias_fonctions.php
@@ -412,6 +412,29 @@ function medias_trouver_modele_emb($extension, $mime_type, $modele_base = 'file'
 	return $modele_base;
 }
 
+/**
+ * Determiner si un media doit etre mis en autolien dans les modeles document
+ * Par defaut utilisé uniquement sur les media image, mais le filtre peut être surchargé pour étendre son fonctionnement
+ *
+ * @param string $media
+ * @param string $extension
+ * @param int $largeur
+ * @param int $hauteur
+ * @param int|null $id_document
+ * @return bool
+ */
+function media_determine_autolien(string $media, string $extension, int $largeur, int $hauteur, ?int $id_document=0): bool {
+	if ($media !== 'image') {
+		return false;
+	}
+	if (!defined('_IMAGE_TAILLE_MINI_AUTOLIEN')) {
+		define('_IMAGE_TAILLE_AUTOLIEN', 800);
+	}
+	if ($largeur >= _IMAGE_TAILLE_AUTOLIEN or $hauteur >=_IMAGE_TAILLE_AUTOLIEN) {
+		return true;
+	}
+	return false;
+}
 
 /**
  * Liste les classes standards des modèles de documents SPIP.
diff --git a/modeles/image.html b/modeles/image.html
index f79fadc1..2adc2171 100644
--- a/modeles/image.html
+++ b/modeles/image.html
@@ -4,7 +4,7 @@
 
 ]
 <BOUCLE_image (DOCUMENTS) {media=image} {id_document=#ENV{id,#ENV{id_document}}} {inclus=image} {mode?} {tout}>
-[(#SET{autolien,#LARGEUR|>={800}|ou{#HAUTEUR|>={800}}|oui})]
+[(#SET{autolien,#MEDIA|media_determine_autolien{#EXTENSION,#LARGEUR,#HAUTEUR,#ID_DOCUMENT}|oui})]
 [(#SET{image,[(#ENV{largeur}|ou{#ENV{hauteur}}|?{
 		[(#FICHIER|image_reduire{#ENV{largeur,10000},#ENV{hauteur,10000}})],
 		[<img src='(#URL_DOCUMENT)'[ width="(#LARGEUR)"][ height="(#HAUTEUR)"]/>]})]})]
diff --git a/modeles/image_emb_svg.html b/modeles/image_emb_svg.html
index 274e6e97..2999d54a 100644
--- a/modeles/image_emb_svg.html
+++ b/modeles/image_emb_svg.html
@@ -4,7 +4,7 @@
 
 ]
 <BOUCLE_image (DOCUMENTS) {media=image} {id_document=#ENV{id,#ENV{id_document}}} {inclus=image} {mode?} {tout} {extension=svg}>
-[(#SET{autolien,#LARGEUR|>={800}|ou{#HAUTEUR|>={800}}|oui})]
+[(#SET{autolien,#MEDIA|media_determine_autolien{#EXTENSION,#LARGEUR,#HAUTEUR,#ID_DOCUMENT}|oui})]
 [(#SET{image,[(#ENV{largeur}|ou{#ENV{hauteur}}|?{
 		[(#FICHIER|image_reduire{#ENV{largeur,10000},#ENV{hauteur,10000}}|extraire_attribut{src})],
 		[(#FICHIER)]})]})]
-- 
GitLab