From e7e19c496607b69ee6840acd5a0defb39c9a3496 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 16 May 2005 06:49:06 +0000
Subject: [PATCH] =?UTF-8?q?Reprise=20de=20#LOGO=5FDOCUMENT,=20qui=20avait?=
 =?UTF-8?q?=20tendance=20=C3=A0=20flancher=20dans=20des=20=C3=A9critures?=
 =?UTF-8?q?=20compliqu=C3=A9es=20[(#LOGO=5FDOCUMENT{30}|#URL=5FDOCUMENT)]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_filtres.php3 | 24 +++++++++++++--
 inc-balises.php3        | 48 +++++++++++++++++-------------
 inc-calcul-outils.php3  | 65 +++++++++++++++++++++++++++++------------
 3 files changed, 95 insertions(+), 42 deletions(-)

diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 685655aa1c..4d6f82467c 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -762,8 +762,18 @@ function copie_locale($source, $mode='auto') {
 		OR $mode=='force') {
 			include_ecrire('inc_sites.php3');
 			$contenu = recuperer_page($source);
-			if ($contenu)
+			if ($contenu) {
 				ecrire_fichier($local, $contenu);
+
+				// signaler au moteur de recherche qu'il peut reindexer ce doc
+				$a = spip_query("SELECT id_document FROM spip_documents
+					WHERE fichier='".addslashes($source)."'");
+				list($id_document) = spip_fetch_array($a);
+				if ($id_document) {
+					include_ecrire('inc_index.php3');
+					marquer_indexer('document', $id_document);
+				}
+			}
 			else
 				return false;
 		}
@@ -931,11 +941,19 @@ function inserer_attribut($balise, $attribut, $val, $texte_backend=true) {
 	$insert = " $attribut=\"".entites_html(texte_backend($val))."\" ";
 
 	list($old,$r) = extraire_attribut($balise, $attribut, true);
+
 	if ($old !== NULL) {
+		// Remplacer l'ancien attribut du meme nom
 		$balise = $r[1].$insert.$r[5];
 	}
-	else
-		$balise = preg_replace(",([[:space:]]/)?".">,", $insert."/>", $balise);
+	else {
+		// preferer une balise " />" (comme <img />)
+		if (preg_match(',[[:space:]]/>,', $balise))
+			$balise = preg_replace(",[[:space:]]/>,", $insert."/>", $balise, 1);
+		// sinon une balise <a ...> ... </a>
+		else
+			$balise = preg_replace(",>,", $insert.">", $balise, 1);
+	}
 
 	return $balise;
 }
diff --git a/inc-balises.php3 b/inc-balises.php3
index 3af65dabd0..08f21e2254 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -542,25 +542,31 @@ function calculer_balise_logo ($p) {
 	$filtres = '';
 	if (is_array($p->fonctions)) {
 		foreach($p->fonctions as $couple) {
-		// eliminer les faux filtres
-		  if (!$flag_stop) array_shift($p->filtres);
-		  $nom = $couple[0];
-			if (ereg('^(left|right|center|top|bottom)$', $nom))
-				$align = $nom;
-			else if ($nom == 'lien') {
-				$flag_lien_auto = 'oui';
-				$flag_stop = true;
-			}
-			else if ($nom == 'fichier') {
-				$flag_fichier = 1;
-				$flag_stop = true;
-			}
-			// double || signifie "on passe aux filtres"
-			else if ($nom == '')
-				$flag_stop = true;
-			else if (!$flag_stop) {
-				$lien = $nom;
-				$flag_stop = true;
+			// eliminer les faux filtres
+			if (!$flag_stop) {
+				array_shift($p->filtres);
+				$nom = $couple[0];
+				if (ereg('^(left|right|center|top|bottom)$', $nom))
+					$align = $nom;
+				else if ($nom == 'lien') {
+					$flag_lien_auto = 'oui';
+					$flag_stop = true;
+				}
+				else if ($nom == 'fichier') {
+					$flag_fichier = 1;
+					$flag_stop = true;
+				}
+				// double || signifie "on passe aux filtres"
+				else if ($nom == '') {
+					if (!$params = $couple[1])
+						$flag_stop = true;
+				}
+				else if ($nom) {
+					$lien = $nom;
+					$flag_stop = true;
+				} else {
+					
+				}
 			}
 			// apres un URL ou || ou |fichier ce sont
 			// des filtres (sauf left...lien...fichier)
@@ -590,7 +596,7 @@ function calculer_balise_logo ($p) {
 	}
 
 	if ($flag_fichier)
-	  $code_lien = "'',''" ; 
+		$code_lien = "'',''" ; 
 	else {
 		if (!$code_lien)
 			$code_lien = "''";
@@ -603,7 +609,7 @@ function calculer_balise_logo ($p) {
 			$p->descr['documents'] .
 			'\', $doublons, '. intval($flag_fichier).", $code_lien, '".
 			// #LOGO_DOCUMENT{x,y} donne la taille maxi
-			texte_script(param_balise($p))
+			texte_script($params)
 			."')";
 	}
 	else {
diff --git a/inc-calcul-outils.php3 b/inc-calcul-outils.php3
index 55360ce3db..81967c46e2 100644
--- a/inc-calcul-outils.php3
+++ b/inc-calcul-outils.php3
@@ -252,7 +252,7 @@ function calcul_branche ($generation) {
 }
 
 // fonction appelee par la balise #LOGO_DOCUMENT
-function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier, $params, $lien, $align) {
+function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier, $lien, $align, $params) {
 	if (!$id_document) return '';
 	if ($doubdoc) $doublons["documents"] .= ','.$id_document;
 
@@ -276,9 +276,23 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier
 		}
 	} else if ($mode == 'vignette') {
 		$logo = generer_url_document($id_document);
+		if (!@file_exists($logo))
+			$logo = '';
 	}
 
-	if (!$logo) {
+	// taille maximum [(#LOGO_DOCUMENT{300,52})]
+	list($x,$y) = split(',', ereg_replace("[\{\}]", "", $params)); 
+
+
+	if ($logo AND @file_exists($logo)) {
+		if ($x OR $y)
+			$logo = reduire_image($logo, $x, $y);
+		else {
+			$size = @getimagesize($logo);
+			$logo = "<img src='$logo' ".$size[3]." />";
+		}
+	}
+	else {
 		// Retrouver l'extension
 		list($extension) =
 			spip_abstract_fetch(spip_abstract_select(array('extension'),
@@ -287,32 +301,47 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier
 		if (!$extension) $extension = 'txt';
 
 		// Pas de vignette, mais un fichier image -- creer la vignette
-		if (strstr(lire_meta('formats_graphiques'), $extension)
-		AND lire_meta('creer_preview') == 'oui') {
-			if ($img = copie_locale($fichier)) {
-				// taille maximum [(#LOGO_DOCUMENT{300,52})]
-				list($x,$y) = split(',', ereg_replace("[\{\}]", "", $params)); 
-				$lien_logo = reduire_image($img, $x, $y);
-				$logo = extraire_attribut($lien_logo, 'src');
-				if ($lien)
-					$lien_logo = "<a href=\"$lien\">$lien_logo</a>";
+		if (strstr(lire_meta('formats_graphiques'), $extension)) {
+			if ($img = copie_locale($fichier)
+			AND @file_exists($img)) {
+				if (!$x AND !$y) {
+					$logo = reduire_image($img);
+				} else {
+					# eviter une double reduction
+					$size = @getimagesize($img);
+					$logo = "<img src='$img' ".$size[3]." />";
+				}
 			}
 		}
 
 		// Document sans vignette ni image : vignette par defaut
-		if (!$logo)
-			$logo = vignette_par_defaut($extension, false);
+		if (!$logo) {
+			$img = vignette_par_defaut($extension, false);
+			$size = @getimagesize($img);
+			$logo = "<img src='$img' ".$size[3]." />";
+		}
 	}
 
+	// Reduire si une taille precise est demandee
+	if ($x OR $y)
+		$logo = reduire_image($logo, $x, $y);
+
 	// flag_fichier : seul le fichier est demande
 	if ($flag_fichier)
-		return calcule_fichier_logo($logo); # supprimer le IMG/
+		# supprimer le IMG/
+		return calcule_fichier_logo(extraire_attribut($lien_logo, 'src'));
+
+	// Calculer le code html complet (cf. calcule_logo)
+	$logo = inserer_attribut($logo, 'alt', '');
+	$logo = inserer_attribut($logo, 'style', 'border-width: 0px;');
+	$logo = inserer_attribut($logo, 'class', 'spip_logos');
+	if ($align)
+		$logo = inserer_attribut($logo, 'align', $align);
 
-	// sinon calculer le code html de l'image, sauf si reduire_image le donne
-	if (!$lien_logo)
-		$lien_logo = affiche_logos(array($logo), $lien, $align);
+	if ($lien)
+		$logo = "<a href='$lien'>$logo</a>";
 
-	return $lien_logo;
+	return $logo;
 }
 
 
-- 
GitLab