source: spip-zone/_plugins_/noizetier/trunk/noizetier_autorisations.php @ 113568

Last change on this file since 113568 was 113522, checked in by eric@…, 5 months ago

Renommage des API page, objet, bloc et conteneur du noiZetier.

  • Property svn:eol-style set to native
File size: 10.0 KB
Line 
1<?php
2// Sécurité
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7/**
8 * Fonction appelée par le pipeline
9 *
10 */
11function noizetier_autoriser() {}
12
13/**
14 * Autorisation minimale d'accès à toutes les pages du noiZetier sauf celle de configuration
15 * du plugin lui-même.
16 * Par défaut, seuls les administrateurs complets sont autorisés à utiliser le noiZetier.
17 * Cette autorisation est à la base de la plupart des autres autorisations du plugin.
18 *
19 * @param $faire
20 * @param $type
21 * @param $id
22 * @param $qui
23 * @param $options
24 *
25 * @return bool
26 */
27function autoriser_noizetier_dist($faire, $type, $id, $qui, $options) {
28        return autoriser('defaut');
29}
30
31/**
32 * Autorisation d'affichage du menu d'accès à la configuration du noiZetier (page=noizetier_pages).
33 * Il faut être autorisé à configurer le noiZetier.
34 *
35 * @param $faire
36 * @param $type
37 * @param $id
38 * @param $qui
39 * @param $options
40 *
41 * @return bool
42 */
43function autoriser_noizetier_menu_dist($faire, $type, $id, $qui, $options) {
44        return autoriser('noizetier');
45}
46
47/**
48 * Autorisation d'accès à la page de configuration du plugin noiZetier (page=configurer_noizetier).
49 * Par défaut, seuls les webmestres sont autorisés à modifier la configuration du noiZetier
50 * et en particulier la liste des pages accessibles par les autres utilisateurs.
51 *
52 * @param $faire
53 * @param $type
54 * @param $id
55 * @param $qui
56 * @param $options
57 *
58 * @return bool
59 */
60function autoriser_noizetier_configurer_dist($faire, $type, $id, $qui, $options) {
61        return autoriser('webmestre');
62}
63
64/**
65 * Autorisation de configuration d'une page ou d'un objet du noiZetier (page=noizetier_page).
66 * La configuration consiste dans tous les cas à manipuler les noisettes des divers blocs de la page et
67 * si la page est une composition virtuelle à éditer ses caractéristiques (page=noizetier_page_edit).
68 * Il faut :
69 * - être autorisé à configurer le noiZetier,
70 * - que la page ou l'objet existe et soit bien accessible pour le noiZetier (i.e. plugin Compositions actif
71 *   si on est en présence d'une composition),
72 * - et que :
73 *   - si on est en présence d'un objet, son type soit bien activé dans la configuration,
74 *   - ou que si on est en présence d'une composition basée sur un type d'objet, celui-ci
75 *     soit bien activé.
76 *
77 * @param $faire
78 *              L'action se nomme configurerpage
79 * @param $type
80 *              Le type est toujours noizetier.
81 * @param $id
82 *              Inutilisé car l'identifiant représente soit la page soit l'objet
83 * @param $qui
84 *              Inutilisé, l'API utilise l'auteur connecté
85 * @param $options
86 *      Permet de passer les identifiants de la page ou de l'objet concerné sous la forme
87 *              d'un tableau associatif dont les index sont     'page' ou 'objet' et 'id_objet'.
88 *
89 * @return bool
90 */
91function autoriser_noizetier_configurerpage_dist($faire, $type, $id, $qui, $options) {
92        $autoriser = false;
93
94        include_spip('inc/noizetier_page');
95        include_spip('inc/noizetier_objet');
96        if (autoriser('noizetier')
97        and (is_array($options) and !empty($options))) {
98                if (!empty($options['page']) and ($configuration = page_noizetier_lire($options['page'], false))
99                and (!$configuration['composition']
100                        or (defined('_DIR_PLUGIN_COMPOSITIONS')
101                        and $configuration['composition']
102                        and (($configuration['est_page_objet'] == 'non')
103                                or (($configuration['est_page_objet'] == 'oui') and page_noizetier_composition_activee($configuration['type'])))))) {
104                        // Cas d'une page
105                        $autoriser = true;
106                } else {
107                        if (!empty($options['objet']) and isset($options['id_objet']) and ($id_objet = intval($options['id_objet']))
108                        and objet_noizetier_type_active($options['objet'])) {
109                                // Cas d'un objet dont le type est activé : on vérifie juste que l'objet existe bien
110                                include_spip('base/objets');
111                                if (($from = table_objet_sql($options['objet']))
112                                and ($id_table_objet = id_table_objet($options['objet']))
113                                and sql_countsel($from, array($id_table_objet . '=' . $id_objet))) {
114                                        $autoriser = true;
115                                }
116                        }
117                }
118        }
119
120        return $autoriser;
121}
122
123/**
124 * Autorisation d'activation des compositions sur un type d'objet. Permet de lancer l'action depuis le noiZetier
125 * sans passer par la configuration du plugin Compositions.
126 * Il faut :
127 * - que le plugin compositions soit activé
128 * - être autorisé à configurer le noiZetier
129 * - que la page source existe et ne soit pas une composition
130 * - que le plugin Compositions soit bien activé
131 * - que l'utilisateur soit autorisé à configurer le plugin Compositions
132 * - et que la page soit celle d'un type d'objet et que les compositions ne soient pas déjà activées.
133 *
134 * @param $faire
135 * @param $type
136 * @param $id
137 * @param $qui
138 * @param $options
139 *
140 * @return bool
141 */
142function autoriser_noizetier_activercomposition_dist($faire, $type, $id, $qui, $options) {
143        $autoriser = false;
144
145        include_spip('inc/noizetier_page');
146        if (
147                test_plugin_actif('compositions')
148                and autoriser('noizetier')
149                and (is_array($options) and !empty($options))
150                and (!empty($options['page']) and ($configuration = page_noizetier_lire($options['page'], false))
151                and !$configuration['composition'])
152                and ($configuration['est_page_objet'] == 'oui')
153                and !page_noizetier_composition_activee($configuration['type'])
154                and autoriser('configurer', 'compositions')
155        ) {
156                $autoriser = true;
157        }
158
159        return $autoriser;
160}
161
162/**
163 * Autorisation de création d'une composition virtuelle du noiZetier à partir
164 * d'une page source (page=noizetier_page_edit).
165 * Il faut :
166 * - être autorisé à configurer le noiZetier
167 * - que la page source existe et ne soit pas une composition
168 * - que le plugin Compositions soit bien activé
169 * - et que si la page est celle d'un type d'objet, que les compositions soient bien activées.
170 *
171 * @param $faire
172 * @param $type
173 * @param $id
174 * @param $qui
175 * @param $options
176 *
177 * @return bool
178 */
179function autoriser_noizetier_creercomposition_dist($faire, $type, $id, $qui, $options) {
180        $autoriser = false;
181
182        include_spip('inc/noizetier_page');
183        if (autoriser('noizetier')
184        and (is_array($options) and !empty($options))
185        and (!empty($options['page']) and ($configuration = page_noizetier_lire($options['page'], false))
186        and !$configuration['composition'])
187        and (defined('_DIR_PLUGIN_COMPOSITIONS'))
188        and (($configuration['est_page_objet'] == 'non')
189                or (($configuration['est_page_objet'] == 'oui') and page_noizetier_composition_activee($configuration['type'])))) {
190                $autoriser = true;
191        }
192
193        return $autoriser;
194}
195
196/**
197 * Autorisation de suppression d'une composition virtuelle du noiZetier.
198 * Il faut :
199 * - être autorisé à configurer la page concernée (pour la suppression des noisettes)
200 * - et que la page existe toujours et soit bien une composition virtuelle.
201 *
202 * @param $faire
203 * @param $type
204 * @param $id
205 * @param $qui
206 * @param $options
207 *
208 * @return bool
209 */
210function autoriser_noizetier_supprimercomposition_dist($faire, $type, $id, $qui, $options) {
211        $autoriser = false;
212
213        include_spip('inc/noizetier_page');
214        if ((is_array($options) and !empty($options['page']))
215        and autoriser('configurerpage', 'noizetier', 0, '', $options)
216        and ($configuration = page_noizetier_lire($options['page'], false))
217        and $configuration['composition']
218        and ($configuration['est_virtuelle'] == 'oui')) {
219                $autoriser = true;
220        }
221
222        return $autoriser;
223}
224
225/**
226 * Autorisation de modification certains paramètres d'une page (page=noizetier_page_edit). Suivant que la page est
227 * une page explicite ou une composition virtuelle la liste des paramètres éditables varie.
228 * Il faut :
229 * - que .
230 * - et être autorisé à créer une composition virtuelle du noiZetier à partir d'une page source qui
231 *   coincide avec le type de la composition virtuelle.
232 *
233 * @param $faire
234 * @param $type
235 * @param $id
236 * @param $qui
237 * @param $options
238 *
239 * @return bool
240 */
241function autoriser_noizetier_modifierpage_dist($faire, $type, $id, $qui, $options) {
242
243        $autoriser = autoriser('configurerpage', 'noizetier', 0, '', $options);
244
245        return $autoriser;
246}
247
248/**
249 * Autorisation de copie d'une composition pour créer une composition virtuelle du noiZetier
250 * possédant les mêmes caractéristiques (page=noizetier_page_edit).
251 * Il faut :
252 * - être autorisé à configurer le noiZetier
253 * - que la page source existe et soit une composition
254 * - et que le plugin Compositions soit bien activé.
255 *
256 * @param $faire
257 * @param $type
258 * @param $id
259 * @param $qui
260 * @param $options
261 *
262 * @return bool
263 */
264function autoriser_noizetier_dupliquercomposition_dist($faire, $type, $id, $qui, $options) {
265        $autoriser = false;
266
267        include_spip('inc/noizetier_page');
268        if (autoriser('noizetier')
269        and (is_array($options) and !empty($options))
270        and (!empty($options['page']) and ($configuration = page_noizetier_lire($options['page'], false))
271        and $configuration['composition'])
272        and defined('_DIR_PLUGIN_COMPOSITIONS')) {
273                $autoriser = true;
274        }
275
276        return $autoriser;
277}
278
279/**
280 * Autorisation d'édition d'une noisette déjà ajoutée dans le bloc d'une page ou d'un contenu
281 * (page=noisette_edit).
282 * Il faut :
283 * - que la noisette existe bien,
284 * - et être autorisé à configurer la page ou le contenu auquel est rattachée la noisette
285 *
286 * @param $faire
287 * @param $type
288 * @param $id
289 * @param $qui
290 * @param $options
291 *
292 * @return bool
293 */
294function autoriser_noizetier_editernoisette_dist($faire, $type, $id, $qui, $options) {
295        $autoriser = false;
296
297        if ($id_noisette = intval($id)) {
298                // On vérifie que la noisette existe bien et on récupère sa localisation (page ou objet) afin d'appeler
299                // l'autorisation de configurer cette page ou objet.
300                $select = array('type', 'composition', 'objet', 'id_objet');
301                $where = array('plugin=' . sql_quote('noizetier'), 'id_noisette=' . $id_noisette);
302                $noisette = sql_fetsel($select, 'spip_noisettes', $where);
303                if ($noisette) {
304                        if ($noisette['objet'] and intval($noisette['id_objet'])) {
305                                $options['objet'] = $noisette['objet'];
306                                $options['id_objet'] = $noisette['id_objet'];
307                        } else {
308                                $options['page'] = $noisette['composition']
309                                        ? $noisette['type'] . '-' . $noisette['composition']
310                                        : $noisette['type'];
311                        }
312                        if (autoriser('configurerpage', 'noizetier', 0, '', $options)) {
313                                $autoriser = true;
314                        }
315                }
316        }
317
318        return $autoriser;
319}
Note: See TracBrowser for help on using the repository browser.