[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / balise / logo_.php
index 70370c4..a44c3ba 100644 (file)
@@ -3,24 +3,58 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2019                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Fonctions génériques pour les balises `#LOGO_XXXX`
+ *
+ * @package SPIP\Core\Compilateur\Balises
+ **/
 
-//
-// Fonction des balises #LOGO_XXXX
-// (les balises portant ce type de nom sont traitees en bloc ici)
-//
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
-// http://doc.spip.org/@balise_LOGO__dist
-function balise_LOGO__dist ($p) {
 
-       preg_match(",^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i", $p->nom_champ, $regs);
+/**
+ * Compile la balise dynamique `#LOGO_xx` qui retourne le code HTML
+ * pour afficher l'image de logo d'un objet éditorial de SPIP.
+ *
+ * Le type d'objet est récupéré dans le nom de la balise, tel que
+ * `LOGO_ARTICLE` ou `LOGO_SITE`.
+ *
+ * Ces balises ont quelques options :
+ *
+ * - La balise peut aussi demander explicitement le logo normal ou de survol,
+ *   avec `LOGO_ARTICLE_NORMAL` ou `LOGO_ARTICLE_SURVOL`.
+ * - On peut demander un logo de rubrique en absence de logo sur l'objet éditorial
+ *   demandé avec `LOGO_ARTICLE_RUBRIQUE`
+ * - `LOGO_ARTICLE*` ajoute un lien sur l'image du logo vers l'objet éditorial
+ * - `LOGO_ARTICLE**` retourne le nom du fichier de logo.
+ * - `LOGO_ARTICLE{right}`. Valeurs possibles : top left right center bottom
+ * - `LOGO_DOCUMENT{icone}`. Valeurs possibles : auto icone apercu vignette
+ * - `LOGO_ARTICLE{200, 0}`. Redimensionnement indiqué
+ *
+ * @balise
+ * @uses logo_survol()
+ * @example
+ *     ```
+ *     #LOGO_ARTICLE
+ *     ```
+ *
+ * @param Champ $p
+ *     Pile au niveau de la balise
+ * @return Champ
+ *     Pile complétée par le code à générer
+ */
+function balise_LOGO__dist($p) {
+
+       preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
        $type = strtolower($regs[1]);
        $suite_logo = $regs[2];
 
@@ -31,94 +65,134 @@ function balise_LOGO__dist ($p) {
        }
 
        $id_objet = id_table_objet($type);
-       if (!isset($_id_objet) OR !$_id_objet)
+       if (!isset($_id_objet)) {
                $_id_objet = champ_sql($id_objet, $p);
+       }
 
        $fichier = ($p->etoile === '**') ? -1 : 0;
        $coord = array();
        $align = $lien = '';
        $mode_logo = '';
 
-       if ($p->param AND !$p->param[0][0]) {
+       if ($p->param and !$p->param[0][0]) {
                $params = $p->param[0];
                array_shift($params);
-               foreach($params as $a) {
+               foreach ($params as $a) {
                        if ($a[0]->type === 'texte') {
                                $n = $a[0]->texte;
-                               if (is_numeric($n))
-                                       $coord[]= $n;
-                               elseif (in_array($n,array('top','left','right','center','bottom')))
+                               if (is_numeric($n)) {
+                                       $coord[] = $n;
+                               } elseif (in_array($n, array('top', 'left', 'right', 'center', 'bottom'))) {
                                        $align = $n;
-                               elseif (in_array($n,array('auto','icone','apercu','vignette')))
+                               } elseif (in_array($n, array('auto', 'icone', 'apercu', 'vignette'))) {
                                        $mode_logo = $n;
+                               }
+                       } else {
+                               $lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
                        }
-                       else $lien =  calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
-
                }
        }
 
-       $coord_x = !$coord  ? 0 : intval(array_shift($coord));
-       $coord_y = !$coord  ? 0 : intval(array_shift($coord));
-       
+       $coord_x = !$coord ? 0 : intval(array_shift($coord));
+       $coord_y = !$coord ? 0 : intval(array_shift($coord));
+
        if ($p->etoile === '*') {
                include_spip('balise/url_');
                $lien = generer_generer_url_arg($type, $p, $_id_objet);
        }
 
-       $connect = $p->id_boucle ?$p->boucles[$p->id_boucle]->sql_serveur :'';
+       $connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
        if ($type == 'document') {
                $qconnect = _q($connect);
                $doc = "quete_document($_id_objet, $qconnect)";
-               if ($fichier)
+               if ($fichier) {
                        $code = "quete_logo_file($doc, $qconnect)";
-               else $code = "quete_logo_document($doc, " . ($lien ? $lien : "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
+               } else {
+                       $code = "quete_logo_document($doc, " . ($lien ? $lien : "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
+               }
                // (x=non-faux ? y : '') pour affecter x en retournant y
-               if ($p->descr['documents'])
-                 $code = '(($doublons["documents"] .= ",". '
-                   . $_id_objet
-                   . ") ? $code : '')";
-       }
-       elseif ($connect) {
+               if ($p->descr['documents']) {
+                       $code = '(($doublons["documents"] .= ",". '
+                               . $_id_objet
+                               . ") ? $code : '')";
+               }
+       elseif ($connect) {
                $code = "''";
-               spip_log("Les logos distants ne sont pas prevus");
+               spip_log('Les logos distants ne sont pas prevus');
        } else {
                $code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo);
        }
 
        // demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
-       if ($coord_x OR $coord_y) {
-               $code = "filtrer('image_graver',filtrer('image_reduire',".$code.", '$coord_x', '$coord_y'))"; 
-       } 
+       if ($coord_x or $coord_y) {
+               $code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
+       }
 
        $p->code = $code;
        $p->interdire_scripts = false;
+
        return $p;
 }
 
-function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite)
-{
+/**
+ * Calcule le code HTML pour l'image d'un logo
+ *
+ * @param string $id_objet
+ *     Nom de la clé primaire de l'objet (id_article, ...)
+ * @param string $_id_objet
+ *     Code pour la compilation permettant de récupérer la valeur de l'identifiant
+ * @param string $type
+ *     Type d'objet
+ * @param string $align
+ *     Alignement demandé du logo
+ * @param int $fichier
+ *     - -1 pour retourner juste le chemin de l'image
+ *     - 0 pour retourner le code HTML de l'image
+ * @param string $lien
+ *     Lien pour encadrer l'image avec si présent
+ * @param Champ $p
+ *     Pile au niveau de la balise
+ * @param string $suite
+ *     Suite éventuelle de la balise logo, telle que `_SURVOL`, `_NORMAL` ou `_RUBRIQUE`.
+ * @return string
+ *     Code compilé retournant le chemin du logo ou le code HTML du logo.
+ **/
+function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite) {
        $code = "quete_logo('$id_objet', '" .
-               (($suite == '_SURVOL') ? 'off' : 
-               (($suite == '_NORMAL') ? 'on' : 'ON')) .
+               (($suite == '_SURVOL') ? 'off' :
+                       (($suite == '_NORMAL') ? 'on' : 'ON')) .
                "', $_id_objet," .
-               (($suite == '_RUBRIQUE') ? 
-               champ_sql("id_rubrique", $p) :
-               (($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) .
-               ", " . intval($fichier) . ")";
+               (($suite == '_RUBRIQUE') ?
+                       champ_sql('id_rubrique', $p) :
+                       (($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) .
+               ', ' . intval($fichier) . ')';
 
-       if ($fichier) return $code;
+       if ($fichier) {
+               return $code;
+       }
 
+       // class spip_logos a supprimer ulterieurement (transition douce vers spip_logo)
+       // cf http://core.spip.net/issues/2483
+       $class = 'spip_logo ';
+       if ($align) {
+               $class .= "spip_logo_$align ";
+       }
+       $class .= 'spip_logos';
+       $style = '';
+       if (in_array($align, array('left', 'right'))) {
+               $style = "float:$align";
+               $align = '';
+       }
        $code = "\n((!is_array(\$l = $code)) ? '':\n (" .
-                    '"<img class=\"spip_logos\" alt=\"\"' .
-                   ($align ? " align=\\\"$align\\\"" : '')
-                   . ' src=\"$l[0]\"" . $l[2] .  ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))';
+               '"<img class=\"' . $class . '\" alt=\"\"' .
+               ($style ? " style=\\\"$style\\\"" : '') .
+               ($align ? " align=\\\"$align\\\"" : '') .
+               ' src=\"$l[0]\"" . $l[2] .  ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))';
 
-       if (!$lien) return $code;
+       if (!$lien) {
+               return $code;
+       }
 
-       return ('(strlen($logo='.$code.')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')');
+       return ('(strlen($logo=' . $code . ')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')');
 
 }
-
-
-
-?>