e83946f1bc5086792ce2dfba3390d5b0a6c7f282
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2013 *
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 Mots\Autorisations
18 if (!defined('_ECRIRE_INC_VERSION')) return;
20 /** Fonction d'appel pour le pipeline */
21 function mots_autoriser(){}
24 * Autorisation de voir un élément de menu
26 * @param string $faire Action demandée
27 * @param string $type Type d'objet sur lequel appliquer l'action
28 * @param int $id Identifiant de l'objet
29 * @param array $qui Description de l'auteur demandant l'autorisation
30 * @param array $opt Options de cette autorisation
31 * @return bool true s'il a le droit, false sinon
33 function autoriser_mots_menu_dist($faire, $type, $id, $qui, $opt){
34 if ($qui['statut'] == '0minirezo')
35 return ($GLOBALS['meta']['articles_mots'] != 'non' OR sql_countsel('spip_groupes_mots'));
37 if ($qui['statut']=='1comite')
38 $where = "comite='oui' OR forum='oui'";
39 if ($qui['statut']=='6forum')
40 $where = "forum='oui'";
42 AND $GLOBALS['meta']['articles_mots'] != 'non'
43 AND sql_countsel('spip_groupes_mots',$where));
47 * Autorisation de voir le bouton d'accès rapide à la création d'un mot clé
49 * @param string $faire Action demandée
50 * @param string $type Type d'objet sur lequel appliquer l'action
51 * @param int $id Identifiant de l'objet
52 * @param array $qui Description de l'auteur demandant l'autorisation
53 * @param array $opt Options de cette autorisation
54 * @return bool true s'il a le droit, false sinon
56 function autoriser_motcreer_menu_dist($faire, $type, $id, $qui, $opt){
57 // [fixme] Meta 'article_mots' mal nommée maintenant
58 // car elle désigne l'activation ou non des mots clés, quelque soit l'objet.
59 return ($GLOBALS['meta']['articles_mots'] != 'non'
60 AND sql_countsel('spip_groupes_mots')
61 AND autoriser('creer','mot',null,$qui,$opt));
66 * Autorisation de voir un groupe de mots
68 * L'autorisation est donnée selon la configuration du groupe
69 * qui gère cela par type d'auteur (administrateur, rédacteurs, visiteurs)
71 * @param string $faire Action demandée
72 * @param string $type Type d'objet sur lequel appliquer l'action
73 * @param int $id Identifiant de l'objet
74 * @param array $qui Description de l'auteur demandant l'autorisation
75 * @param array $opt Options de cette autorisation
76 * @return bool true s'il a le droit, false sinon
78 function autoriser_groupemots_voir_dist($faire, $type, $id, $qui, $opt) {
79 if ($qui['statut'] == '0minirezo') return true;
80 $acces = sql_fetsel("comite,forum", "spip_groupes_mots", "id_groupe=".intval($id));
81 if ($qui['statut']=='1comite' AND ($acces['comite'] == 'oui' OR $acces['forum'] == 'oui'))
83 if ($qui['statut']=='6forum' AND $acces['forum'] == 'oui')
89 * Autorisation de créer un groupe de mots
91 * @param string $faire Action demandée
92 * @param string $type Type d'objet sur lequel appliquer l'action
93 * @param int $id Identifiant de l'objet
94 * @param array $qui Description de l'auteur demandant l'autorisation
95 * @param array $opt Options de cette autorisation
96 * @return bool true s'il a le droit, false sinon
98 function autoriser_groupemots_creer_dist($faire, $type, $id, $qui, $opt) {
100 $qui['statut'] == '0minirezo'
101 AND !$qui['restreint'];
106 * Autorisation de modifier un groupe de mots
108 * Cela inclut également l'ajout ou modification des mots lui appartenant
110 * @param string $faire Action demandée
111 * @param string $type Type d'objet sur lequel appliquer l'action
112 * @param int $id Identifiant de l'objet
113 * @param array $qui Description de l'auteur demandant l'autorisation
114 * @param array $opt Options de cette autorisation
115 * @return bool true s'il a le droit, false sinon
117 function autoriser_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) {
119 $qui['statut'] == '0minirezo' AND !$qui['restreint']
120 AND autoriser('voir','groupemots',$id,$qui,$opt);
125 * Autorisation de supprimer un groupe de mots
127 * @param string $faire Action demandée
128 * @param string $type Type d'objet sur lequel appliquer l'action
129 * @param int $id Identifiant de l'objet
130 * @param array $qui Description de l'auteur demandant l'autorisation
131 * @param array $opt Options de cette autorisation
132 * @return bool true s'il a le droit, false sinon
134 function autoriser_groupemots_supprimer_dist($faire, $type, $id, $qui, $opt) {
135 if (!autoriser('modifier','groupemots',$id))
137 return sql_countsel('spip_mots','id_groupe='.intval($id))?
false:true;
141 * Autorisation de modifier un mot
143 * Il faut avoir le droit de modifier le groupe parent
145 * Note : passer l'id_groupe dans le tableau d'option
146 * permet de gagner du CPU et une requête SQL (c'est ce que fait l'espace privé)
148 * @param string $faire Action demandée
149 * @param string $type Type d'objet sur lequel appliquer l'action
150 * @param int $id Identifiant de l'objet
151 * @param array $qui Description de l'auteur demandant l'autorisation
152 * @param array $opt Options de cette autorisation
153 * @return bool true s'il a le droit, false sinon
155 function autoriser_mot_modifier_dist($faire, $type, $id, $qui, $opt) {
157 isset($opt['id_groupe'])
158 ?
autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt)
160 $t = sql_getfetsel("id_groupe", "spip_mots", "id_mot=".intval($id))
161 AND autoriser('modifier', 'groupemots', $t, $qui, $opt)
166 * Autorisation de créer un mot
168 * Vérifie si une association est demandée en option, qu'elle est possible dans un des groupes,
169 * c'est à dire qu'une liaison est possible entre un groupe et l'objet lié
171 * Si l'id_groupe est passé en option,
172 * vérifie également que l'auteur a le droit de modifier ce groupe
174 * @param string $faire Action demandée
175 * @param string $type Type d'objet sur lequel appliquer l'action
176 * @param int $id Identifiant de l'objet
177 * @param array $qui Description de l'auteur demandant l'autorisation
178 * @param array $opt Options de cette autorisation
179 * @return bool true s'il a le droit, false sinon
181 function autoriser_mot_creer_dist($faire, $type, $id, $qui, $opt) {
182 if ($qui['statut'] != '0minirezo' OR $qui['restreint'])
186 // si objet associe, verifier qu'un groupe peut etre associe
187 // a la table correspondante
188 if (isset($opt['associer_objet'])
189 AND $associer_objet = $opt['associer_objet']){
190 if (!preg_match(',^(\w+)\|[0-9]+$,',$associer_objet,$match))
192 $where = "tables_liees REGEXP '(^|,)".addslashes(table_objet($match[1]))."($|,)'";
194 // si pas de groupe de mot qui colle, pas le droit
195 if (!sql_countsel('spip_groupes_mots',$where))
198 if (isset($opt['id_groupe']))
199 return autoriser('modifier','groupemots',$opt['id_groupe']);
205 * Autorisation de supprimer un mot
207 * Par défaut : pouvoir créer un mot dans le groupe
209 * @param string $faire Action demandée
210 * @param string $type Type d'objet sur lequel appliquer l'action
211 * @param int $id Identifiant de l'objet
212 * @param array $qui Description de l'auteur demandant l'autorisation
213 * @param array $opt Options de cette autorisation
214 * @return bool true s'il a le droit, false sinon
216 function autoriser_mot_supprimer_dist($faire, $type, $id, $qui, $opt) {
217 // On cherche le groupe du mot
218 $id_groupe = $opt['id_groupe'] ?
$opt['id_groupe'] : sql_getfetsel('id_groupe', 'spip_mots', 'id_mot = '.intval($id));
220 return autoriser('creer', 'mot', $id, $qui, array('id_groupe'=>$id_groupe));
225 * Autorisation d'associer des mots à un objet
227 * Si groupe_champ ou id_groupe est fourni dans le tableau d'options,
228 * on regarde les droits pour ce groupe en particulier
230 * On interdit aussi d'associer des mots à d'autres mots ou groupes de mots
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_associermots_dist($faire,$type,$id,$qui,$opt){
240 // jamais de mots sur des mots
241 if ($type=='mot') return false;
242 if ($type=='groupemots') return false;
243 $droit = substr($qui['statut'],1);
245 if (!isset($opt['groupe_champs']) AND !isset($opt['id_groupe'])){
246 // chercher si un groupe est autorise pour mon statut
247 // et pour la table demandee
248 $table = addslashes(table_objet($type));
249 if (sql_countsel('spip_groupes_mots',"tables_liees REGEXP '(^|,)$table($|,)' AND ".addslashes($droit)."='oui'"))
252 // cas d'un groupe en particulier
254 // on recupere les champs du groupe s'ils ne sont pas passes en opt
255 if (!isset($opt['groupe_champs'])){
256 if (!$id_groupe = $opt['id_groupe'])
258 include_spip('base/abstract_sql');
259 $opt['groupe_champs'] = sql_fetsel("*", "spip_groupes_mots", "id_groupe=".intval($id_groupe));
261 $droit = $opt['groupe_champs'][$droit];
266 // on verifie que l'objet demande est bien dans les tables liees
269 explode(',', $opt['groupe_champs']['tables_liees'])
278 * Autorisation d'affichier le sélecteur de mots
280 * Vérifie le droit d'afficher le selecteur de mots
281 * pour un groupe de mot donné, dans un objet / id_objet donné
283 * C'est fonction de la configuration du groupe de mots.
285 * @param string $faire Action demandée
286 * @param string $type Type d'objet sur lequel appliquer l'action
287 * @param int $id Identifiant de l'objet
288 * @param array $qui Description de l'auteur demandant l'autorisation
289 * @param array $opt Options de cette autorisation
290 * @return bool true s'il a le droit, false sinon
292 function autoriser_groupemots_afficherselecteurmots_dist($faire,$type,$id,$qui,$opt){
293 if (!isset($opt['minirezo']) ||
!isset($opt['comite'])) {
295 array('minirezo', 'comite'),
297 'id_groupe=' . intval($id));
298 if (!$i) return false; # le groupe n'existe pas
299 $admin = $i['minirezo'];
300 $redac = $i['comite'];
302 $admin = $opt['minirezo'];
303 $redac = $opt['comite'];
306 if ($admin == 'oui') $statuts[] = '0minirezo';
307 if ($redac == 'oui') $statuts[] = '1comite';
309 return in_array($qui['statut'], $statuts);
314 * Autorisation d'affichier le formulaire de logo
316 * @param string $faire Action demandée
317 * @param string $type Type d'objet sur lequel appliquer l'action
318 * @param int $id Identifiant de l'objet
319 * @param array $qui Description de l'auteur demandant l'autorisation
320 * @param array $opt Options de cette autorisation
321 * @return bool true s'il a le droit, false sinon
323 function autoriser_mot_iconifier_dist($faire,$type,$id,$qui,$opt){
324 return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
328 * Autorisation d'affichier le formulaire de logo
330 * @param string $faire Action demandée
331 * @param string $type Type d'objet sur lequel appliquer l'action
332 * @param int $id Identifiant de l'objet
333 * @param array $qui Description de l'auteur demandant l'autorisation
334 * @param array $opt Options de cette autorisation
335 * @return bool true s'il a le droit, false sinon
337 function autoriser_groupemots_iconifier_dist($faire,$type,$id,$qui,$opt){
338 return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);