3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
14 * Fonctions génériques pour les balises `#LOGO_XXXX`
16 * @package SPIP\Core\Compilateur\Balises
19 if (!defined('_ECRIRE_INC_VERSION')) {
25 * Compile la balise dynamique `#LOGO_xx` qui retourne le code HTML
26 * pour afficher l'image de logo d'un objet éditorial de SPIP.
28 * Le type d'objet est récupéré dans le nom de la balise, tel que
29 * `LOGO_ARTICLE` ou `LOGO_SITE`.
31 * Ces balises ont quelques options :
33 * - La balise peut aussi demander explicitement le logo normal ou de survol,
34 * avec `LOGO_ARTICLE_NORMAL` ou `LOGO_ARTICLE_SURVOL`.
35 * - On peut demander un logo de rubrique en absence de logo sur l'objet éditorial
36 * demandé avec `LOGO_ARTICLE_RUBRIQUE`
37 * - `LOGO_ARTICLE*` ajoute un lien sur l'image du logo vers l'objet éditorial
38 * - `LOGO_ARTICLE**` retourne le nom du fichier de logo.
39 * - `LOGO_ARTICLE{right}`. Valeurs possibles : top left right center bottom
40 * - `LOGO_DOCUMENT{icone}`. Valeurs possibles : auto icone apercu vignette
41 * - `LOGO_ARTICLE{200, 0}`. Redimensionnement indiqué
51 * Pile au niveau de la balise
53 * Pile complétée par le code à générer
55 function balise_LOGO__dist($p) {
57 preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ
, $regs);
58 $type = strtolower($regs[1]);
59 $suite_logo = $regs[2];
61 // cas de #LOGO_SITE_SPIP
62 if ($type == 'site_spip') {
64 $_id_objet = "\"'0'\"";
67 $id_objet = id_table_objet($type);
68 if (!isset($_id_objet)) {
69 $_id_objet = champ_sql($id_objet, $p);
72 $fichier = ($p->etoile
=== '**') ?
-1 : 0;
77 if ($p->param
and !$p->param
[0][0]) {
78 $params = $p->param
[0];
80 foreach ($params as $a) {
81 if ($a[0]->type
=== 'texte') {
85 } elseif (in_array($n, array('top', 'left', 'right', 'center', 'bottom'))) {
87 } elseif (in_array($n, array('auto', 'icone', 'apercu', 'vignette'))) {
91 $lien = calculer_liste($a, $p->descr
, $p->boucles
, $p->id_boucle
);
96 $coord_x = !$coord ?
0 : intval(array_shift($coord));
97 $coord_y = !$coord ?
0 : intval(array_shift($coord));
99 if ($p->etoile
=== '*') {
100 include_spip('balise/url_');
101 $lien = generer_generer_url_arg($type, $p, $_id_objet);
104 $connect = $p->id_boucle ?
$p->boucles
[$p->id_boucle
]->sql_serveur
: '';
105 if ($type == 'document') {
106 $qconnect = _q($connect);
107 $doc = "quete_document($_id_objet, $qconnect)";
109 $code = "quete_logo_file($doc, $qconnect)";
111 $code = "quete_logo_document($doc, " . ($lien ?
$lien : "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
113 // (x=non-faux ? y : '') pour affecter x en retournant y
114 if ($p->descr
['documents']) {
115 $code = '(($doublons["documents"] .= ",". '
119 } elseif ($connect) {
121 spip_log('Les logos distants ne sont pas prevus');
123 $code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo);
126 // demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
127 if ($coord_x or $coord_y) {
128 $code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
132 $p->interdire_scripts
= false;
138 * Calcule le code HTML pour l'image d'un logo
140 * @param string $id_objet
141 * Nom de la clé primaire de l'objet (id_article, ...)
142 * @param string $_id_objet
143 * Code pour la compilation permettant de récupérer la valeur de l'identifiant
144 * @param string $type
146 * @param string $align
147 * Alignement demandé du logo
148 * @param int $fichier
149 * - -1 pour retourner juste le chemin de l'image
150 * - 0 pour retourner le code HTML de l'image
151 * @param string $lien
152 * Lien pour encadrer l'image avec si présent
154 * Pile au niveau de la balise
155 * @param string $suite
156 * Suite éventuelle de la balise logo, telle que `_SURVOL`, `_NORMAL` ou `_RUBRIQUE`.
158 * Code compilé retournant le chemin du logo ou le code HTML du logo.
160 function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite) {
161 $code = "quete_logo('$id_objet', '" .
162 (($suite == '_SURVOL') ?
'off' :
163 (($suite == '_NORMAL') ?
'on' : 'ON')) .
165 (($suite == '_RUBRIQUE') ?
166 champ_sql('id_rubrique', $p) :
167 (($type == 'rubrique') ?
"quete_parent($_id_objet)" : "''")) .
168 ', ' . intval($fichier) . ')';
174 // class spip_logos a supprimer ulterieurement (transition douce vers spip_logo)
175 // cf http://core.spip.net/issues/2483
176 $class = 'spip_logo ';
178 $class .= "spip_logo_$align ";
180 $class .= 'spip_logos';
182 if (in_array($align, array('left', 'right'))) {
183 $style = "float:$align";
186 $code = "\n((!is_array(\$l = $code)) ? '':\n (" .
187 '"<img class=\"' . $class . '\" alt=\"\"' .
188 ($style ?
" style=\\\"$style\\\"" : '') .
189 ($align ?
" align=\\\"$align\\\"" : '') .
190 ' src=\"$l[0]\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))';
196 return ('(strlen($logo=' . $code . ')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')');