2043eb38ab0e92b5f747c89802f7cf4455fc042c
[lhc/web/www.git] / www / plugins-dist / forum / forum_autoriser.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 forum
15 *
16 * @package SPIP\Forum\Autorisations
17 **/
18 if (!defined("_ECRIRE_INC_VERSION")) {
19 return;
20 }
21
22 /**
23 * Fonction d'appel pour le pipeline
24 *
25 * @pipeline autoriser
26 */
27 function forum_autoriser() { }
28
29 /**
30 * Autorisation de voir l'élément «forums internes» dans le 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 **/
39 function autoriser_foruminternesuivi_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) {
40 if ((($GLOBALS['meta']['forum_prive'] == 'non') && ($GLOBALS['meta']['forum_prive_admin'] == 'non'))
41 or (($GLOBALS['meta']['forum_prive'] == 'non') && ($qui['statut'] == '1comite'))
42 ) {
43 return false;
44 }
45
46 return true;
47 }
48
49 /**
50 * Autorisation de voir l'élément «suivi des forums» dans le menu
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 **/
59 function autoriser_forumreactions_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) {
60 return (sql_countsel('spip_forum') && autoriser('publierdans', 'rubrique', _request('id_rubrique')));
61 }
62
63
64 /**
65 * Autorisation de modérer un message de forum
66 *
67 * Il faut l'autorisation de modifier l'objet correspondant
68 * (si le forum est attaché à un objet), sinon avoir droits par défaut
69 * (être administrateur).
70 *
71 * @see autoriser_forum_moderer_dist()
72 *
73 * @param string $faire Action demandée
74 * @param string $type Type d'objet sur lequel appliquer l'action
75 * @param int $id Identifiant de l'objet
76 * @param array $qui Description de l'auteur demandant l'autorisation
77 * @param array $opt Options de cette autorisation
78 * @return bool true s'il a le droit, false sinon
79 **/
80 function autoriser_modererforum_dist($faire, $type, $id, $qui, $opt) {
81 return $type ? autoriser('modifier', $type, $id, $qui, $opt) : autoriser('moderer', 'forum', 0, $qui, $opt);
82 }
83
84 /**
85 * Autorisation de changer le statut d'un message de forum
86 *
87 * Seulement sur les objets qu'on a le droit de modérer.
88 *
89 * @param string $faire Action demandée
90 * @param string $type Type d'objet sur lequel appliquer l'action
91 * @param int $id Identifiant de l'objet
92 * @param array $qui Description de l'auteur demandant l'autorisation
93 * @param array $opt Options de cette autorisation
94 * @return bool true s'il a le droit, false sinon
95 */
96 function autoriser_forum_instituer_dist($faire, $type, $id, $qui, $opt) {
97 if (!intval($id)) {
98 return autoriser('moderer', 'forum');
99 }
100 $row = sql_fetsel('objet,id_objet', 'spip_forum', 'id_forum=' . intval($id));
101
102 return $row ? autoriser('modererforum', $row['objet'], $row['id_objet'], $qui, $opt) : false;
103 }
104
105 /**
106 * Autorisation par défaut de modérer un message de forum
107 *
108 * Si l'on connait l'objet, on délègue à modererforum, sinon il faut
109 * être administrateur
110 *
111 * @see autoriser_modererforum_dist()
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 */
120 function autoriser_forum_moderer_dist($faire, $type, $id, $qui, $opt) {
121 // si on fournit un id : deleguer a modererforum sur l'objet concerne
122 if ($id) {
123 include_spip('inc/forum');
124 if ($racine = racine_forum($id)
125 and list($objet, $id_objet, ) = $racine
126 and $objet
127 ) {
128 return autoriser('modererforum', $objet, $id_objet);
129 }
130 }
131
132 // sinon : admins uniquement
133 return $qui['statut'] == '0minirezo'; // les admins restreints peuvent moderer leurs messages
134 }
135
136
137 /**
138 * Autorisation de modifier un message de forum
139 *
140 * Jamais
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 */
149 function autoriser_forum_modifier_dist($faire, $type, $id, $qui, $opt) {
150 return false;
151 }
152
153 /**
154 * Autorisation de consulter le forum des administrateurs
155 *
156 * Il faut être administrateur (y compris restreint)
157 *
158 * @param string $faire Action demandée
159 * @param string $type Type d'objet sur lequel appliquer l'action
160 * @param int $id Identifiant de l'objet
161 * @param array $qui Description de l'auteur demandant l'autorisation
162 * @param array $opt Options de cette autorisation
163 * @return bool true s'il a le droit, false sinon
164 */
165 function autoriser_forum_admin_dist($faire, $type, $id, $qui, $opt) {
166 return $qui['statut'] == '0minirezo';
167 }
168
169 /**
170 * Autorisation d'auto-association de documents sur des forum
171 *
172 * Jamais
173 *
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
180 */
181 function autoriser_forum_autoassocierdocument_dist($faire, $type, $id, $qui, $opt) {
182 return false;
183 }
184
185 /**
186 * Autorisation d'association de documents sur des forum
187 *
188 * Toujours
189 *
190 * @param string $faire Action demandée
191 * @param string $type Type d'objet sur lequel appliquer l'action
192 * @param int $id Identifiant de l'objet
193 * @param array $qui Description de l'auteur demandant l'autorisation
194 * @param array $opt Options de cette autorisation
195 * @return bool true s'il a le droit, false sinon
196 */
197 function autoriser_forum_associerdocuments_dist($faire, $type, $id, $qui, $opt) {
198 return true;
199 }
200
201 /**
202 * Autorisation de dissociation de documents sur des forum
203 *
204 * Toujours
205 *
206 * @param string $faire Action demandée
207 * @param string $type Type d'objet sur lequel appliquer l'action
208 * @param int $id Identifiant de l'objet
209 * @param array $qui Description de l'auteur demandant l'autorisation
210 * @param array $opt Options de cette autorisation
211 * @return bool true s'il a le droit, false sinon
212 */
213 function autoriser_forum_dissocierdocuments_dist($faire, $type, $id, $qui, $opt) {
214 return true;
215 }
216
217 /**
218 * Autorisation de participer au forum des admins
219 *
220 * Il faut être administrateur (y compris restreint)
221 *
222 * @param string $faire Action demandée
223 * @param string $type Type d'objet sur lequel appliquer l'action
224 * @param int $id Identifiant de l'objet
225 * @param array $qui Description de l'auteur demandant l'autorisation
226 * @param array $opt Options de cette autorisation
227 * @return bool true s'il a le droit, false sinon
228 */
229 function autoriser_forumadmin_participer_dist($faire, $type, $id, $qui, $opt) {
230 return ($GLOBALS['meta']['forum_prive_admin'] == 'oui') && $qui['statut'] == '0minirezo';
231 }
232
233
234 /**
235 * Autorisation de participer au forum privé d'un objet quelconque
236 *
237 * Afin de rester compatible avec l'existant cette autorisation est toujours vraie.
238 *
239 * @param string $faire Action demandée
240 * @param string $type Type d'objet sur lequel appliquer l'action
241 * @param int $id Identifiant de l'objet
242 * @param array $qui Description de l'auteur demandant l'autorisation
243 * @param array $opt Options de cette autorisation
244 * @return bool true s'il a le droit, false sinon
245 */
246 function autoriser_participerforumprive_dist($faire, $type, $id, $qui, $opt) {
247 return true;
248 }
249
250 /**
251 * Autorisation de voir le menu configurer_forum
252 *
253 * Il faut avoir accès à la page configurer_forum
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 **/
262 function autoriser_configurerforum_menu_dist($faire, $type, $id, $qui, $opt) {
263 return autoriser('configurer', 'forum', $id, $qui, $opt);
264 }