c12ae50f3151f3fd629885410984d12bde6b9b8e
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
14 * Définit les autorisations du plugin mots
16 * @package SPIP\Mots\Autorisations
18 if (!defined('_ECRIRE_INC_VERSION')) {
23 * Fonction d'appel pour le pipeline
27 function mots_autoriser() {
31 * Autorisation de voir un élément de menu
33 * @param string $faire Action demandée
34 * @param string $type Type d'objet sur lequel appliquer l'action
35 * @param int $id Identifiant de l'objet
36 * @param array $qui Description de l'auteur demandant l'autorisation
37 * @param array $opt Options de cette autorisation
38 * @return bool true s'il a le droit, false sinon
40 function autoriser_mots_menu_dist($faire, $type, $id, $qui, $opt) {
41 if ($qui['statut'] == '0minirezo') {
42 return ($GLOBALS['meta']['articles_mots'] != 'non' or sql_countsel('spip_groupes_mots'));
45 if ($qui['statut'] == '1comite') {
46 $where = "comite='oui' OR forum='oui'";
48 if ($qui['statut'] == '6forum') {
49 $where = "forum='oui'";
53 and $GLOBALS['meta']['articles_mots'] != 'non'
54 and sql_countsel('spip_groupes_mots', $where));
58 * Autorisation de voir le bouton d'accès rapide à la création d'un mot clé
60 * @param string $faire Action demandée
61 * @param string $type Type d'objet sur lequel appliquer l'action
62 * @param int $id Identifiant de l'objet
63 * @param array $qui Description de l'auteur demandant l'autorisation
64 * @param array $opt Options de cette autorisation
65 * @return bool true s'il a le droit, false sinon
67 function autoriser_motcreer_menu_dist($faire, $type, $id, $qui, $opt) {
68 // [fixme] Meta 'article_mots' mal nommée maintenant
69 // car elle désigne l'activation ou non des mots clés, quelque soit l'objet.
70 return ($GLOBALS['meta']['articles_mots'] != 'non'
71 and sql_countsel('spip_groupes_mots')
72 and autoriser('creer', 'mot', null, $qui, $opt));
77 * Autorisation de voir un groupe de mots
79 * L'autorisation est donnée selon la configuration du groupe
80 * qui gère cela par type d'auteur (administrateur, rédacteurs, visiteurs)
82 * @param string $faire Action demandée
83 * @param string $type Type d'objet sur lequel appliquer l'action
84 * @param int $id Identifiant de l'objet
85 * @param array $qui Description de l'auteur demandant l'autorisation
86 * @param array $opt Options de cette autorisation
87 * @return bool true s'il a le droit, false sinon
89 function autoriser_groupemots_voir_dist($faire, $type, $id, $qui, $opt) {
90 if ($qui['statut'] == '0minirezo') {
93 $acces = sql_fetsel('comite,forum', 'spip_groupes_mots', 'id_groupe=' . intval($id));
94 if ($qui['statut'] == '1comite' and ($acces['comite'] == 'oui' or $acces['forum'] == 'oui')) {
97 if ($qui['statut'] == '6forum' and $acces['forum'] == 'oui') {
105 * Autorisation de créer un groupe de mots
107 * @param string $faire Action demandée
108 * @param string $type Type d'objet sur lequel appliquer l'action
109 * @param int $id Identifiant de l'objet
110 * @param array $qui Description de l'auteur demandant l'autorisation
111 * @param array $opt Options de cette autorisation
112 * @return bool true s'il a le droit, false sinon
114 function autoriser_groupemots_creer_dist($faire, $type, $id, $qui, $opt) {
116 $qui['statut'] == '0minirezo'
117 and !$qui['restreint'];
122 * Autorisation de modifier un groupe de mots
124 * Cela inclut également l'ajout ou modification des mots lui appartenant
126 * @param string $faire Action demandée
127 * @param string $type Type d'objet sur lequel appliquer l'action
128 * @param int $id Identifiant de l'objet
129 * @param array $qui Description de l'auteur demandant l'autorisation
130 * @param array $opt Options de cette autorisation
131 * @return bool true s'il a le droit, false sinon
133 function autoriser_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) {
135 $qui['statut'] == '0minirezo' and !$qui['restreint']
136 and autoriser('voir', 'groupemots', $id, $qui, $opt);
141 * Autorisation de supprimer un groupe de mots
143 * @param string $faire Action demandée
144 * @param string $type Type d'objet sur lequel appliquer l'action
145 * @param int $id Identifiant de l'objet
146 * @param array $qui Description de l'auteur demandant l'autorisation
147 * @param array $opt Options de cette autorisation
148 * @return bool true s'il a le droit, false sinon
150 function autoriser_groupemots_supprimer_dist($faire, $type, $id, $qui, $opt) {
151 if (!autoriser('modifier', 'groupemots', $id)) {
155 return sql_countsel('spip_mots', 'id_groupe=' . intval($id)) ?
false : true;
159 * Autorisation de modifier un mot
161 * Il faut avoir le droit de modifier le groupe parent
163 * Note : passer l'id_groupe dans le tableau d'option
164 * permet de gagner du CPU et une requête SQL (c'est ce que fait l'espace privé)
166 * @param string $faire Action demandée
167 * @param string $type Type d'objet sur lequel appliquer l'action
168 * @param int $id Identifiant de l'objet
169 * @param array $qui Description de l'auteur demandant l'autorisation
170 * @param array $opt Options de cette autorisation
171 * @return bool true s'il a le droit, false sinon
173 function autoriser_mot_modifier_dist($faire, $type, $id, $qui, $opt) {
175 isset($opt['id_groupe'])
176 ?
autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt)
178 $t = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($id))
179 and autoriser('modifier', 'groupemots', $t, $qui, $opt)
184 * Autorisation de créer un mot
186 * Vérifie si une association est demandée en option, qu'elle est possible dans un des groupes,
187 * c'est à dire qu'une liaison est possible entre un groupe et l'objet lié
189 * Si l'id_groupe est passé en option,
190 * vérifie également que l'auteur a le droit de modifier ce groupe
192 * @param string $faire Action demandée
193 * @param string $type Type d'objet sur lequel appliquer l'action
194 * @param int $id Identifiant de l'objet
195 * @param array $qui Description de l'auteur demandant l'autorisation
196 * @param array $opt Options de cette autorisation
197 * @return bool true s'il a le droit, false sinon
199 function autoriser_mot_creer_dist($faire, $type, $id, $qui, $opt) {
200 if ($qui['statut'] != '0minirezo' or $qui['restreint']) {
205 // si objet associe, verifier qu'un groupe peut etre associe
206 // a la table correspondante
207 if (isset($opt['associer_objet'])
208 and $associer_objet = $opt['associer_objet']
210 if (!preg_match(',^(\w+)\|[0-9]+$,', $associer_objet, $match)) {
213 $where = "tables_liees REGEXP '(^|,)" . addslashes(table_objet($match[1])) . "($|,)'";
215 // si pas de groupe de mot qui colle, pas le droit
216 if (!sql_countsel('spip_groupes_mots', $where)) {
220 if (isset($opt['id_groupe'])) {
221 return autoriser('modifier', 'groupemots', $opt['id_groupe']);
228 * Autorisation de supprimer un mot
230 * Par défaut : pouvoir créer un mot dans le groupe
232 * @param string $faire Action demandée
233 * @param string $type Type d'objet sur lequel appliquer l'action
234 * @param int $id Identifiant de l'objet
235 * @param array $qui Description de l'auteur demandant l'autorisation
236 * @param array $opt Options de cette autorisation
237 * @return bool true s'il a le droit, false sinon
239 function autoriser_mot_supprimer_dist($faire, $type, $id, $qui, $opt) {
240 // On cherche le groupe du mot
241 $id_groupe = $opt['id_groupe'] ?
242 $opt['id_groupe'] : sql_getfetsel('id_groupe', 'spip_mots', 'id_mot = ' . intval($id));
244 return autoriser('creer', 'mot', $id, $qui, array('id_groupe' => $id_groupe));
249 * Autorisation d'associer des mots à un objet
251 * Si groupe_champ ou id_groupe est fourni dans le tableau d'options,
252 * on regarde les droits pour ce groupe en particulier
254 * On interdit aussi d'associer des mots à d'autres mots ou groupes de mots
256 * @param string $faire Action demandée
257 * @param string $type Type d'objet sur lequel appliquer l'action
258 * @param int $id Identifiant de l'objet
259 * @param array $qui Description de l'auteur demandant l'autorisation
260 * @param array $opt Options de cette autorisation
261 * @return bool true s'il a le droit, false sinon
263 function autoriser_associermots_dist($faire, $type, $id, $qui, $opt) {
264 // jamais de mots sur des mots
265 if ($type == 'mot') {
268 if ($type == 'groupemots') {
271 $droit = substr($qui['statut'], 1);
273 if (!isset($opt['groupe_champs']) and !isset($opt['id_groupe'])) {
274 // chercher si un groupe est autorise pour mon statut
275 // et pour la table demandee
276 $table = addslashes(table_objet($type));
277 if (sql_countsel('spip_groupes_mots', "tables_liees REGEXP '(^|,)$table($|,)' AND " . addslashes($droit) . "='oui'")) {
280 } // cas d'un groupe en particulier
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']) {
287 include_spip('base/abstract_sql');
288 $opt['groupe_champs'] = sql_fetsel('*', 'spip_groupes_mots', 'id_groupe=' . intval($id_groupe));
290 $droit = $opt['groupe_champs'][$droit];
295 // on verifie que l'objet demande est bien dans les tables liees
298 explode(',', $opt['groupe_champs']['tables_liees'])
307 * Autorisation d'affichier le sélecteur de mots
309 * Vérifie le droit d'afficher le selecteur de mots
310 * pour un groupe de mot donné, dans un objet / id_objet donné
312 * C'est fonction de la configuration du groupe de mots.
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
321 function autoriser_groupemots_afficherselecteurmots_dist($faire, $type, $id, $qui, $opt) {
322 if (!isset($opt['minirezo']) ||
!isset($opt['comite'])) {
324 array('minirezo', 'comite'),
326 'id_groupe=' . intval($id)
330 } # le groupe n'existe pas
331 $admin = $i['minirezo'];
332 $redac = $i['comite'];
334 $admin = $opt['minirezo'];
335 $redac = $opt['comite'];
338 if ($admin == 'oui') {
339 $statuts[] = '0minirezo';
341 if ($redac == 'oui') {
342 $statuts[] = '1comite';
345 return in_array($qui['statut'], $statuts);
350 * Autorisation d'affichier le formulaire de logo
352 * @param string $faire Action demandée
353 * @param string $type Type d'objet sur lequel appliquer l'action
354 * @param int $id Identifiant de l'objet
355 * @param array $qui Description de l'auteur demandant l'autorisation
356 * @param array $opt Options de cette autorisation
357 * @return bool true s'il a le droit, false sinon
359 function autoriser_mot_iconifier_dist($faire, $type, $id, $qui, $opt) {
360 return (($qui['statut'] == '0minirezo') and !$qui['restreint']);
364 * Autorisation d'affichier le formulaire de logo
366 * @param string $faire Action demandée
367 * @param string $type Type d'objet sur lequel appliquer l'action
368 * @param int $id Identifiant de l'objet
369 * @param array $qui Description de l'auteur demandant l'autorisation
370 * @param array $opt Options de cette autorisation
371 * @return bool true s'il a le droit, false sinon
373 function autoriser_groupemots_iconifier_dist($faire, $type, $id, $qui, $opt) {
374 return (($qui['statut'] == '0minirezo') and !$qui['restreint']);