[CSS] +fix page header and title color
[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 /* administrateur ? */
90 if (isset($qui['statut']) and $qui['statut'] == '0minirezo' and (count($qui['restreint']) == 0)) {
91 return true;
92 }
93
94 /* Test des autorisations par auteur */
95 if ($auteurs == 'on') {
96 return formidable_autoriser_par_auteur($id);
97 }
98
99 /* Test des autorisations pour un admin restreint */
100 if (count($qui['restreint'])) {
101 $autoriser_admin_restreint = isset($GLOBALS['autoriser_admin_restreint'])
102 ? $GLOBALS['autoriser_admin_restreint']
103 : lire_config('formidable/analyse/autoriser_admin_restreint') == 'on'
104 ? true
105 : false;
106
107 return $autoriser_admin_restreint;
108 }
109 }
110
111 /**
112 * Autorisation de voir la liste des formulaires formidable
113 *
114 * Admins et rédacteurs peuvent voir les formulaires existants
115 *
116 * @param string $faire Action demandée
117 * @param string $type Type d'objet sur lequel appliquer l'action
118 * @param int $id Identifiant de l'objet
119 * @param array $qui Description de l'auteur demandant l'autorisation
120 * @param array $opt Options de cette autorisation
121 * @return bool true s'il a le droit, false sinon
122 **/
123 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt) {
124 if (isset($qui['statut']) and ($qui['statut'] == '1comite' or $qui['statut'] == '0minirezo')) {
125 return true;
126 } else {
127 return false;
128 }
129 }
130
131
132 /**
133 * Autorisation de répondre à un formidable formidable
134 *
135 * On peut répondre à un formulaire si :
136 * - c'est un formulaire classique
137 * - on enregistre et que multiple = oui
138 * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
139 * - on enregistre et que multiple = non et que modifiable = oui
140 *
141 * @param string $faire Action demandée
142 * @param string $type Type d'objet sur lequel appliquer l'action
143 * @param int $id Identifiant de l'objet
144 * @param array $qui Description de l'auteur demandant l'autorisation
145 * @param array $opt Options de cette autorisation
146 * @return bool true s'il a le droit, false sinon
147 **/
148 function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) {
149 $id = intval($id);
150
151 // On regarde si il y a déjà le formulaire dans les options
152 if (isset($opt['formulaire'])) {
153 $formulaire = $opt['formulaire'];
154 } else {
155 // Sinon on va le chercher
156 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
157 }
158
159 $traitements = unserialize($formulaire['traitements']);
160
161 // S'il n'y a pas d'enregistrement, c'est forcément bon
162 if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) {
163 return true;
164 } else {
165 // Sinon faut voir les options
166 // Si multiple = oui c'est bon
167 if ($options['multiple']) {
168 return true;
169 } else {
170 // Si c'est modifiable, c'est bon
171 if ($options['modifiable']) {
172 return true;
173 } else {
174 include_spip('inc/formidable');
175 // Si la personne n'a jamais répondu, c'est bon
176 if (!formidable_verifier_reponse_formulaire($id)) {
177 return true;
178 } else {
179 return false;
180 }
181 }
182 }
183 }
184 }
185
186 /**
187 * Autorisation d'associer un nouvel auteur à un formulaire
188 *
189 * mêmes autorisations que pour éditer le formulaire
190 *
191 **/
192 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
193 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
194 }
195
196 /**
197 * Autorisation de modifier un formulaire
198 *
199 * mêmes autorisations que pour éditer le formulaire
200 *
201 **/
202 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
203 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
204 }
205
206
207 /**
208 * Autorisation d'instituer une réponse
209 *
210 * On peut modérer une réponse si on est admin
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 **/
219 function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt) {
220 return formidable_auteur_admin_reponse($qui);
221 }
222
223 /**
224 * Autorisation de voir les réponses d'un formulaire formidable
225 *
226 * Au moins rédacteur pour voir les résultats
227 *
228 * @param string $faire Action demandée
229 * @param string $type Type d'objet sur lequel appliquer l'action
230 * @param int $id Identifiant de l'objet
231 * @param array $qui Description de l'auteur demandant l'autorisation
232 * @param array $opt Options de cette autorisation
233 * @return bool true s'il a le droit, false sinon
234 **/
235 function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt) {
236 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
237 }
238
239 /**
240 * Autorisation de modifier une réponse d'un formulaire formidable
241 *
242 * suivant la config, un administrateur ou l'auteur du formulaire peuvent
243 * voir les résultats
244 *
245 * @param string $faire Action demandée
246 * @param string $type Type d'objet sur lequel appliquer l'action
247 * @param int $id Identifiant de l'objet
248 * @param array $qui Description de l'auteur demandant l'autorisation
249 * @param array $opt Options de cette autorisation
250 * @return bool true s'il a le droit, false sinon
251 **/
252 function autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt) {
253 $id = intval($id);
254
255 if ($id_formulaire = intval(
256 sql_getfetsel(
257 'id_formulaire',
258 'spip_formulaires_reponses',
259 "id_formulaires_reponse=$id"
260 )
261 )) {
262 return
263 autoriser_formulaire_editer_dist($faire, $type, $id_formulaire, $qui, $opt)
264 and formidable_auteur_admin_reponse($qui);
265 }
266
267 return false;
268 }
269
270 /**
271 * Autorisation de supprimer une réponse d'un formulaire formidable
272 *
273 * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer
274 *
275 * @param string $faire Action demandée
276 * @param string $type Type d'objet sur lequel appliquer l'action
277 * @param int $id Identifiant de l'objet
278 * @param array $qui Description de l'auteur demandant l'autorisation
279 * @param array $opt Options de cette autorisation
280 * @return bool true s'il a le droit, false sinon
281 **/
282 function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) {
283 $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt);
284
285 return $retour;
286 }
287
288 /**
289 * Autorisation de poster une réponse en Collection+JSON
290 *
291 * Tout le monde peut, l'autorisation réelle se fera après pendant le traitement, suivant l'id_formulaire envoyé
292 *
293 * @param string $faire Action demandée
294 * @param string $type Type d'objet sur lequel appliquer l'action
295 * @param int $id Identifiant de l'objet
296 * @param array $qui Description de l'auteur demandant l'autorisation
297 * @param array $opt Options de cette autorisation
298 * @return bool true s'il a le droit, false sinon
299 **/
300 function autoriser_formulairesreponse_post_collection_dist($faire, $type, $id, $qui, $opt) {
301 return true;
302 }