source: spip-zone/_plugins_/logos_roles/trunk/inc/chercher_logo.php @ 103549

Last change on this file since 103549 was 103549, checked in by bystrano@…, 3 years ago

On permet de définir une image par défaut pour chaque type de logo

On en profite pour passer en test, la structure générale du plugin ne devrait
plus trop bouger.

File size: 4.8 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2016                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
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\***************************************************************************/
12
13/**
14 * Recherche de logo
15 *
16 * @package SPIP\Core\Logos
17 **/
18
19/**
20 * Cherche le logo d'un élément d'objet
21 *
22 * @global formats_logos Extensions possibles des logos
23 * @uses type_du_logo()
24 *
25 * @param int $id
26 *     Identifiant de l'objet
27 * @param string $_id_objet
28 *     Nom de la clé primaire de l'objet
29 * @param string $mode Mode de survol du logo désiré (on ou off), ou alors un
30 *     rôle dont l'identifiant commence par « logo ».
31 * @return array
32 *     - Liste (chemin complet du fichier, répertoire de logos, nom du logo, extension du logo, date de modification)
33 *     - array vide aucun logo trouvé.
34 **/
35function inc_chercher_logo_dist($id, $_id_objet, $mode = 'on') {
36
37        $type = type_du_logo($_id_objet);
38
39        /* Si le paramètre $mode est un rôle correspondant aux logos historique, on
40         * cherche quand même un logo enregistré avec la méthode historique. */
41        if ($mode === 'logo') {
42                $mode = 'on';
43        } elseif ($mode === 'logo_survol') {
44                $mode = 'off';
45        }
46
47        /* On commence par chercher via le mécanisme historique */
48        $nom = $type . $mode . intval($id);
49
50        foreach ($GLOBALS['formats_logos'] as $format) {
51                if (@file_exists($d = (_DIR_LOGOS . $nom . '.' . $format))) {
52                        return array($d, _DIR_LOGOS, $nom, $format, @filemtime($d));
53                }
54        }
55
56        /* Si on n'a rien trouvé, on cherche un document lié avec le bon rôle */
57        $logo = chercher_logo_document($id, $_id_objet, $mode);
58
59        if ($logo) {
60                return $logo;
61        }
62
63        /* On se rabat sur le logo par défaut */
64        $def_logo = lister_roles_logos(table_objet($_id_objet), $mode);
65        if (isset($def_logo['defaut'])
66                and $logo = find_in_path($def_logo['defaut'])) {
67
68                $extension = strtolower(
69                        preg_replace('/^.*\.([a-z]+)$/', '$1', $logo)
70                );
71
72                return array(
73                        $logo,
74                        dirname($logo) . '/',
75                        basename($logo, '.' . $extension),
76                        $extension,
77                        @filemtime($fichier),
78                );
79        }
80
81        // S'il n'y a pas de logo avec le bon rôle, on se rabat sur le logo de base
82        if ($mode !== 'on') {
83                return inc_chercher_logo_dist($id, $_id_objet, 'on');
84        }
85
86        # coherence de type pour servir comme filtre (formulaire_login)
87        return array();
88}
89
90/**
91 * Trouver un logo enregistré en tant que document
92 *
93 * Fonction à usage interne, il faut préférer l'API chercher_logo
94 *
95 * @param integer $id : l'identifiant de l'objet
96 * @param string $_id_objet : le nom de la clé primaire pour l'objet en
97 *                            question. p.ex id_article pour les articles
98 * @param string $mode Mode de survol du logo désiré (on ou off), ou alors un
99 *     rôle dont l'identifiant commence par « logo ».
100 *
101 * @return array
102 *     - Liste (chemin complet du fichier, répertoire de logos, nom du logo, extension du logo, date de modification)
103 *     - array vide aucun logo trouvé.
104 */
105function chercher_logo_document($id, $_id_objet, $mode) {
106
107        if ($mode === 'on') {
108                $role = 'logo';
109        } elseif ($mode === 'off') {
110                $role = 'logo_survol';
111        } else {
112                $role = $mode;
113        }
114
115        include_spip('base/abstract_sql');
116        $ligne = sql_fetsel(
117                'fichier, extension',
118                'spip_documents as D '
119                . 'INNER JOIN spip_documents_liens as L ON D.id_document=L.id_document',
120                array(
121                        'L.objet='.sql_quote(objet_type($_id_objet)),
122                        'L.id_objet='.intval($id),
123                        'L.role='.sql_quote($role),
124                )
125        );
126
127        if ($ligne['fichier']) {
128                $fichier = _DIR_IMG . $ligne['fichier'];
129                $extension = $ligne['extension'];
130
131                return array(
132                        $fichier,
133                        dirname($fichier) . '/',
134                        basename($fichier, '.' . $extension),
135                        $extension,
136                        @filemtime($fichier),
137                );
138        }
139}
140
141/**
142 * Retourne le type de logo tel que `art` depuis le nom de clé primaire
143 * de l'objet
144 *
145 * C'est par défaut le type d'objet, mais il existe des exceptions historiques
146 * déclarées par la globale `$table_logos`
147 *
148 * @global table_logos Exceptions des types de logo
149 *
150 * @param string $_id_objet
151 *     Nom de la clé primaire de l'objet
152 * @return string
153 *     Type du logo
154 **/
155function type_du_logo($_id_objet) {
156        return isset($GLOBALS['table_logos'][$_id_objet])
157                ? $GLOBALS['table_logos'][$_id_objet]
158                : objet_type(preg_replace(',^id_,', '', $_id_objet));
159}
160
161// Exceptions standards (historique)
162$GLOBALS['table_logos'] = array(
163        'id_article' => 'art',
164        'id_auteur' => 'aut',
165        'id_rubrique' => 'rub',
166        'id_groupe' => 'groupe',
167);
Note: See TracBrowser for help on using the repository browser.