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

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

un peu d'ordre

File size: 4.4 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        // S'il n'y a pas de logo avec le bon rôle, on se rabat sur le logo de base
64        if ($mode !== 'on') {
65                return inc_chercher_logo_dist($id, $_id_objet, 'on');
66        }
67
68        # coherence de type pour servir comme filtre (formulaire_login)
69        return array();
70}
71
72/**
73 * Trouver un logo enregistré en tant que document
74 *
75 * Fonction à usage interne, il faut préférer l'API chercher_logo
76 *
77 * @param integer $id : l'identifiant de l'objet
78 * @param string $_id_objet : le nom de la clé primaire pour l'objet en
79 *                            question. p.ex id_article pour les articles
80 * @param string $mode Mode de survol du logo désiré (on ou off), ou alors un
81 *     rôle dont l'identifiant commence par « logo ».
82 *
83 * @return array
84 *     - Liste (chemin complet du fichier, répertoire de logos, nom du logo, extension du logo, date de modification)
85 *     - array vide aucun logo trouvé.
86 */
87function chercher_logo_document($id, $_id_objet, $mode) {
88
89        if ($mode === 'on') {
90                $role = 'logo';
91        } elseif ($mode === 'off') {
92                $role = 'logo_survol';
93        } else {
94                $role = $mode;
95        }
96
97        include_spip('base/abstract_sql');
98        $ligne = sql_fetsel(
99                'fichier, extension',
100                'spip_documents as D '
101                . 'INNER JOIN spip_documents_liens as L ON D.id_document=L.id_document',
102                array(
103                        'L.objet='.sql_quote(objet_type($_id_objet)),
104                        'L.id_objet='.intval($id),
105                        'L.role='.sql_quote($role),
106                )
107        );
108
109        if ($ligne['fichier']) {
110                $fichier = _DIR_IMG . $ligne['fichier'];
111                $extension = $ligne['extension'];
112
113                return array(
114                        $fichier,
115                        dirname($fichier) . '/',
116                        basename($fichier, '.' . $extension),
117                        $extension,
118                        @filemtime($fichier),
119                );
120        }
121}
122
123/**
124 * Retourne le type de logo tel que `art` depuis le nom de clé primaire
125 * de l'objet
126 *
127 * C'est par défaut le type d'objet, mais il existe des exceptions historiques
128 * déclarées par la globale `$table_logos`
129 *
130 * @global table_logos Exceptions des types de logo
131 *
132 * @param string $_id_objet
133 *     Nom de la clé primaire de l'objet
134 * @return string
135 *     Type du logo
136 **/
137function type_du_logo($_id_objet) {
138        return isset($GLOBALS['table_logos'][$_id_objet])
139                ? $GLOBALS['table_logos'][$_id_objet]
140                : objet_type(preg_replace(',^id_,', '', $_id_objet));
141}
142
143// Exceptions standards (historique)
144$GLOBALS['table_logos'] = array(
145        'id_article' => 'art',
146        'id_auteur' => 'aut',
147        'id_rubrique' => 'rub',
148        'id_groupe' => 'groupe',
149);
Note: See TracBrowser for help on using the repository browser.