source: spip-zone/_plugins_/logos_roles/trunk/logos_roles_fonctions.php @ 103407

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

Commentaires et documentation !

File size: 4.1 KB
Line 
1<?php
2/**
3 * Fonctions utiles au plugin Logos par rôles
4 *
5 * @plugin     logos_roles
6 * @copyright  2016
7 * @author     bystrano
8 * @licence    GNU/GPL
9 */
10
11/**
12 * Lister les rôles de logos
13 *
14 * Le tableau retourné utilise les noms des rôles comme clés, et des tableaux
15 * d'options comme valeur, p.ex :
16 *
17 *      array(
18 *              'logo' => array(
19 *                      'label' => 'Logo',
20 *                      'objets' => array('articles', 'rubriques', 'syndic'),
21 *              ),
22 *              'logo_survol' => array(
23 *                      'label' => 'Logo survol',
24 *                      'objets' => array('articles', 'rubriques'),
25 *              ),
26 *      )
27 *
28 * @param string|null $objet : Un nom d'objet auquel se restreindre. La fonction
29 *        ne retourne alors que les rôles de logos que l'on peut attribuer à cet
30 *        objet.
31 *
32 * @return array : Retourne le tableau décrivant les rôles de logos
33 */
34function lister_roles_logos($objet = null) {
35
36        // Logos par défaut
37        $roles_logos = pipeline(
38                'roles_logos',
39                array(
40                        'logo' => array(
41                                'label' => 'Logo',
42                                'objets' => array_map('table_objet', array_keys(lister_tables_objets_sql())),
43                        ),
44                        'logo_survol' => array(
45                                'label' => 'Logo survol',
46                                'objets' => array_map('table_objet', array_keys(lister_tables_objets_sql())),
47                        ),
48                )
49        );
50
51        include_spip('base/objets');
52
53        if ($objet = table_objet($objet)) {
54                $roles_logos_objet = array();
55                foreach ($roles_logos as $role => $options) {
56                        if ((! is_array($options['objets']))
57                                        or in_array($objet, array_map('table_objet', $options['objets']))) {
58                                $roles_logos_objet[$role] = $options;
59                        }
60                }
61
62                $roles_logos = $roles_logos_objet;
63        }
64
65        return $roles_logos;
66}
67
68/**
69 * Trouver les dimensions d'un rôle
70 *
71 * @param string $role : Le rôle dont on veut connaître les dimensions
72 *
73 * @return array|null  : Un tableau avec des clés 'hauteur' et 'largeur', rien si
74 *                       pas de dimensions définies
75 */
76function get_dimensions_role($role) {
77
78        $roles_logos = lister_roles_logos();
79
80        if (isset($roles_logos[$role])
81                        and is_array($roles_logos[$role])
82                        and isset($roles_logos[$role]['dimensions'])
83                        and is_array($roles_logos[$role]['dimensions'])) {
84                return $roles_logos[$role]['dimensions'];
85        }
86}
87
88/**
89 * Trouve l'identifiant du document associé à un fichier
90 *
91 * @param string $fichier : le nom du fichier
92 *
93 * @return integer : l'identifiant du document
94 */
95function trouver_document_fichier($fichier) {
96
97        $fichier = str_replace(_DIR_IMG, '', $fichier);
98
99        include_spip('base/abstract_sql');
100
101        return sql_getfetsel('id_document', 'spip_documents', 'fichier='.sql_quote($fichier));
102}
103
104
105/**
106 * Traitement automatique sur les logos. Permet de compléter le résultat des
107 * balises #LOGO_* pour trouver les logos définis par rôles de documents.
108 *
109 * @param string $logo : le code html du logo
110 * @param string $objet : le type d'objet
111 * @param int $id_objet : l'identifiant de l'objet
112 * @param string $role
113 *     le role, ou `on` ou `off` pour la rétro-compatibilité
114 *
115 * @return string : le code html du logo qui va bien
116 */
117function trouver_logo_par_role($logo, $objet, $id_objet, $role) {
118
119        if (! $logo) {
120                $chercher_logo = charger_fonction('chercher_logo', 'inc/');
121                $balise_img = charger_filtre('balise_img');
122
123                $logo = $chercher_logo($id_objet, id_table_objet($objet), $role);
124                $logo = $balise_img($logo[0]);
125        }
126
127        return $logo;
128}
129
130/**
131 * Traitement automatique sur les logos. Forcer les dimensions d'un logo suivant
132 * les dimensions définies par son rôle.
133 *
134 * @param string $logo : le code html du logo
135 * @param string $objet : le type d'objet
136 * @param int $id_objet : l'identifiant de l'objet
137 * @param string $role
138 *     le role, ou `on` ou `off` pour la rétro-compatibilité
139 *
140 * @return string : le code html du logo aux bonnes dimensions
141 */
142function forcer_dimensions_role($logo, $objet, $id_objet, $role) {
143
144        include_spip('inc/filtres');
145
146        if ($dimensions = get_dimensions_role($role)) {
147                $image_recadre = charger_filtre('image_recadre');
148                $image_passe_partout = charger_filtre('image_passe_partout');
149                $logo = $image_recadre(
150                        $image_passe_partout($logo, $dimensions['largeur'], $dimensions['hauteur']),
151                        $dimensions['largeur'],
152                        $dimensions['hauteur']
153                );
154        }
155
156        return $logo;
157}
Note: See TracBrowser for help on using the repository browser.