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

Last change on this file since 93092 was 93092, checked in by gilles.vincent@…, 5 years ago

Mise en forme plus homegene et plus lisible, pour les declarations des fonctions
Regles :

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