source: spip-zone/_plugins_/logos_roles/trunk/base/logos_roles.php @ 111573

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

debug affichage des types de logos persos

Les balises #LOGO_OBJET_BLABLA fonctionnent aussi quand la boucle OBJETS est une
sous-boucle d'une autre boucle.

File size: 6.1 KB
Line 
1<?php
2
3
4/**
5 * Ajouter un traitement automatique sur une balise
6 *
7 * On peut restreindre l'application du traitement au balises appelées dans un
8 * type de boucle via le paramètre optionnel $table.
9 *
10 * @param array $interfaces
11 *    Les interfaces du pipeline declarer_tables_interfaces
12 * @param string $traitement
13 *    Un format comme pour sprintf, dans lequel le compilateur passera la valeur de la balise
14 * @param string $balise
15 *    Le nom de la balise à laquelle on veut appliquer le traitement
16 * @param string $table (optionnel)
17 *    Un type de boucle auquel on veut restreindre le traitement.
18 */
19function logos_roles_ajouter_traitement_automatique($interfaces, $traitement, $balise, $table = 0) {
20
21        $table_traitements = $interfaces['table_des_traitements'];
22
23        if (! isset($table_traitements[$balise])) {
24                $table_traitements[$balise] = array();
25        }
26
27        /* On essaie d'être tolérant sur le nom de la table */
28        if ($table) {
29                include_spip('base/objets');
30                $table = table_objet($table);
31        }
32
33        if (isset($table_traitements[$balise][$table])) {
34                $traitement_existant = $table_traitements[$balise][$table];
35        }
36
37        if (!isset($traitement_existant) or (! $traitement_existant)) {
38                $traitement_existant = '%s';
39        }
40
41        $interfaces['table_des_traitements'][$balise][$table] = sprintf($traitement, $traitement_existant);
42
43        return $interfaces;
44}
45
46/**
47 * Déclaration des filtres automatiques de champs
48 *
49 * @pipeline declarer_tables_interfaces
50 * @param array $interfaces
51 *         Déclarations d'interface pour le compilateur
52 * @return array
53 *         Déclarations d'interface pour le compilateur
54 */
55function logos_roles_declarer_tables_interfaces($interfaces) {
56
57        include_spip('logos_roles_fonctions');
58
59        $suffixes = array();
60        foreach (lister_roles_logos() as $role => $options) {
61                $suffixes[$role] = strtoupper(substr($role, 4));
62        }
63
64        /* Pour chaque objet éditorial existant, ajouter un traitement sur
65           les logos */
66        if (isset($GLOBALS['spip_connect_version'])) {
67                foreach (lister_tables_objets_sql() as $table => $valeurs) {
68                        if ($table !== 'spip_documents') {
69                                foreach ($suffixes as $role => $suffixe_balise) {
70                                        // Les balises des rôles perso ne retournent rien à la base. On
71                                        // utilise ce traitement pour trouver le bon logo.
72                                        $interfaces = logos_roles_ajouter_traitement_automatique(
73                                                $interfaces,
74                                                'trouver_logo_par_role(%s, \'' . objet_type($table) . '\', $Pile[$SP][\''.id_table_objet($table).'\'], \''.$role.'\')',
75                                                strtoupper('LOGO_' . objet_type($table) . $suffixe_balise)
76                                        );
77
78                                        // Le massicot ne déclare lui-même que les rôles logo et
79                                        // logo_survol. On s'en occupe ici.
80                                        if (test_plugin_actif('massicot')
81                                                and (! in_array($role, array('logo', 'logo_survol')))) {
82                                                $interfaces = logos_roles_ajouter_traitement_automatique(
83                                                        $interfaces,
84                                                        'massicoter_logo(%s, \'' . objet_type($table) . '\', $Pile[$SP][\''.id_table_objet($table).'\'], \''.$role.'\')',
85                                                        strtoupper('LOGO_' . objet_type($table)) . $suffixe_balise
86                                                );
87                                        }
88
89                                        // Forcer les dimensions du logo pour qu'elle correspondent à ce qui
90                                        // est déclaré dans la définition du rôle
91                                        $interfaces = logos_roles_ajouter_traitement_automatique(
92                                                $interfaces,
93                                                'forcer_dimensions_role(%s, \'' . objet_type($table) . '\', $Pile[$SP][\''.id_table_objet($table).'\'], \''.$role.'\')',
94                                                strtoupper('LOGO_' . objet_type($table) . $suffixe_balise)
95                                        );
96                                }
97                        }
98                }
99
100                // Sans oublier les balises #LOGO_SITE_SPIP…
101                foreach ($suffixes as $role => $suffixe_balise) {
102                        // Les balises des rôles perso ne retournent rien à la base. On
103                        // utilise ce traitement pour trouver le bon logo.
104                        $interfaces = logos_roles_ajouter_traitement_automatique(
105                                $interfaces,
106                                'trouver_logo_par_role(%s, \'site\', 0, \''.$role.'\')',
107                                strtoupper('LOGO_SITE_SPIP' . $suffixe_balise)
108                        );
109
110                        // Le massicot ne déclare lui-même que les rôles logo et
111                        // logo_survol. On s'en occupe ici.
112                        if (test_plugin_actif('massicot')
113                                and (! in_array($role, array('logo', 'logo_survol')))) {
114                                $interfaces = logos_roles_ajouter_traitement_automatique(
115                                        $interfaces,
116                                        'massicoter_logo(%s, \'site\', 0, \''.$role.'\')',
117                                        strtoupper('LOGO_SITE_SPIP' . $suffixe_balise)
118                                );
119                        }
120
121                        // Forcer les dimensions du logo pour qu'elle correspondent à ce qui
122                        // est déclaré dans la définition du rôle
123                        $interfaces = logos_roles_ajouter_traitement_automatique(
124                                $interfaces,
125                                'forcer_dimensions_role(%s, \'site\', 0, \''.$role.'\')',
126                                strtoupper('LOGO_SITE_SPIP' . $suffixe_balise)
127                        );
128                }
129        }
130
131        return $interfaces;
132}
133
134/**
135 * Ajouter les rôles qui vont bien pour les logos de documents
136 *
137 * On se base sur le code fourni dans le README du plugin « Rôles de documents »
138 */
139function logos_roles_declarer_tables_objets_sql($tables) {
140
141        include_spip('logos_roles_fonctions');
142        include_spip('base/objets');
143
144        $noms_tables = array_map(
145                'table_objet_simple',
146                array_filter(array_keys($tables), 'is_string')
147        );
148
149        $roles_logos = lister_roles_logos(null, null, $noms_tables);
150
151        if (is_array($roles_logos)) {
152                $nouveaux_roles_titres = array();
153                $nouveaux_roles_objets = array();
154
155                foreach ($roles_logos as $role => $options) {
156                        $nouveaux_roles_titres[$role] = $options['label'];
157                        foreach ($options['objets'] as $objet) {
158                                $nouveaux_roles_objets[table_objet_simple($objet)][] = $role;
159                        }
160                }
161
162                foreach ($nouveaux_roles_objets as $objet => $choix) {
163                        $nouveaux_roles_objets[$objet] = array(
164                                'choix' => $choix,
165                                'defaut' => 'document',
166                                'principaux' => $choix,
167                        );
168                }
169
170                // anciens rôles (par défaut 'logo' et 'logo_survol' pour tous les objets)
171                $anciens_roles_titres = is_array($tables['spip_documents']['roles_titres']) ?
172                        $tables['spip_documents']['roles_titres'] : array();
173                $anciens_roles_objets = is_array($tables['spip_documents']['roles_objets']) ?
174                        $tables['spip_documents']['roles_objets'] : array();
175
176                // on mélange le tout
177                $roles_titres = array_merge($anciens_roles_titres, $nouveaux_roles_titres);
178                $roles_objets = array_merge($anciens_roles_objets, $nouveaux_roles_objets);
179
180                array_set_merge($tables, 'spip_documents', array(
181                        'roles_titres' => $roles_titres,
182                        'roles_objets' => $roles_objets
183                ));
184        }
185
186        return $tables;
187}
Note: See TracBrowser for help on using the repository browser.