source: spip-zone/_core_/plugins/mots/mots_autoriser.php @ 93617

Last change on this file since 93617 was 93617, checked in by cedric@…, 5 years ago

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

File size: 12.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2015                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13/**
14 * Définit les autorisations du plugin mots
15 *
16 * @package SPIP\Mots\Autorisations
17 **/
18if (!defined('_ECRIRE_INC_VERSION')) {
19        return;
20}
21
22/**
23 * Fonction d'appel pour le pipeline
24 *
25 * @pipeline autoriser
26 */
27function mots_autoriser() { }
28
29/**
30 * Autorisation de voir un élément de menu
31 *
32 * @param  string $faire Action demandée
33 * @param  string $type Type d'objet sur lequel appliquer l'action
34 * @param  int $id Identifiant de l'objet
35 * @param  array $qui Description de l'auteur demandant l'autorisation
36 * @param  array $opt Options de cette autorisation
37 * @return bool          true s'il a le droit, false sinon
38 **/
39function autoriser_mots_menu_dist($faire, $type, $id, $qui, $opt) {
40        if ($qui['statut'] == '0minirezo') {
41                return ($GLOBALS['meta']['articles_mots'] != 'non' OR sql_countsel('spip_groupes_mots'));
42        }
43        $where = "";
44        if ($qui['statut'] == '1comite') {
45                $where = "comite='oui' OR forum='oui'";
46        }
47        if ($qui['statut'] == '6forum') {
48                $where = "forum='oui'";
49        }
50
51        return ($where
52                AND $GLOBALS['meta']['articles_mots'] != 'non'
53                AND sql_countsel('spip_groupes_mots', $where));
54}
55
56/**
57 * Autorisation de voir le bouton d'accès rapide à la création d'un mot clé
58 *
59 * @param  string $faire Action demandée
60 * @param  string $type Type d'objet sur lequel appliquer l'action
61 * @param  int $id Identifiant de l'objet
62 * @param  array $qui Description de l'auteur demandant l'autorisation
63 * @param  array $opt Options de cette autorisation
64 * @return bool          true s'il a le droit, false sinon
65 **/
66function autoriser_motcreer_menu_dist($faire, $type, $id, $qui, $opt) {
67        // [fixme] Meta 'article_mots' mal nommée maintenant
68        // car elle désigne l'activation ou non des mots clés, quelque soit l'objet.
69        return ($GLOBALS['meta']['articles_mots'] != 'non'
70                AND sql_countsel('spip_groupes_mots')
71                AND autoriser('creer', 'mot', null, $qui, $opt));
72}
73
74
75/**
76 * Autorisation de voir un groupe de mots
77 *
78 * L'autorisation est donnée selon la configuration du groupe
79 * qui gère cela par type d'auteur (administrateur, rédacteurs, visiteurs)
80 *
81 * @param  string $faire Action demandée
82 * @param  string $type Type d'objet sur lequel appliquer l'action
83 * @param  int $id Identifiant de l'objet
84 * @param  array $qui Description de l'auteur demandant l'autorisation
85 * @param  array $opt Options de cette autorisation
86 * @return bool          true s'il a le droit, false sinon
87 **/
88function autoriser_groupemots_voir_dist($faire, $type, $id, $qui, $opt) {
89        if ($qui['statut'] == '0minirezo') {
90                return true;
91        }
92        $acces = sql_fetsel("comite,forum", "spip_groupes_mots", "id_groupe=" . intval($id));
93        if ($qui['statut'] == '1comite' AND ($acces['comite'] == 'oui' OR $acces['forum'] == 'oui')) {
94                return true;
95        }
96        if ($qui['statut'] == '6forum' AND $acces['forum'] == 'oui') {
97                return true;
98        }
99
100        return false;
101}
102
103/**
104 * Autorisation de créer un groupe de mots
105 *
106 * @param  string $faire Action demandée
107 * @param  string $type Type d'objet sur lequel appliquer l'action
108 * @param  int $id Identifiant de l'objet
109 * @param  array $qui Description de l'auteur demandant l'autorisation
110 * @param  array $opt Options de cette autorisation
111 * @return bool          true s'il a le droit, false sinon
112 **/
113function autoriser_groupemots_creer_dist($faire, $type, $id, $qui, $opt) {
114        return
115                $qui['statut'] == '0minirezo'
116                AND !$qui['restreint'];
117}
118
119
120/**
121 * Autorisation de modifier un groupe de mots
122 *
123 * Cela inclut également l'ajout ou modification des mots lui appartenant
124 *
125 * @param  string $faire Action demandée
126 * @param  string $type Type d'objet sur lequel appliquer l'action
127 * @param  int $id Identifiant de l'objet
128 * @param  array $qui Description de l'auteur demandant l'autorisation
129 * @param  array $opt Options de cette autorisation
130 * @return bool          true s'il a le droit, false sinon
131 **/
132function autoriser_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) {
133        return
134                $qui['statut'] == '0minirezo' AND !$qui['restreint']
135                AND autoriser('voir', 'groupemots', $id, $qui, $opt);
136}
137
138
139/**
140 * Autorisation de supprimer un groupe de mots
141 *
142 * @param  string $faire Action demandée
143 * @param  string $type Type d'objet sur lequel appliquer l'action
144 * @param  int $id Identifiant de l'objet
145 * @param  array $qui Description de l'auteur demandant l'autorisation
146 * @param  array $opt Options de cette autorisation
147 * @return bool          true s'il a le droit, false sinon
148 **/
149function autoriser_groupemots_supprimer_dist($faire, $type, $id, $qui, $opt) {
150        if (!autoriser('modifier', 'groupemots', $id)) {
151                return false;
152        }
153
154        return sql_countsel('spip_mots', 'id_groupe=' . intval($id)) ? false : true;
155}
156
157/**
158 * Autorisation de modifier un mot
159 *
160 * Il faut avoir le droit de modifier le groupe parent
161 *
162 * Note : passer l'id_groupe dans le tableau d'option
163 * permet de gagner du CPU et une requête SQL (c'est ce que fait l'espace privé)
164 *
165 * @param  string $faire Action demandée
166 * @param  string $type Type d'objet sur lequel appliquer l'action
167 * @param  int $id Identifiant de l'objet
168 * @param  array $qui Description de l'auteur demandant l'autorisation
169 * @param  array $opt Options de cette autorisation
170 * @return bool          true s'il a le droit, false sinon
171 **/
172function autoriser_mot_modifier_dist($faire, $type, $id, $qui, $opt) {
173        return
174                isset($opt['id_groupe'])
175                        ? autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt)
176                        : (
177                        $t = sql_getfetsel("id_groupe", "spip_mots", "id_mot=" . intval($id))
178                        AND autoriser('modifier', 'groupemots', $t, $qui, $opt)
179                );
180}
181
182/**
183 * Autorisation de créer un mot
184 *
185 * Vérifie si une association est demandée en option, qu'elle est possible dans un des groupes,
186 * c'est à dire qu'une liaison est possible entre un groupe et l'objet lié
187 *
188 * Si l'id_groupe est passé en option,
189 * vérifie également que l'auteur a le droit de modifier ce groupe
190 *
191 * @param  string $faire Action demandée
192 * @param  string $type Type d'objet sur lequel appliquer l'action
193 * @param  int $id Identifiant de l'objet
194 * @param  array $qui Description de l'auteur demandant l'autorisation
195 * @param  array $opt Options de cette autorisation
196 * @return bool          true s'il a le droit, false sinon
197 **/
198function autoriser_mot_creer_dist($faire, $type, $id, $qui, $opt) {
199        if ($qui['statut'] != '0minirezo' OR $qui['restreint']) {
200                return false;
201        }
202
203        $where = '';
204        // si objet associe, verifier qu'un groupe peut etre associe
205        // a la table correspondante
206        if (isset($opt['associer_objet'])
207                AND $associer_objet = $opt['associer_objet']
208        ) {
209                if (!preg_match(',^(\w+)\|[0-9]+$,', $associer_objet, $match)) {
210                        return false;
211                }
212                $where = "tables_liees REGEXP '(^|,)" . addslashes(table_objet($match[1])) . "($|,)'";
213        }
214        // si pas de groupe de mot qui colle, pas le droit
215        if (!sql_countsel('spip_groupes_mots', $where)) {
216                return false;
217        }
218
219        if (isset($opt['id_groupe'])) {
220                return autoriser('modifier', 'groupemots', $opt['id_groupe']);
221        }
222
223        return true;
224}
225
226/**
227 * Autorisation de supprimer un mot
228 *
229 * Par défaut : pouvoir créer un mot dans le groupe
230 *
231 * @param  string $faire Action demandée
232 * @param  string $type Type d'objet sur lequel appliquer l'action
233 * @param  int $id Identifiant de l'objet
234 * @param  array $qui Description de l'auteur demandant l'autorisation
235 * @param  array $opt Options de cette autorisation
236 * @return bool          true s'il a le droit, false sinon
237 **/
238function autoriser_mot_supprimer_dist($faire, $type, $id, $qui, $opt) {
239        // On cherche le groupe du mot
240        $id_groupe = $opt['id_groupe'] ? $opt['id_groupe'] : sql_getfetsel('id_groupe', 'spip_mots',
241                'id_mot = ' . intval($id));
242
243        return autoriser('creer', 'mot', $id, $qui, array('id_groupe' => $id_groupe));
244}
245
246
247/**
248 * Autorisation d'associer des mots à un objet
249 *
250 * Si groupe_champ ou id_groupe est fourni dans le tableau d'options,
251 * on regarde les droits pour ce groupe en particulier
252 *
253 * On interdit aussi d'associer des mots à d'autres mots ou groupes de mots
254 *
255 * @param  string $faire Action demandée
256 * @param  string $type Type d'objet sur lequel appliquer l'action
257 * @param  int $id Identifiant de l'objet
258 * @param  array $qui Description de l'auteur demandant l'autorisation
259 * @param  array $opt Options de cette autorisation
260 * @return bool          true s'il a le droit, false sinon
261 */
262function autoriser_associermots_dist($faire, $type, $id, $qui, $opt) {
263        // jamais de mots sur des mots
264        if ($type == 'mot') {
265                return false;
266        }
267        if ($type == 'groupemots') {
268                return false;
269        }
270        $droit = substr($qui['statut'], 1);
271
272        if (!isset($opt['groupe_champs']) AND !isset($opt['id_groupe'])) {
273                // chercher si un groupe est autorise pour mon statut
274                // et pour la table demandee
275                $table = addslashes(table_objet($type));
276                if (sql_countsel('spip_groupes_mots',
277                        "tables_liees REGEXP '(^|,)$table($|,)' AND " . addslashes($droit) . "='oui'")) {
278                        return true;
279                }
280        } // cas d'un groupe en particulier
281        else {
282                // on recupere les champs du groupe s'ils ne sont pas passes en opt
283                if (!isset($opt['groupe_champs'])) {
284                        if (!$id_groupe = $opt['id_groupe']) {
285                                return false;
286                        }
287                        include_spip('base/abstract_sql');
288                        $opt['groupe_champs'] = sql_fetsel("*", "spip_groupes_mots", "id_groupe=" . intval($id_groupe));
289                }
290                $droit = $opt['groupe_champs'][$droit];
291
292                return
293                        ($droit == 'oui')
294                        AND
295                        // on verifie que l'objet demande est bien dans les tables liees
296                        in_array(
297                                table_objet($type),
298                                explode(',', $opt['groupe_champs']['tables_liees'])
299                        );
300        }
301
302        return false;
303}
304
305
306/**
307 * Autorisation d'affichier le sélecteur de mots
308 *
309 * Vérifie le droit d'afficher le selecteur de mots
310 * pour un groupe de mot donné, dans un objet / id_objet donné
311 *
312 * C'est fonction de la configuration du groupe de mots.
313 *
314 * @param  string $faire Action demandée
315 * @param  string $type Type d'objet sur lequel appliquer l'action
316 * @param  int $id Identifiant de l'objet
317 * @param  array $qui Description de l'auteur demandant l'autorisation
318 * @param  array $opt Options de cette autorisation
319 * @return bool          true s'il a le droit, false sinon
320 */
321function autoriser_groupemots_afficherselecteurmots_dist($faire, $type, $id, $qui, $opt) {
322        if (!isset($opt['minirezo']) || !isset($opt['comite'])) {
323                $i = sql_fetsel(
324                        array('minirezo', 'comite'),
325                        'spip_groupes_mots',
326                        'id_groupe=' . intval($id));
327                if (!$i) {
328                        return false;
329                } # le groupe n'existe pas
330                $admin = $i['minirezo'];
331                $redac = $i['comite'];
332        } else {
333                $admin = $opt['minirezo'];
334                $redac = $opt['comite'];
335        }
336        $statuts = array();
337        if ($admin == 'oui') {
338                $statuts[] = '0minirezo';
339        }
340        if ($redac == 'oui') {
341                $statuts[] = '1comite';
342        }
343
344        return in_array($qui['statut'], $statuts);
345}
346
347
348/**
349 * Autorisation d'affichier le formulaire de logo
350 *
351 * @param  string $faire Action demandée
352 * @param  string $type Type d'objet sur lequel appliquer l'action
353 * @param  int $id Identifiant de l'objet
354 * @param  array $qui Description de l'auteur demandant l'autorisation
355 * @param  array $opt Options de cette autorisation
356 * @return bool          true s'il a le droit, false sinon
357 */
358function autoriser_mot_iconifier_dist($faire, $type, $id, $qui, $opt) {
359        return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
360}
361
362/**
363 * Autorisation d'affichier le formulaire de logo
364 *
365 * @param  string $faire Action demandée
366 * @param  string $type Type d'objet sur lequel appliquer l'action
367 * @param  int $id Identifiant de l'objet
368 * @param  array $qui Description de l'auteur demandant l'autorisation
369 * @param  array $opt Options de cette autorisation
370 * @return bool          true s'il a le droit, false sinon
371 */
372function autoriser_groupemots_iconifier_dist($faire, $type, $id, $qui, $opt) {
373        return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
374}
375
376?>
Note: See TracBrowser for help on using the repository browser.