source: spip-zone/_plugins_/taxonomie/trunk/taxonomie_autorisations.php @ 109679

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

Gestion des logos et suppression de fichiers inutiles

  • Property svn:eol-style set to native
File size: 10.0 KB
Line 
1<?php
2/**
3 * Définit les autorisations du plugin Taxonomie
4 *
5 * @package    SPIP\TAXONOMIE\TAXON
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10
11/**
12 * Fonction d'appel pour le pipeline.
13 *
14 * @pipeline autoriser
15**/
16function taxonomie_autoriser(){}
17
18
19// -----------------
20// Objet taxons
21
22/**
23 * Autorisation de créer un taxon : il faut être au moins rédacteur.
24 *
25 * @param string        $faire
26 *              Action demandée.
27 * @param string        $type
28 *              Type d'objet sur lequel appliquer l'action.
29 * @param int           $id
30 *              Identifiant de l'objet.
31 * @param array         $qui
32 *              Description de l'auteur demandant l'autorisation.
33 * @param array         $opt
34 *              Options de cette autorisation.
35 *
36 * @return bool
37 *              `true` si l'autoriation est donnée, `false` sinon
38**/
39function autoriser_taxon_creer_dist($faire, $type, $id, $qui, $opt) {
40        return in_array($qui['statut'], array('0minirezo', '1comite')); 
41}
42
43/**
44 * Autorisation de modifier un taxon : il faut pouvoir en créer un et que l'id soit précisé.
45 *
46 * @param string        $faire
47 *              Action demandée.
48 * @param string        $type
49 *              Type d'objet sur lequel appliquer l'action.
50 * @param int           $id
51 *              Identifiant de l'objet.
52 * @param array         $qui
53 *              Description de l'auteur demandant l'autorisation.
54 * @param array         $opt
55 *              Options de cette autorisation.
56 *
57 * @return bool
58 *              `true` si l'autoriation est donnée, `false` sinon
59**/
60function autoriser_taxon_modifier_dist($faire, $type, $id, $qui, $opt) {
61        $autoriser = false;
62        if (intval($id)) {
63                $autoriser = autoriser('creer', 'taxon', $id, $qui, $opt);
64        }
65
66        return $autoriser;
67}
68
69/**
70 * Autorisation de supprimer un taxon : aucun taxon ne peut être supprimé individuellement.
71 *
72 * @param string        $faire
73 *              Action demandée.
74 * @param string        $type
75 *              Type d'objet sur lequel appliquer l'action.
76 * @param int           $id
77 *              Identifiant de l'objet.
78 * @param array         $qui
79 *              Description de l'auteur demandant l'autorisation.
80 * @param array         $opt
81 *              Options de cette autorisation.
82 *
83 * @return bool
84 *              `true` si l'autoriation est donnée, `false` sinon
85**/
86function autoriser_taxon_supprimer_dist($faire, $type, $id, $qui, $opt) {
87        return false;
88}
89
90/**
91 * Autorisation de voir un taxon : tout le monde est autorisé.
92 *
93 * @param string        $faire
94 *              Action demandée.
95 * @param string        $type
96 *              Type d'objet sur lequel appliquer l'action.
97 * @param int           $id
98 *              Identifiant de l'objet.
99 * @param array         $qui
100 *              Description de l'auteur demandant l'autorisation.
101 * @param array         $opt
102 *              Options de cette autorisation.
103 *
104 * @return bool
105 *              `true` si l'autoriation est donnée, `false` sinon
106**/
107function autoriser_taxon_voir_dist($faire, $type, $id, $qui, $opt) {
108        return true;
109}
110
111/**
112 * Autorisation d'iconifier un taxon : seules les espèces et les taxons de rang inférieur possède un logo.
113 *
114 * @param string        $faire
115 *              Action demandée.
116 * @param string        $type
117 *              Type d'objet sur lequel appliquer l'action.
118 * @param int           $id
119 *              Identifiant de l'objet.
120 * @param array         $qui
121 *              Description de l'auteur demandant l'autorisation.
122 * @param array         $opt
123 *              Options de cette autorisation.
124 *
125 * @return bool
126 *              `true` si l'autoriation est donnée, `false` sinon
127**/
128function autoriser_taxon_iconifier_dist($faire, $type, $id, $qui, $opt) {
129
130        $autoriser = false;
131
132        if ($id_taxon = intval($id)) {
133                // On récupère le champ indiquant si le taxon est une espèce ou pas.
134                $where = array("id_taxon=$id_taxon");
135                $espece = sql_getfetsel('espece', 'spip_taxons', $where);
136                if ($espece == 'oui') {
137                        $autoriser = true;
138                }
139        }
140
141        return $autoriser;
142}
143
144/**
145 * Autorisation de modifier le statut d'un taxon.
146 * Cela n'est possible que :
147 * - si l'auteur possède l'autorisation de modifier le taxon
148 * - et le taxon est une espèce
149 * - et que l'espèce est soit une feuille de la hiérarchie soit possède des enfants dont aucun n'est au statut
150 *   publié.
151 *
152 * @param object $faire
153 * @param object $type
154 * @param object $id
155 * @param object $qui
156 * @param object $opt
157 *
158 * @return
159 *        `true`si autorisé, `false`sinon.
160 */
161function autoriser_taxon_instituer_dist($faire, $type, $id, $qui, $opt) {
162
163        $autoriser = false;
164
165        if ($id_taxon = intval($id)) {
166                // On récupère les informations sur le taxon concerné et en particulier si celui-ci est bien une espèce
167                // ou un descendant d'espèce.
168                $from = 'spip_taxons';
169                $where = array("id_taxon=$id_taxon");
170                $select = array('espece', 'statut', 'tsn');
171                $taxon = sql_fetsel($select, $from, $where);
172
173                if (($taxon['espece'] == 'oui') and  autoriser('modifier', 'taxon', $id_taxon, $qui, $opt)) {
174                        // On vérifie que l'espèce ne possède pas des descendants directs
175                        $where = array('tsn_parent=' . intval($taxon['tsn']));
176                        $select = array('statut');
177                        $enfants = sql_allfetsel($select, $from, $where);
178                        if (!$enfants) {
179                                // Si le taxon est une feuille de la hiérarchie alors il peut toujours être institué.
180                                $autoriser = true;
181                        } else {
182                                // Le taxon a des descendants.
183                                // - si un descendants est publié alors l'espèce concernée l'est aussi et ne peut pas être
184                                //   instituée (prop ou poubelle) sous peine de casser la hiérarchie.
185                                // - si aucun descendant n'est publié alors quelque soit le statut de l'espèce concernée celle-ci
186                                //   peut être instituée.
187                                if (!in_array('publie', array_column($enfants, 'statut'))) {
188                                        $autoriser = true;
189                                }
190                        }
191                }
192        }
193
194        return $autoriser;
195}
196
197
198/**
199 * Autorisation de voir la liste des taxons : tout le monde est autorisé.
200 *
201 * @param string        $faire
202 *              Action demandée.
203 * @param string        $type
204 *              Type d'objet sur lequel appliquer l'action.
205 * @param int           $id
206 *              Identifiant de l'objet.
207 * @param array         $qui
208 *              Description de l'auteur demandant l'autorisation.
209 * @param array         $opt
210 *              Options de cette autorisation.
211 *
212 * @return bool
213 *              `true` si l'autoriation est donnée, `false` sinon
214**/
215function autoriser_taxons_voir_dist($faire, $type, $id, $qui, $opt) {
216        return true;
217}
218
219
220/**
221 * Autorisation sur l'entrée de menu affichant la liste des taxons : même autorisation que
222 * `voir_taxons`, c'est-à-dire, tout le monde.
223 *
224 * @param string        $faire
225 *              Action demandée.
226 * @param string        $type
227 *              Type d'objet sur lequel appliquer l'action.
228 * @param int           $id
229 *              Identifiant de l'objet.
230 * @param array         $qui
231 *              Description de l'auteur demandant l'autorisation.
232 * @param array         $opt
233 *              Options de cette autorisation.
234 *
235 * @return bool
236 *              `true` si l'autoriation est donnée, `false` sinon
237**/
238function autoriser_taxons_menu_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
239        return
240                autoriser('voir', '_taxons', $id, $qui, $opt);
241}
242
243// -----------------
244// Objet especes
245
246
247/**
248 * Autorisation de voir un élément de menu (especes)
249 *
250 * @param  string $faire Action demandée
251 * @param  string $type  Type d'objet sur lequel appliquer l'action
252 * @param  int    $id    Identifiant de l'objet
253 * @param  array  $qui   Description de l'auteur demandant l'autorisation
254 * @param  array  $opt   Options de cette autorisation
255 * @return bool          true s'il a le droit, false sinon
256**/
257function autoriser_especes_menu_dist($faire, $type, $id, $qui, $opt){
258        return true;
259}
260
261
262/**
263 * Autorisation de voir le bouton d'accès rapide de création (espece)
264 *
265 * @param  string $faire Action demandée
266 * @param  string $type  Type d'objet sur lequel appliquer l'action
267 * @param  int    $id    Identifiant de l'objet
268 * @param  array  $qui   Description de l'auteur demandant l'autorisation
269 * @param  array  $opt   Options de cette autorisation
270 * @return bool          true s'il a le droit, false sinon
271**/
272function autoriser_espececreer_menu_dist($faire, $type, $id, $qui, $opt){
273        return autoriser('creer', 'espece', '', $qui, $opt);
274}
275
276/**
277 * Autorisation de créer (espece)
278 *
279 * @param  string $faire Action demandée
280 * @param  string $type  Type d'objet sur lequel appliquer l'action
281 * @param  int    $id    Identifiant de l'objet
282 * @param  array  $qui   Description de l'auteur demandant l'autorisation
283 * @param  array  $opt   Options de cette autorisation
284 * @return bool          true s'il a le droit, false sinon
285**/
286function autoriser_espece_creer_dist($faire, $type, $id, $qui, $opt) {
287
288        include_spip('inc/taxonomie');
289        include_spip('taxonomie_fonctions');
290
291        // On vérifie qu'un règne est bien déjà chargé
292        $regnes = regne_lister();
293        $regne_existe = false;
294        foreach ($regnes as $_regne) {
295                if (regne_existe($_regne, $meta_regne)) {
296                        $regne_existe = true;
297                }
298        }
299
300        // Il faut aussi être admin ou rédacteur.
301        $autoriser = $regne_existe and in_array($qui['statut'], array('0minirezo', '1comite'));
302
303        return $autoriser;
304}
305
306/**
307 * Autorisation de voir (espece)
308 *
309 * @param  string $faire Action demandée
310 * @param  string $type  Type d'objet sur lequel appliquer l'action
311 * @param  int    $id    Identifiant de l'objet
312 * @param  array  $qui   Description de l'auteur demandant l'autorisation
313 * @param  array  $opt   Options de cette autorisation
314 * @return bool          true s'il a le droit, false sinon
315**/
316function autoriser_espece_voir_dist($faire, $type, $id, $qui, $opt) {
317        return true;
318}
319
320/**
321 * Autorisation de modifier (espece)
322 *
323 * @param  string $faire Action demandée
324 * @param  string $type  Type d'objet sur lequel appliquer l'action
325 * @param  int    $id    Identifiant de l'objet
326 * @param  array  $qui   Description de l'auteur demandant l'autorisation
327 * @param  array  $opt   Options de cette autorisation
328 * @return bool          true s'il a le droit, false sinon
329**/
330function autoriser_espece_modifier_dist($faire, $type, $id, $qui, $opt) {
331        return in_array($qui['statut'], array('0minirezo', '1comite'));
332}
333
334/**
335 * Autorisation de supprimer (espece)
336 *
337 * @param  string $faire Action demandée
338 * @param  string $type  Type d'objet sur lequel appliquer l'action
339 * @param  int    $id    Identifiant de l'objet
340 * @param  array  $qui   Description de l'auteur demandant l'autorisation
341 * @param  array  $opt   Options de cette autorisation
342 * @return bool          true s'il a le droit, false sinon
343**/
344function autoriser_espece_supprimer_dist($faire, $type, $id, $qui, $opt) {
345        return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
346}
Note: See TracBrowser for help on using the repository browser.