Valider dcd3cd4e rédigé par esj's avatar esj
Parcourir les fichiers

Dans le cas du lien automatique sur la balise LOGO_DOCUMENT, se rabattrre sur...

Dans le cas du lien automatique sur la balise LOGO_DOCUMENT, se rabattrre sur generer_generer_url, car elle peut porter sur une base externe. Le logo lui-même ne sera pas forcément l'image qu'on est en droit d'espérer, mais au moins le lien sera bon et on n'aura plus le message 'Table DOCUMENTs inconnue' dans spip_log. Et un peu de ménage dans les faux filtres de ces balises pour y voir clair.
parent 3cfba94f
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+64 −73
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,29 +21,28 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
function balise_LOGO__dist ($p) {

	preg_match(",^LOGO_([A-Z]+)(_.*)?$,i", $p->nom_champ, $regs);
	$type_objet = $regs[1];
	$type_objet = strtolower($regs[1]);
	$suite_logo = @$regs[2];	

	// cas de #LOGO_SITE_SPIP
	if (preg_match(",^_SPIP(.*)$,", $suite_logo, $regs)) {
		$type_objet = 'SITE';
		$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')
		if ($type_objet == 'site')
			$id_objet = "id_syndic";
		else
			$id_objet = "id_".strtolower($type_objet);
			$id_objet = "id_". $type_objet;
		$_id_objet = champ_sql($id_objet, $p);
	}

	// analyser les faux filtres
	$flag_fichier = $flag_stop = $flag_lien_auto = $code_lien = $filtres = $align = $lien = $params = '';
	$flag_fichier = $align = $lien = $params = '';

	if (is_array($p->fonctions)) {
		foreach($p->fonctions as $couple) {
			if (!$flag_stop) {
			$nom = trim($couple[0]);

			// double || signifie "on passe aux vrais filtres"
@@ -51,79 +50,56 @@ function balise_LOGO__dist ($p) {
				if ($couple[1]) {
					$params = $couple[1]; // recuperer #LOGO_DOCUMENT{20,30}
					array_shift($p->param);
					}
					else
						$flag_stop = true;
				} else break;
			} else {
					// faux filtres
				array_shift($p->param);
					switch($nom) {
						case 'left':
						case 'right':
						case 'center':
						case 'top':
						case 'bottom':
				$r = logo_faux_filtres($nom);
				if ($r === 0)
					$align = $nom;
							break;
						
						case 'lien':
							$flag_lien_auto = 'oui';
							$flag_stop = true; # apres |lien : vrais filtres
							break;

						case 'fichier':
				else {
					if ($r === 1)
						$lien = true;
					elseif ($r === 2)
						$flag_fichier = 1;
							$flag_stop = true; # apres |fichier : vrais filtres
							break;

						default:
							$lien = $nom;
							$flag_stop = true; # apres |#URL... : vrais filtres
					else	$lien = $nom;
					break;
				}
			}
		}
	}
	}

	//
	// Preparer le code du lien
	//
	// 1. filtre |lien
	if (!$flag_fichier) {
		if ($lien == true) {
			include_spip('balise/url_');
			$lien = '($lien = '
			  . generer_generer_url_arg($type_objet, $p, $_id_objet)
			  . ') ? $lien : ""';

	if ($flag_lien_auto AND !$lien)
		$code_lien = '($lien = generer_url_entite('.$_id_objet . ',"' . $type_objet .'")) ? $lien : ""';
	// 2. lien indique en clair (avec des balises : imprimer#ID_ARTICLE.html)
	else if ($lien) {
		$code_lien = "'".texte_script(trim($lien))."'";
		while (preg_match(",^([^#]*)#([A-Za-z_]+)(.*)$,", $code_lien, $match)) {
		} else if ($lien) {
			$lien = "'".texte_script(trim($lien))."'";
			while (preg_match(",^([^#]*)#([A-Za-z_]+)(.*)$,", $lien, $match)) {
				$c = new Champ();
				$c->nom_champ = $match[2];
				$c->id_boucle = $p->id_boucle;
				$c->boucles = &$p->boucles;
				$c->descr = $p->descr;
				$c = calculer_champ($c);
			$code_lien = str_replace('#'.$match[2], "'.".$c.".'", $code_lien);
				$lien = str_replace('#'.$match[2], "'.".$c.".'", $lien);
			}
			// supprimer les '' disgracieux
		$code_lien = preg_replace("@^''\.|\.''$@", "", $code_lien);
			$lien = preg_replace("@^''\.|\.''$@", "", $lien);
		}

	if ($flag_fichier)
		$code_lien = "'',''" ; 
	else {
		if (!$code_lien)
			$code_lien = "''";
		$code_lien .= ", '". $align . "'";
	}
	if (!$lien) $lien = "''";
	$connect = $p->id_boucle ?$p->boucles[$p->id_boucle]->sql_serveur :'';
	if ($type_objet == 'DOCUMENT') {
	if ($type_objet == 'document') {
		$p->code = "calcule_logo_document($_id_objet, '" .
			$p->descr['documents'] .
			'\', $doublons, '. intval($flag_fichier).", $code_lien, '".
			'\', $doublons, '. intval($flag_fichier).", $lien, '"
		  	. $align . "','" .
			// #LOGO_DOCUMENT{x,y} donne la taille maxi
			texte_script($params)
			."'," . sql_quote($connect) .")";
			."'," . _q($connect) .")";
	}
	elseif ($connect) {
		$p->code = "''";
@@ -135,11 +111,26 @@ function balise_LOGO__dist ($p) {
			"', $_id_objet," .
			(($suite_logo == '_RUBRIQUE') ? 
			champ_sql("id_rubrique", $p) :
			(($type_objet == 'RUBRIQUE') ? "quete_parent($_id_objet)" : "''")) .
			",  '$flag_fichier'), $code_lien)";
			(($type_objet == 'rubrique') ? "quete_parent($_id_objet)" : "''")) .
			",  '$flag_fichier'), $lien, '". $align . "')";
	}

	$p->interdire_scripts = false;
	return $p;
}

function logo_faux_filtres($nom)
{
	switch($nom) {
	case 'top':
	case 'left':
	case 'right':
	case 'center':
	case 'bottom':  return 0;
	case 'lien':    return 1;
	case 'fichier': return 2;
	default: return $nom;
	}
}

?>
+5 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -31,6 +31,11 @@ function generer_generer_url($type, $p)

	if (!$_id) $_id = champ_sql('id_' . $type, $p);

	return generer_generer_url_arg($type, $p, $_id);
}
	
function generer_generer_url_arg($type, $p, $_id)
{
	$s = $p->id_boucle;

	if ($s !== '' AND $s = $p->boucles[$s]->sql_serveur) {