[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / formidable_autorisations.php
1 <?php
2
3 /**
4 * Déclaration des autorisations
5 *
6 * @package SPIP\Formidable\Autorisations
7 **/
8
9 // Sécurité
10 if (!defined('_ECRIRE_INC_VERSION')) {
11 return;
12 }
13
14 include_spip('action/editer_liens');
15 include_spip('inc/config');
16
17 /**
18 * Autorisation par auteur et par formulaire
19 *
20 * Seuls les auteurs associés à un formulaire peuvent y accéder
21 *
22 * @param int $id id du formulaire à tester
23 * @param int $id_auteur id de l'auteur à tester, si ==0 => auteur courant
24 * @return bool true s'il a le droit, false sinon
25 *
26 */
27 function formidable_autoriser_par_auteur($id, $id_auteur = 0) {
28 if ($id == 0) {
29 return true;
30 }
31
32 $retour = false;
33
34 if ($id_auteur == 0) {
35 $id_auteur = session_get('id_auteur');
36 }
37 if ($id_auteur == null) {
38 $retour = false;
39 } else {
40 $autorisations = objet_trouver_liens(array('formulaire' => $id), array('auteur' => $id_auteur));
41 $retour = count($autorisations) > 0;
42 }
43
44 return $retour;
45 }
46
47 /**
48 * Réponses à un formulaire éditable par un auteur
49 *
50 * Est-on en présence d'un auteur qui tente de modifier les réponses d'un formulaire
51 * et que Formidable est configuré pour prendre en compte les auteurs
52 * et que les auteurs sont en droit de modifier les réponses de leurs formulaires ?
53 *
54 * @param array $qui Description de l'auteur demandant l'autorisation
55 * @return bool true s'il a le droit, false sinon
56 *
57 */
58 function formidable_auteur_admin_reponse($qui) {
59 // L'auteur peut-il administrer les réponses ?
60 $admin_reponses_auteur = lire_config('formidable/analyse/admin_reponses_auteur');
61 $auteurs = lire_config('formidable/analyse/auteur');
62 $is_admin = (isset($qui['statut']) and $qui['statut'] == '0minirezo');
63 $retour = ($is_admin or (($auteurs == 'on') and ($admin_reponses_auteur == 'on')));
64
65 return $retour;
66 }
67
68 /**
69 * Fonction d'appel pour le pipeline
70 * @pipeline autoriser
71 */
72 function formidable_autoriser() {
73 }
74
75 /**
76 * Autorisation d'éditer un formulaire formidable
77 *
78 * Seuls les admins peuvent éditer les formulaires
79 *
80 * @param string $faire Action demandée
81 * @param string $type Type d'objet sur lequel appliquer l'action
82 * @param int $id Identifiant de l'objet
83 * @param array $qui Description de l'auteur demandant l'autorisation
84 * @param array $opt Options de cette autorisation
85 * @return bool true s'il a le droit, false sinon
86 **/
87 function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt) {
88 $auteurs = lire_config('formidable/analyse/auteur');
89
90 /* administrateur ? */
91 if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and (count($qui['restreint']) == 0)) {
92 return true;
93 }
94
95 /* Test des autorisations par auteur */
96 if ($auteurs == 'on') {
97 return formidable_autoriser_par_auteur($id);
98 }
99
100 /* Test des autorisations pour un admin restreint */
101 if (count($qui['restreint'])) {
102 $autoriser_admin_restreint = isset($GLOBALS['autoriser_admin_restreint'])
103 ? $GLOBALS['autoriser_admin_restreint']
104 : lire_config('formidable/analyse/autoriser_admin_restreint') == 'on'
105 ? true
106 : false;
107
108 return $autoriser_admin_restreint;
109 }
110 }
111
112 /**
113 * Autorisation de voir la liste des formulaires formidable
114 *
115 * Admins et rédacteurs peuvent voir les formulaires existants
116 *
117 * @param string $faire Action demandée
118 * @param string $type Type d'objet sur lequel appliquer l'action
119 * @param int $id Identifiant de l'objet
120 * @param array $qui Description de l'auteur demandant l'autorisation
121 * @param array $opt Options de cette autorisation
122 * @return bool true s'il a le droit, false sinon
123 **/
124 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt) {
125 if (isset($qui['statut']) and $qui['statut'] <= '1comite') {
126 return true;
127 } else {
128 return false;
129 }
130 }
131
132
133 /**
134 * Autorisation de répondre à un formidable formidable
135 *
136 * On peut répondre à un formulaire si :
137 * - c'est un formulaire classique
138 * - on enregistre et que multiple = oui
139 * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
140 * - on enregistre et que multiple = non et que modifiable = oui
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_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) {
150 $id = intval($id);
151
152 // On regarde si il y a déjà le formulaire dans les options
153 if (isset($opt['formulaire'])) {
154 $formulaire = $opt['formulaire'];
155 } else {
156 // Sinon on va le chercher
157 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
158 }
159
160 $traitements = unserialize($formulaire['traitements']);
161
162 // S'il n'y a pas d'enregistrement, c'est forcément bon
163 if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) {
164 return true;
165 } else {
166 // Sinon faut voir les options
167 // Si multiple = oui c'est bon
168 if ($options['multiple']) {
169 return true;
170 } else {
171 // Si c'est modifiable, c'est bon
172 if ($options['modifiable']) {
173 return true;
174 } else {
175 include_spip('inc/formidable');
176 // Si la personne n'a jamais répondu, c'est bon
177 if (!formidable_verifier_reponse_formulaire($id)) {
178 return true;
179 } else {
180 return false;
181 }
182 }
183 }
184 }
185 }
186
187 /**
188 * Autorisation d'associer un nouvel auteur à un formulaire
189 *
190 * mêmes autorisations que pour éditer le formulaire
191 *
192 **/
193 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
194 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
195 }
196
197 /**
198 * Autorisation de modifier un formulaire
199 *
200 * mêmes autorisations que pour éditer le formulaire
201 *
202 **/
203 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
204 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
205 }
206
207
208 /**
209 * Autorisation d'instituer une réponse
210 *
211 * On peut modérer une réponse si on est admin
212 *
213 * @param string $faire Action demandée
214 * @param string $type Type d'objet sur lequel appliquer l'action
215 * @param int $id Identifiant de l'objet
216 * @param array $qui Description de l'auteur demandant l'autorisation
217 * @param array $opt Options de cette autorisation
218 * @return bool true s'il a le droit, false sinon
219 **/
220 function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt) {
221 return formidable_auteur_admin_reponse($qui);
222 }
223
224 /**
225 * Autorisation de voir les réponses d'un formulaire formidable
226 *
227 * Au moins rédacteur pour voir les résultats
228 *
229 * @param string $faire Action demandée
230 * @param string $type Type d'objet sur lequel appliquer l'action
231 * @param int $id Identifiant de l'objet
232 * @param array $qui Description de l'auteur demandant l'autorisation
233 * @param array $opt Options de cette autorisation
234 * @return bool true s'il a le droit, false sinon
235 **/
236 function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt) {
237 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
238 }
239
240 /**
241 * Autorisation de modifier une réponse d'un formulaire formidable
242 *
243 * suivant la config, un administrateur ou l'auteur du formulaire peuvent
244 * voir les résultats
245 *
246 * @param string $faire Action demandée
247 * @param string $type Type d'objet sur lequel appliquer l'action
248 * @param int $id Identifiant de l'objet
249 * @param array $qui Description de l'auteur demandant l'autorisation
250 * @param array $opt Options de cette autorisation
251 * @return bool true s'il a le droit, false sinon
252 **/
253 function autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt) {
254 $id = intval($id);
255
256 if ($id_formulaire = intval(
257 sql_getfetsel(
258 'id_formulaire',
259 'spip_formulaires_reponses',
260 "id_formulaires_reponse=$id"
261 )
262 )) {
263 return
264 autoriser_formulaire_editer_dist($faire, $type, $id_formulaire, $qui, $opt)
265 and formidable_auteur_admin_reponse($qui);
266 }
267
268 return false;
269 }
270
271 /**
272 * Autorisation de supprimer une réponse d'un formulaire formidable
273 *
274 * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer
275 *
276 * @param string $faire Action demandée
277 * @param string $type Type d'objet sur lequel appliquer l'action
278 * @param int $id Identifiant de l'objet
279 * @param array $qui Description de l'auteur demandant l'autorisation
280 * @param array $opt Options de cette autorisation
281 * @return bool true s'il a le droit, false sinon
282 **/
283 function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) {
284 $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt);
285
286 return $retour;
287 }
288
289 /**
290 * Autorisation de poster une réponse en Collection+JSON
291 *
292 * Tout le monde peut, l'autorisation réelle se fera après pendant le traitement, suivant l'id_formulaire envoyé
293 *
294 * @param string $faire Action demandée
295 * @param string $type Type d'objet sur lequel appliquer l'action
296 * @param int $id Identifiant de l'objet
297 * @param array $qui Description de l'auteur demandant l'autorisation
298 * @param array $opt Options de cette autorisation
299 * @return bool true s'il a le droit, false sinon
300 **/
301 function autoriser_formulairesreponse_post_collection_dist($faire, $type, $id, $qui, $opt) {
302 return true;
303 }