From e5d9463bf6ef38bbac08d6eaaf1678bb78e8c15a Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Tue, 18 Jul 2006 15:12:33 +0000
Subject: [PATCH] =?UTF-8?q?La=20recherche=20du=20logo=20associant=20un=20n?=
 =?UTF-8?q?um=C3=A9ro=20et=20un=20type=20(id=5Frubrique,=20id=5Fauteur=20e?=
 =?UTF-8?q?tc)=20=C3=A0=20une=20image=20est=20=C3=A0=20pr=C3=A9sent=20assu?=
 =?UTF-8?q?r=C3=A9e=20par=20fonction=20surchargeable,=20inc=5Fchercher=5Fl?=
 =?UTF-8?q?ogo,=20prise=20en=20compte=20tant=20dans=20l'espace=20priv?=
 =?UTF-8?q?=C3=A9=20que=20dans=20l'espace=20public,=20autrement=20dit=20lo?=
 =?UTF-8?q?rs=20de=20l'ex=C3=A9cution=20d'un=20squelete.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

En standard cette fonction retourne comme auparavant "arton1.gif" pour l'article 1 etc. Toutefois l'harmonisation des appels entre l'espace public et l'espace privé a nécessité une production de squelette avec un code un peu différent, aussi il faudra vider le cache (plus précisément retirer les fichiers CACHE/skel/* si on veut une intervention minimale mais hors interface) pour éviter des erreurs PHP si on exécute d'anciens squelettes compilés. L'intéret d'une surcharge ici est de permettre d'organiser les logos sur des bases radicalement différentes de l'habituelle, non seulement avec des formats autres que ceux signalés par la variable globale formats_logo, mais également avec des logos donnés sous forme d'URL distantes ou de scripts de production d'image à la volée.

Par ricochet, les fonctions gérant la saisie des logos dans l'espace public
(afficher_boite_logo etc) deviennent des filtres utilisables dans des squelettes (elle retournent le code HTML produit au lieu d'en faire un Echo directement).
Cette nouvelle fonctionnalité a amené à couper en 2 le fichier inc/logos,
dont la partie restante est inchangée malgré les apparences, le reste allant
dans le fichier inc/chercher_logo.php, avec un remaniement éliminant les Echo
mais ne changeant pas les balises HTML produites.
---
 ecrire/exec/accueil.php       |   6 +-
 ecrire/exec/ajax_page.php     |   9 +-
 ecrire/exec/articles.php      |   8 +-
 ecrire/exec/auteurs_edit.php  |   4 +-
 ecrire/exec/breves_voir.php   |   8 +-
 ecrire/exec/configuration.php |   8 +-
 ecrire/exec/mots_edit.php     |   8 +-
 ecrire/exec/naviguer.php      |   7 +-
 ecrire/exec/sites.php         |   8 +-
 ecrire/inc/logos.php          | 184 +---------------------------------
 ecrire/inc/presentation.php   |  29 +++---
 ecrire/inc/rubriques.php      |   6 +-
 ecrire/inc/sites_voir.php     |   9 +-
 ecrire/public/balises.php     |   8 +-
 ecrire/public/composer.php    |  20 +---
 15 files changed, 66 insertions(+), 256 deletions(-)

diff --git a/ecrire/exec/accueil.php b/ecrire/exec/accueil.php
index cb02719e7b..ef5209b24a 100644
--- a/ecrire/exec/accueil.php
+++ b/ecrire/exec/accueil.php
@@ -312,9 +312,9 @@ if ($spip_display != 4) {
 	echo debut_cadre_relief("racine-site-24.gif", false, "", $nom_site_spip);
 
 	if ($spip_display != 1) {
-		include_spip('inc/logos');
-		$res = decrire_logo("id_syndic", 'on', 0, 170, 170);
-		if ($res)
+		$logo_f = charger_fonction('chercher_logo', 'inc');
+		if ($res = $logo_f(0, 'id_syndic', 'on'))
+		  if ($res = decrire_logo("id_syndic", 'on', 0, 170, 170; $res))
 			echo  "<div style='text-align:center; margin-bottom: 5px;'>$res</div>";
 	}
 	echo "<div class='verdana1'>";
diff --git a/ecrire/exec/ajax_page.php b/ecrire/exec/ajax_page.php
index bcb92073af..b3a184a875 100644
--- a/ecrire/exec/ajax_page.php
+++ b/ecrire/exec/ajax_page.php
@@ -226,14 +226,11 @@ function ajax_page_aff_info($id, $exclus, $col, $id_ajax_fonc, $type, $rac)
 		echo "<input type='text' id='".$rac."_sel2' value=\"".entites_html($titre)."\" />";
 		echo "</div>";
 
-		include_spip('inc/logos');
-
-
 		echo "<div class='arial2' style='padding: 5px; background-color: white; border: 1px solid $couleur_foncee; border-top: 0px;'>";
 		if ($type == "rubrique" AND $spip_display != 1 AND $spip_display!=4 AND $GLOBALS['meta']['image_process'] != "non") {
-			include_spip('inc/logos');
-			$res = decrire_logo("id_rubrique", 'on', $id, 100, 48);
-			if ($res)
+			$logo_f = charger_fonction('chercher_logo', 'inc');
+			if ($res = $logo_f($id, 'id_rubrique', 'on'))
+			    if ($res = decrire_logo("id_rubrique", 'on', $id, 100, 48, $res))
 				echo  "<div style='float: $spip_lang_right; margin-$spip_lang_right: -5px; margin-top: -5px;'>$res</div>";
 		}
 
diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index 99a1b05260..50e525751c 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -16,7 +16,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/presentation');
 include_spip('inc/texte');
 include_spip('inc/rubriques');
-include_spip('inc/logos');
 include_spip('inc/mots');
 include_spip('inc/date');
 include_spip('inc/documents');
@@ -270,10 +269,11 @@ function boites_de_config_articles($id_article, $id_rubrique, $flag_editable,
 
 // Logos de l'article
 
-	if ($id_article AND $flag_editable AND ($spip_display != 4))
-	  afficher_boite_logo('id_article', $id_article,
+  if ($id_article AND $flag_editable AND ($spip_display != 4)) {
+	  include_spip('inc/chercher_logo');
+	  echo afficher_boite_logo('id_article', $id_article,
 			      _T('logo_article').aide ("logoart"), _T('logo_survol'), 'articles');
-
+  }
 
 //
 // Boites de configuration avancee
diff --git a/ecrire/exec/auteurs_edit.php b/ecrire/exec/auteurs_edit.php
index 16c47f9e58..73c57daaaf 100644
--- a/ecrire/exec/auteurs_edit.php
+++ b/ecrire/exec/auteurs_edit.php
@@ -13,7 +13,6 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/presentation');
-include_spip('inc/logos');
 include_spip('inc/auteur_voir');
 include_spip('inc/message_select');
 
@@ -40,7 +39,8 @@ function exec_auteurs_edit_dist()
 	cadre_auteur_infos($id_auteur, $auteur);
 
 	if (statut_modifiable_auteur($id_auteur, $auteur) AND ($spip_display != 4)) {
-		afficher_boite_logo('id_auteur', $id_auteur,
+		include_spip('inc/chercher_logo');
+		echo afficher_boite_logo('id_auteur', $id_auteur,
 				    _T('logo_auteur').aide ("logoart"), _T('logo_survol'), 'auteurs_edit');
 	}
 
diff --git a/ecrire/exec/breves_voir.php b/ecrire/exec/breves_voir.php
index 1f6c97a567..92039467e9 100644
--- a/ecrire/exec/breves_voir.php
+++ b/ecrire/exec/breves_voir.php
@@ -14,7 +14,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/presentation');
 include_spip('inc/rubriques');
-include_spip('inc/logos');
 include_spip('inc/mots');
 include_spip('inc/date');
 include_spip('base/abstract_sql');
@@ -69,11 +68,12 @@ fin_boite_info();
 // Logos de la breve
 //
 
-if (($spip_display != 4) AND $id_breve>0 AND ($connect_statut == '0minirezo' AND acces_rubrique($id_rubrique)))
-	afficher_boite_logo('id_breve', $id_breve,
+ if (($spip_display != 4) AND $id_breve>0 AND ($connect_statut == '0minirezo' AND acces_rubrique($id_rubrique))) {
+	include_spip('inc/chercher_logo');
+	echo afficher_boite_logo('id_breve', $id_breve,
 			    _T('logo_breve').aide ("breveslogo"),
 			    _T('logo_survol'), 'breves_voir'); 
-
+ }
 
 debut_raccourcis();
 icone_horizontale(_T('icone_nouvelle_breve'), generer_url_ecrire("breves_edit","new=oui&id_rubrique=$id_rubrique"), "breve-24.gif","creer.gif");
diff --git a/ecrire/exec/configuration.php b/ecrire/exec/configuration.php
index 5f4c784955..43befe7153 100644
--- a/ecrire/exec/configuration.php
+++ b/ecrire/exec/configuration.php
@@ -18,7 +18,6 @@ function exec_configuration_dist()
 
 include_spip('inc/presentation');
 include_spip('inc/config');
-include_spip('inc/logos');
 
  if ($connect_statut != '0minirezo') {
 	echo _T('avis_non_acces_page');
@@ -60,9 +59,10 @@ debut_gauche();
 //
 // Le logo de notre site, c'est site{on,off}0.{gif,png,jpg}
 //
-if ($spip_display != 4)
-	afficher_boite_logo('id_syndic', 0, _T('logo_site'), _T('logo_survol'), 'configuration');
-
+ if ($spip_display != 4) {
+	include_spip('inc/chercher_logo');
+	echo afficher_boite_logo('id_syndic', 0, _T('logo_site'), _T('logo_survol'), 'configuration');
+ }
 
 echo pipeline('affiche_gauche',array('args'=>array('exec'=>'configuration'),'data'=>''));
 creer_colonne_droite();
diff --git a/ecrire/exec/mots_edit.php b/ecrire/exec/mots_edit.php
index f360affe45..3462b2d290 100644
--- a/ecrire/exec/mots_edit.php
+++ b/ecrire/exec/mots_edit.php
@@ -13,7 +13,6 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/presentation');
-include_spip('inc/logos');
 include_spip('base/abstract_sql');
 
 function exec_mots_edit_dist()
@@ -139,9 +138,10 @@ if ($id_mot) {
 // Logos du mot-clef
 //
 
-if ($id_mot > 0 AND $connect_statut == '0minirezo'  AND $connect_toutes_rubriques AND ($spip_display != 4))
-  afficher_boite_logo('id_mot', $id_mot, _T('logo_mot_cle').aide("breveslogo"), _T('logo_survol'), 'mots_edit');
-
+ if ($id_mot > 0 AND $connect_statut == '0minirezo'  AND $connect_toutes_rubriques AND ($spip_display != 4)) {
+	include_spip('inc/chercher_logo');
+	echo afficher_boite_logo('id_mot', $id_mot, _T('logo_mot_cle').aide("breveslogo"), _T('logo_survol'), 'mots_edit');
+ }
 
 //
 // Afficher les boutons de creation d'article et de breve
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index 8b7ca96195..2f248693f4 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -16,7 +16,6 @@ include_spip('inc/presentation');
 include_spip('inc/texte');
 include_spip('inc/rubriques');
 include_spip('inc/forum');
-include_spip('inc/logos');
 include_spip('inc/mots');
 include_spip('inc/documents');
 include_spip('base/abstract_sql');
@@ -105,8 +104,10 @@ function exec_naviguer_dist()
 //
 // Logos de la rubrique
 //
-		if ($flag_editable AND ($spip_display != 4)) 
-			afficher_boite_logo('id_rubrique', $id_rubrique, ($id_rubrique ? _T('logo_rubrique') : _T('logo_standard_rubrique'))." ".aide ("rublogo"), _T('logo_survol'), 'naviguer');
+		if ($flag_editable AND ($spip_display != 4)) {
+			include_spip('inc/chercher_logo');
+			echo afficher_boite_logo('id_rubrique', $id_rubrique, ($id_rubrique ? _T('logo_rubrique') : _T('logo_standard_rubrique'))." ".aide ("rublogo"), _T('logo_survol'), 'naviguer');
+		}
 
 //
 // Afficher les boutons de creation d'article et de breve
diff --git a/ecrire/exec/sites.php b/ecrire/exec/sites.php
index cf69c76199..3862a229d9 100644
--- a/ecrire/exec/sites.php
+++ b/ecrire/exec/sites.php
@@ -15,7 +15,6 @@ include_spip('inc/presentation');
 include_spip('inc/sites_voir');
 include_spip('inc/syndic');
 include_spip('inc/rubriques');
-include_spip('inc/logos');
 include_spip('inc/mots');
 include_spip('inc/date');
 include_spip('inc/config');
@@ -254,9 +253,10 @@ echo "<p><center>";
 	icone (_T('icone_voir_sites_references'), generer_url_ecrire("sites_tous",""), "site-24.gif","rien.gif");
 echo "</center>";
 
-if ($id_syndic AND $flag_administrable AND ($spip_display != 4))
-  afficher_boite_logo('id_syndic', $id_syndic, _T('logo_site')." ".aide ("rublogo"), _T('logo_survol'), 'sites');
-
+ if ($id_syndic AND $flag_administrable AND ($spip_display != 4)) {
+	include_spip('inc/chercher_logo');
+	echo afficher_boite_logo('id_syndic', $id_syndic, _T('logo_site')." ".aide ("rublogo"), _T('logo_survol'), 'sites');
+ }
 echo pipeline('affiche_gauche',array('args'=>array('exec'=>'sites','id_syndic'=>$id_syndic),'data'=>''));
 
 creer_colonne_droite();
diff --git a/ecrire/inc/logos.php b/ecrire/inc/logos.php
index c9b9d60835..18b57dd771 100644
--- a/ecrire/inc/logos.php
+++ b/ecrire/inc/logos.php
@@ -12,6 +12,7 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+
 function cherche_image_nommee($nom, $formats = array ('gif', 'jpg', 'png')) {
 
 	if (ereg("^" . _DIR_IMG, $nom)) {
@@ -37,160 +38,6 @@ function cherche_image_nommee($nom, $formats = array ('gif', 'jpg', 'png')) {
 	}
 }
 
-function cherche_logo($id, $type, $mode) {
-	global $formats_logos;
-	# attention au cas $id = '0' pour LOGO_SITE_SPIP : utiliser intval()
-	$nom = $type . $mode . intval($id);
-	foreach ($formats_logos as $format) {
-		if (@file_exists($d = (_DIR_LOGOS . $nom . '.' . $format)))
-			return array($d, _DIR_LOGOS, $nom, $format);
-	}
-	# coherence de type pour servir comme filtre (formulaire_login)
-	return array();
-}
-
-
-function decrire_logo($id_objet, $mode, $id, $width, $height, $titre="", $script="") {
-		
-	$type = $GLOBALS['table_logos'][$id_objet];
-	if (!$img = cherche_logo($id, $type, $mode)) 	return '';
-	list($fid, $dir, $nom, $format) = $img;
-
-	$res = ratio_image($fid, $nom, $format, $width, $height, "alt=''");
-	if (!$titre)
-		return $res;
-	else {
-	  if ($res)
-	    $res = "<div><a href='" .	$fid . "'>$res</a></div>";
-	  else
-	    $res = "<img src='$fid' width='$width' height='$height' alt='" . htmlentities($titre) . "' />";
-	  if ($taille = @getimagesize($fid))
-			$taille = _T('info_largeur_vignette', array('largeur_vignette' => $taille[0], 'hauteur_vignette' => $taille[1]));
-	  return "<p><center>$res" .
-		debut_block_invisible(md5($titre)) .
-		"<font size='1'>" .
-		$taille .
-		"\n<br />[<a href='" .
-		redirige_action_auteur("iconifier", "unlink $nom.$format", $script, "$id_objet=$id") .
-		"'>".
-		_T('lien_supprimer') .
-		"</a>]</font>" .
-		fin_block() .
-		"</center></p>";
-	}
-}
-
-function afficher_boite_logo($id_objet, $id, $texteon, $texteoff, $script) {
-
-	include_spip('inc/session');
-	echo "<p>";
-	debut_cadre_relief("image-24.gif");
-	echo "<div class='verdana1' style='text-align: center;'>";
-	$desc = afficher_logo($texteon, $id_objet, 'on', $id, $script);
-
-	if ($desc AND $texteoff) {
-		echo "<br /><br />";
-		afficher_logo($texteoff, $id_objet, 'off', $id, $script);
-	}
-
-	echo "</div>";
-	fin_cadre_relief();
-	echo "</p>";
-}
-
-global $table_logos;
-
-$table_logos = array( // cf public/composer.php
-		     'id_article' => 'art', 
-		     'id_auteur' => 'aut', 
-		     'id_breve' => 'breve', 
-		     'id_mot' => 'mot', 
-		     'id_syndic'=> 'site',
-		     'id_rubrique' => 'rub'
-		     );
-
-function afficher_logo($titre, $id_objet, $mode, $id, $script) {
-	global $connect_id_auteur;
-
-	echo bouton_block_invisible(md5($titre)), "<b>", $titre, "</b>";
-
-	$logo = decrire_logo($id_objet,$mode,$id, 170, 170, $titre, $script);
-
-	if ($logo) {
-	  echo $logo;
-	}
-	else {
-		$afficher = "";
-		$dir_ftp = determine_upload();
-		if ($dir_ftp
-		AND $fichiers = preg_files($dir_ftp, '[.](gif|jpg|png)$')) {
-			foreach ($fichiers as $f) {
-				$f = substr($f, strlen($dir_ftp));
-				$afficher .= "\n<option value='$f'>$f</option>";
-			}
-		}
-		if (!$afficher) {
-		  if ($dir_ftp) 
-			$afficher = _T('info_installer_images_dossier',
-				array('upload' => '<b>' . $dir_ftp . '</b>'));
-		} else {
-		$afficher = "\n<div style='text-align: left'>" .
-			_T('info_selectionner_fichier',
-				array('upload' => '<b>' . $dir_ftp . '</b>')) .
-			":</div>" .
-			"\n<select name='source' CLASS='forml' size='1'>$afficher\n</select>" .
-			"\n<div align='" .
-			$GLOBALS['spip_lang_right'] .
-			"'><input name='sousaction2' type='submit' value='".
-			_T('bouton_choisir') .
-			"' CLASS='fondo'  style='font-size:9px' /></div>";
-		}
-		$afficher = "\n" .
-			_T('info_telecharger_nouveau_logo') .
-			"<br />" .
-			"\n<input name='image' type='File' class='forml' style='font-size:9px;' size='15'>" .
-			"<div align='" .  $GLOBALS['spip_lang_right'] . "'>" .
-			"\n<input name='sousaction1' type='submit' value='" .
-			_T('bouton_telecharger') .
-			"' class='fondo' style='font-size:9px' /></div>" .
-			$afficher;
-
-		$type = $GLOBALS['table_logos'][$id_objet];
-		echo debut_block_invisible(md5($titre));
-		echo generer_action_auteur('iconifier',
-			"$type$mode$id",
-			generer_url_ecrire($script, "$id_objet=$id"), 
-			$afficher,
-			" method='POST' ENCTYPE='multipart/form-data'");
-		echo fin_block();
-	}
-	return $logo;
-}
-
-
-//
-// Creation automatique d'une vignette
-//
-
-// Calculer le ratio
-function image_ratio ($srcWidth, $srcHeight, $maxWidth, $maxHeight) {
-	$ratioWidth = $srcWidth/$maxWidth;
-	$ratioHeight = $srcHeight/$maxHeight;
-
-	if ($ratioWidth <=1 AND $ratioHeight <=1) {
-		$destWidth = $srcWidth;
-		$destHeight = $srcHeight;
-	} else if ($ratioWidth < $ratioHeight) {
-		$destWidth = $srcWidth/$ratioHeight;
-		$destHeight = $maxHeight;
-	}
-	else {
-		$destWidth = $maxWidth;
-		$destHeight = $srcHeight/$ratioWidth;
-	}
-	return array (ceil($destWidth), ceil($destHeight),
-		max($ratioWidth,$ratioHeight));
-}
 
 function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destfile, $process='AUTO', $force=false, $test_cache_only = false) {
 	global $convert_command, $pnmscale_command;
@@ -231,6 +78,7 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 		if ($srcsize = @getimagesize($image)) {
 			$srcWidth=$srcsize[0];
 			$srcHeight=$srcsize[1];
+			include_spip('inc/chercher_logo');
 			list ($destWidth,$destHeight) = image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight);
 		} else if ($process == 'convert' OR $process == 'imagick') {
 			$destWidth = $maxWidth;
@@ -422,6 +270,7 @@ function recupere_image_originale($image, $format)
 }
 
 
+
 //
 // Retourner taille d'une image
 // pour les filtres |largeur et |hauteur
@@ -464,9 +313,6 @@ function taille_image($img) {
 	return array($srcHeight, $srcWidth);
 }
 
-
-
-
 //
 // Reduire la taille d'un logo
 // [(#LOGO_ARTICLE||reduire_image{100,60})]
@@ -508,6 +354,7 @@ function reduire_image_logo($img, $taille = -1, $taille_y = -1) {
 		// on peut resizer en mode html si on dispose des elements
 		if ($srcw = extraire_attribut($img, 'width')
 		AND $srch = extraire_attribut($img, 'height')) {
+			include_spip('inc/chercher_logo');
 			list($w,$h) = image_ratio($srcw, $srch, $taille, $taille_y);
 			$img = inserer_attribut(
 				inserer_attribut($img, 'width', $w),
@@ -559,6 +406,7 @@ function reduire_image_logo($img, $taille = -1, $taille_y = -1) {
 	if (preg_match(",(.*)\.(jpg|gif|png)$,", $logo, $regs)) {
 		if ($i = cherche_image_nommee($regs[1], array($regs[2]))) {
 			list(,$nom,$format) = $i;
+			include_spip('inc/chercher_logo');
 			return ratio_image($logo, $nom, $format, $taille, $taille_y, $attributs);
 		}
 	}
@@ -567,26 +415,4 @@ function reduire_image_logo($img, $taille = -1, $taille_y = -1) {
 		return "<img src='$logo$date'$attributs />";
 }
 
-function ratio_image($logo, $nom, $format, $taille, $taille_y, $attributs)
-{
-	if (!$taille_origine = @getimagesize($logo)) return '';
-	list ($destWidth,$destHeight, $ratio) = image_ratio($taille_origine[0], $taille_origine[1], $taille, $taille_y);
-
-		// Creer effectivement la vignette reduite
-	$suffixe = '-'.$destWidth.'x'.$destHeight;
-	$preview = creer_vignette($logo, $taille, $taille_y, $format, ('cache'.$suffixe), $nom.$suffixe);
-	if ($preview) {
-			$logo = $preview['fichier'];
-			$destWidth = $preview['width'];
-			$destHeight = $preview['height'];
-	}
-
-		// dans l'espace prive mettre un timestamp sur l'adresse 
-		// de l'image, de facon a tromper le cache du navigateur
-		// quand on fait supprimer/reuploader un logo
-		// (pas de filemtime si SAFE MODE)
-	$date = _DIR_RESTREINT ? '' : ('?date='.@filemtime($logo));
-	return "<img src='$logo$date' width='".$destWidth."' height='".$destHeight."'$attributs />";
-}
-
 ?>
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index 2fd49f5bb1..3bb12e5405 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -501,7 +501,6 @@ function affiche_tranche_bandeau($requete, $icone, $col, $fg, $bg, $tmp_var, $de
 	global $spip_display ;
 
 	$voir_logo = ($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non");
-	if ($voir_logo) include_spip('inc/logos');
 
 	$tous_id = array();
 
@@ -791,7 +790,6 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 		
 	$voir_logo = ($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non");
 		
-	if ($voir_logo) include_spip('inc/logos');
 
 	//echo "<table width='100%' cellpadding='2' cellspacing='0' border='0'>";
 	echo afficher_liste_debut_tableau(), str_replace("::id_ajax_fonc::", $id_ajax_fonc, $tranches);
@@ -890,11 +888,10 @@ function afficher_articles_boucle($row, &$tous_id, $afficher_auteurs, $afficher_
 		"'$descriptif$dir_lang style=\"display:block;\">";
 
 	if ($voir_logo) {
-
-		include_spip('inc/logos');
-		$logo = decrire_logo("id_article", 'on', $id_article, 26, 20);
-		if ($logo)
-			$s .= "<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</div>";
+		$logo_f = charger_fonction('chercher_logo', 'inc');
+		if ($logo = $logo_f($id_article, 'id_article', 'on'))
+			if ($logo = decrire_logo("id_article", 'on', $id_article, 26, 20, $logo))
+				$s .= "<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</div>";
 	}
 
 	$s .= typo($titre);
@@ -1179,11 +1176,10 @@ function afficher_breves_boucle($row, &$tous_id,  $voir_logo, $own)
 	$s .= "<a href='" . generer_url_ecrire("breves_voir","id_breve=$id_breve") . "' style=\"display:block;\">";
 
 	if ($voir_logo) {
-
-		include_spip('inc/logos');
-		$logo = decrire_logo("id_breve", 'on', $id_breve, 26, 20);
-		if ($logo)
-			$s .= "<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</div>";
+		$logo_f = charger_fonction('chercher_logo', 'inc');
+		if ($logo = $logo_f($id_breve, 'id_breve', 'on'))
+			if ($logo = decrire_logo("id_breve", 'on', $id_breve, 26, 20))
+				$s .= "<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</div>";
 	}
 
 	$s .= typo($titre);
@@ -1418,7 +1414,6 @@ function afficher_forum_thread($row, $controle_id_article, $compteur_forum, $nb_
 		$voir_logo = (($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non") ? 
 		      "position: absolute; $spip_lang_right: 0px; margin: 0px; margin-top: -3px; margin-$spip_lang_right: 0px;" 
 		      : '');
-		if ($voir_logo) include_spip('inc/logos');
 	}
 
 	$id_forum=$row['id_forum'];
@@ -1446,10 +1441,10 @@ function afficher_forum_thread($row, $controle_id_article, $compteur_forum, $nb_
 	}
 	$titre_boite = '';
 	if ($id_auteur AND $voir_logo) {
-		include_spip('inc/logos');
-		$titre_boite = decrire_logo("id_auteur", 'on', $id_auteur, 48, 48);
-		if ($titre_boite)
-			$titre_boite = "<div style='$voir_logo'>$titre_boite</div>" ;
+		$logo_f = charger_fonction('chercher_logo', 'inc');
+		if ($logo = $logo_f($id_auteur, 'id_auteur', 'on'))
+			if ($logo = decrire_logo("id_auteur", 'on', $id_auteur, 48, 48))
+			    $titre_boite = "<div style='$voir_logo'>$$logo</div>" ;
 	} 
 
 	$titre_boite .= typo($titre);
diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php
index e18b185e76..fc2c7e89a0 100644
--- a/ecrire/inc/rubriques.php
+++ b/ecrire/inc/rubriques.php
@@ -229,7 +229,7 @@ function enfant_rub($collection){
 		
 	if ($voir_logo) {
 		$voir_logo = "float: $spip_lang_right; margin-$spip_lang_right: -6px; margin-top: -6px;";
-		include_spip('inc/logos');
+		$logo_f = charger_fonction('chercher_logo', 'inc');
 	}
 
 	$les_enfants = "";
@@ -250,8 +250,8 @@ function enfant_rub($collection){
 		if ($spip_display == 4) $les_enfants .= "<li>";
 
 		if ($voir_logo) {
-			$logo = decrire_logo("id_rubrique", 'on', $id_rubrique, 48, 36);
-			if ($logo)
+			if ($logo = $logo_f($id_rubrique, $id_rubrique, 'on'))
+				if ($logo = decrire_logo("id_rubrique", 'on', $id_rubrique, 48, 36))
 				$logo =  "<div style='$voir_logo'>$logo</div>";
 		}
 		$les_enfants .= "<div class='enfants'>" .
diff --git a/ecrire/inc/sites_voir.php b/ecrire/inc/sites_voir.php
index bf0f441647..32c87cdc95 100644
--- a/ecrire/inc/sites_voir.php
+++ b/ecrire/inc/sites_voir.php
@@ -69,11 +69,10 @@ function afficher_sites_boucle($row, &$tous_id, $voir_logo, $bof)
 	$s = "<a href=\"".generer_url_ecrire("sites","id_syndic=$id_syndic")."\" title=\"$title\">";
 
 	if ($voir_logo) {
-
-		include_spip('inc/logos');
-		$logo = decrire_logo("id_syndic", 'on', $id_syndic, 26, 20);
-		if ($logo)
-			$s .= "<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</div>";
+		$logo_f = charger_fonction('chercher_logo', 'inc');
+		if ($logo = $logo_f($id_syndic, $id_syndic, 'on'))
+			if ($logo = decrire_logo("id_syndic", 'on', $id_syndic, 26, 20))
+				$s .= "<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</div>";
 	}
 
 	$s .= http_img_pack($puce, $statut, "width='7' height='7'") ."&nbsp;&nbsp;";
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index c8ede87e8d..d7a1d4e082 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -648,11 +648,13 @@ function calculer_balise_logo ($p) {
 		$type_objet = 'SITE';
 		$suite_logo = $regs[1];
 		$_id_objet = "\"'0'\"";
+		$id_objet = 'id_syndic'; # parait faux mais donne bien "siteNN"
 	} else {
 		if ($type_objet == 'SITE')
-			$_id_objet = champ_sql("id_syndic", $p);
+			$id_objet = "id_syndic";
 		else
-			$_id_objet = champ_sql("id_".strtolower($type_objet), $p);
+			$id_objet = "id_".strtolower($type_objet);
+		$_id_objet = champ_sql($id_objet, $p);
 	}
 
 	// analyser les faux filtres
@@ -739,7 +741,7 @@ function calculer_balise_logo ($p) {
 			."')";
 	}
 	else {
-		$p->code = "affiche_logos(calcule_logo('$type_objet', '" .
+		$p->code = "affiche_logos(calcule_logo('$id_objet', '" .
 			(($suite_logo == '_SURVOL') ? 'off' : 
 			(($suite_logo == '_NORMAL') ? 'on' : 'ON')) .
 			"', $_id_objet," .
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 721fd3b265..60f96cbeb4 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -141,35 +141,25 @@ function affiche_logos($logos, $lien, $align) {
 //
 
 function calcule_logo($type, $onoff, $id, $id_rubrique, $ff) {
-	include_spip('inc/logos');
-
-	$table_logos = array (
-	'ARTICLE' => 'art',
-	'AUTEUR' =>  'aut',
-	'BREVE' =>  'breve',
-	'MOT' => 'mot',
-	'RUBRIQUE' => 'rub',
-	'SITE' => 'site'
-	);
-	$type = $table_logos[$type];
+	$logo_f = charger_fonction('chercher_logo', 'inc');
 	$nom = strtolower($onoff);
 
 	while (1) {
-		$on = cherche_logo($id, $type, $nom);
+		$on = $logo_f($id, $type, $nom);
 		if ($on) {
 			if ($ff)
 			  return  (array('', "$on[2].$on[3]"));
 			else {
 				$off = ($onoff != 'ON') ? '' :
-				  cherche_logo($id, $type, 'off');
+				  $logo_f($id, $type, 'off');
 				return array ($on[0], ($off ? $off[0] : ''));
 			}
 		}
 		else if ($id_rubrique) {
-			$type = 'rub';
+			$type = 'id_rubrique';
 			$id = $id_rubrique;
 			$id_rubrique = 0;
-		} else if ($id AND $type == 'rub')
+		} else if ($id AND $type == 'id_rubrique')
 			$id = sql_parent($id);
 		else return array('','');
 	}
-- 
GitLab