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

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

Supprimer des autorisations devenues inutiles avant de les revoir toutes.

  • Property svn:eol-style set to native
File size: 8.5 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 d'une espèce qui est un taxon
264 * de la table `spip_taxons` dont l'indicateur `espece` est à 'oui'.
265 *
266 * @param  string $faire Action demandée
267 * @param  string $type  Type d'objet sur lequel appliquer l'action
268 * @param  int    $id    Identifiant de l'objet
269 * @param  array  $qui   Description de l'auteur demandant l'autorisation
270 * @param  array  $opt   Options de cette autorisation
271 * @return bool          true s'il a le droit, false sinon
272**/
273function autoriser_espececreer_menu_dist($faire, $type, $id, $qui, $opt){
274        return autoriser('creer', 'espece', '', $qui, $opt);
275}
276
277/**
278 * Autorisation de créer (espece)
279 *
280 * @param  string $faire Action demandée
281 * @param  string $type  Type d'objet sur lequel appliquer l'action
282 * @param  int    $id    Identifiant de l'objet
283 * @param  array  $qui   Description de l'auteur demandant l'autorisation
284 * @param  array  $opt   Options de cette autorisation
285 * @return bool          true s'il a le droit, false sinon
286**/
287function autoriser_espece_creer_dist($faire, $type, $id, $qui, $opt) {
288
289        include_spip('inc/taxonomie');
290        include_spip('taxonomie_fonctions');
291
292        // On vérifie qu'un règne est bien déjà chargé
293        $regnes = regne_lister();
294        $regne_existe = false;
295        foreach ($regnes as $_regne) {
296                if (regne_existe($_regne, $meta_regne)) {
297                        $regne_existe = true;
298                }
299        }
300
301        // Il faut aussi être admin ou rédacteur.
302        $autoriser = $regne_existe and autoriser('creer', 'taxon', $id, $qui, $opt);
303
304        return $autoriser;
305}
Note: See TracBrowser for help on using the repository browser.