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

Last change on this file since 114150 was 114150, checked in by eric@…, 7 months ago

Renommer la fonction regne_lister() en regne_lister_defaut() et créer la fonction regne_repertorier() qui retourne les règnes chargés en base.
Ne pas afficher d'espèce si le règne n'est pas chargé.
Corriger les affichages si la liste des taxons est vide.

  • 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
62        $autoriser = false;
63        if (intval($id)) {
64                $autoriser = autoriser('creer', 'taxon', $id, $qui, $opt);
65        }
66
67        return $autoriser;
68}
69
70/**
71 * Autorisation de supprimer un taxon : aucun taxon ne peut être supprimé individuellement.
72 *
73 * @param string        $faire
74 *              Action demandée.
75 * @param string        $type
76 *              Type d'objet sur lequel appliquer l'action.
77 * @param int           $id
78 *              Identifiant de l'objet.
79 * @param array         $qui
80 *              Description de l'auteur demandant l'autorisation.
81 * @param array         $opt
82 *              Options de cette autorisation.
83 *
84 * @return bool
85 *              `true` si l'autoriation est donnée, `false` sinon
86**/
87function autoriser_taxon_supprimer_dist($faire, $type, $id, $qui, $opt) {
88        return false;
89}
90
91/**
92 * Autorisation de voir un taxon : tout le monde est autorisé.
93 *
94 * @param string        $faire
95 *              Action demandée.
96 * @param string        $type
97 *              Type d'objet sur lequel appliquer l'action.
98 * @param int           $id
99 *              Identifiant de l'objet.
100 * @param array         $qui
101 *              Description de l'auteur demandant l'autorisation.
102 * @param array         $opt
103 *              Options de cette autorisation.
104 *
105 * @return bool
106 *              `true` si l'autoriation est donnée, `false` sinon
107**/
108function autoriser_taxon_voir_dist($faire, $type, $id, $qui, $opt) {
109        return true;
110}
111
112/**
113 * Autorisation d'iconifier un taxon : seules les espèces et les taxons de rang inférieur possède un logo.
114 *
115 * @param string        $faire
116 *              Action demandée.
117 * @param string        $type
118 *              Type d'objet sur lequel appliquer l'action.
119 * @param int           $id
120 *              Identifiant de l'objet.
121 * @param array         $qui
122 *              Description de l'auteur demandant l'autorisation.
123 * @param array         $opt
124 *              Options de cette autorisation.
125 *
126 * @return bool
127 *              `true` si l'autoriation est donnée, `false` sinon
128**/
129function autoriser_taxon_iconifier_dist($faire, $type, $id, $qui, $opt) {
130
131        $autoriser = false;
132
133        if ($id_taxon = intval($id)) {
134                // On récupère le champ indiquant si le taxon est une espèce ou pas.
135                $where = array("id_taxon=$id_taxon");
136                $espece = sql_getfetsel('espece', 'spip_taxons', $where);
137                if ($espece == 'oui') {
138                        $autoriser = true;
139                }
140        }
141
142        return $autoriser;
143}
144
145/**
146 * Autorisation de modifier le statut d'un taxon.
147 * Cela n'est possible que :
148 * - si l'auteur possède l'autorisation de modifier le taxon
149 * - et le taxon est une espèce
150 * - et que l'espèce est soit une feuille de la hiérarchie soit possède des enfants dont aucun n'est au statut
151 *   publié.
152 *
153 * @param object $faire
154 * @param object $type
155 * @param object $id
156 * @param object $qui
157 * @param object $opt
158 *
159 * @return
160 *        `true`si autorisé, `false`sinon.
161 */
162function autoriser_taxon_instituer_dist($faire, $type, $id, $qui, $opt) {
163
164        $autoriser = false;
165
166        if ($id_taxon = intval($id)) {
167                // On récupère les informations sur le taxon concerné et en particulier si celui-ci est bien une espèce
168                // ou un descendant d'espèce.
169                $from = 'spip_taxons';
170                $where = array("id_taxon=$id_taxon");
171                $select = array('espece', 'statut', 'tsn');
172                $taxon = sql_fetsel($select, $from, $where);
173
174                if (($taxon['espece'] == 'oui') and  autoriser('modifier', 'taxon', $id_taxon, $qui, $opt)) {
175                        // On vérifie que l'espèce ne possède pas des descendants directs
176                        $where = array('tsn_parent=' . intval($taxon['tsn']));
177                        $select = array('statut');
178                        $enfants = sql_allfetsel($select, $from, $where);
179                        if (!$enfants) {
180                                // Si le taxon est une feuille de la hiérarchie alors il peut toujours être institué.
181                                $autoriser = true;
182                        } else {
183                                // Le taxon a des descendants.
184                                // - si un descendants est publié alors l'espèce concernée l'est aussi et ne peut pas être
185                                //   instituée (prop ou poubelle) sous peine de casser la hiérarchie.
186                                // - si aucun descendant n'est publié alors quelque soit le statut de l'espèce concernée celle-ci
187                                //   peut être instituée.
188                                if (!in_array('publie', array_column($enfants, 'statut'))) {
189                                        $autoriser = true;
190                                }
191                        }
192                }
193        }
194
195        return $autoriser;
196}
197
198
199/**
200 * Autorisation de voir la liste des taxons : tout le monde est autorisé.
201 *
202 * @param string        $faire
203 *              Action demandée.
204 * @param string        $type
205 *              Type d'objet sur lequel appliquer l'action.
206 * @param int           $id
207 *              Identifiant de l'objet.
208 * @param array         $qui
209 *              Description de l'auteur demandant l'autorisation.
210 * @param array         $opt
211 *              Options de cette autorisation.
212 *
213 * @return bool
214 *              `true` si l'autoriation est donnée, `false` sinon
215**/
216function autoriser_taxons_voir_dist($faire, $type, $id, $qui, $opt) {
217        return true;
218}
219
220
221/**
222 * Autorisation sur l'entrée de menu affichant la liste des taxons : même autorisation que
223 * `voir_taxons`, c'est-à-dire, tout le monde.
224 *
225 * @param string        $faire
226 *              Action demandée.
227 * @param string        $type
228 *              Type d'objet sur lequel appliquer l'action.
229 * @param int           $id
230 *              Identifiant de l'objet.
231 * @param array         $qui
232 *              Description de l'auteur demandant l'autorisation.
233 * @param array         $opt
234 *              Options de cette autorisation.
235 *
236 * @return bool
237 *              `true` si l'autoriation est donnée, `false` sinon
238**/
239function autoriser_taxons_menu_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
240        return
241                autoriser('voir', '_taxons', $id, $qui, $opt);
242}
243
244// -----------------
245// Objet especes
246
247
248/**
249 * Autorisation de voir un élément de menu (especes)
250 *
251 * @param  string $faire Action demandée
252 * @param  string $type  Type d'objet sur lequel appliquer l'action
253 * @param  int    $id    Identifiant de l'objet
254 * @param  array  $qui   Description de l'auteur demandant l'autorisation
255 * @param  array  $opt   Options de cette autorisation
256 * @return bool          true s'il a le droit, false sinon
257**/
258function autoriser_especes_menu_dist($faire, $type, $id, $qui, $opt){
259        return true;
260}
261
262
263/**
264 * Autorisation de voir le bouton d'accès rapide de création d'une espèce qui est un taxon
265 * de la table `spip_taxons` dont l'indicateur `espece` est à 'oui'.
266 *
267 * @param  string $faire Action demandée
268 * @param  string $type  Type d'objet sur lequel appliquer l'action
269 * @param  int    $id    Identifiant de l'objet
270 * @param  array  $qui   Description de l'auteur demandant l'autorisation
271 * @param  array  $opt   Options de cette autorisation
272 * @return bool          true s'il a le droit, false sinon
273**/
274function autoriser_espececreer_menu_dist($faire, $type, $id, $qui, $opt){
275        return autoriser('creer', 'espece', '', $qui, $opt);
276}
277
278/**
279 * Autorisation de créer (espece)
280 *
281 * @param  string $faire Action demandée
282 * @param  string $type  Type d'objet sur lequel appliquer l'action
283 * @param  int    $id    Identifiant de l'objet
284 * @param  array  $qui   Description de l'auteur demandant l'autorisation
285 * @param  array  $opt   Options de cette autorisation
286 * @return bool          true s'il a le droit, false sinon
287**/
288function autoriser_espece_creer_dist($faire, $type, $id, $qui, $opt) {
289
290        // On vérifie qu'un règne est bien déjà chargé
291        include_spip('inc/taxonomie');
292        $regnes = regne_lister_defaut();
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 autoriser('creer', 'taxon', $id, $qui, $opt);
302
303        return $autoriser;
304}
Note: See TracBrowser for help on using the repository browser.