[PLUGINS] ~formidable 1.3.6 --> 1.9.1
[lhc/web/www.git] / www / plugins / formidable_1_0 / 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")) return;
11
12 include_spip('action/editer_liens');
13 include_spip('inc/config');
14
15 /**
16 * Autorisation par auteur et par formulaire
17 *
18 * Seuls les auteurs associés à un formulaire peuvent y accéder
19 *
20 * @param int $id id du formulaire à tester
21 * @param int $id_auteur id de l'auteur à tester, si ==0 => auteur courant
22 * @return bool true s'il a le droit, false sinon
23 *
24 */
25 function formidable_autoriser_par_auteur($id, $id_auteur = 0) {
26 if ($id == 0) return true;
27
28 $retour = false;
29
30 if ($id_auteur == 0)
31 $id_auteur = session_get('id_auteur');
32
33 if ($id_auteur == null) {
34 $retour = false;
35 } else {
36 $autorisations = objet_trouver_liens(array('formulaire'=>$id),array('auteur'=>$id_auteur));
37 $retour = count($autorisations) > 0;
38 }
39
40 return $retour;
41 }
42
43 /**
44 * Réponses à un formulaire éditable par un auteur
45 *
46 * Est-on en présence d'un auteur qui tente de modifier les réponses d'un formulaire
47 * et que Formidable est configuré pour prendre en compte les auteurs
48 * et que les auteurs sont en droit de modifier les réponses de leurs formulaires ?
49 *
50 * @param array $qui Description de l'auteur demandant l'autorisation
51 * @return bool true s'il a le droit, false sinon
52 *
53 */
54 function formidable_auteur_admin_reponse($qui) {
55 // L'auteur peut-il administrer les réponses ?
56 $admin_reponses_auteur = lire_config('formidable/analyse/admin_reponses_auteur');
57 $auteurs = lire_config('formidable/analyse/auteur');
58 $is_admin = (isset($qui['statut']) and $qui['statut'] == '0minirezo');
59 $retour = ($is_admin or (($auteurs == 'on') and ($admin_reponses_auteur == 'on')));
60
61 return $retour;
62 }
63
64 /**
65 * Fonction d'appel pour le pipeline
66 * @pipeline autoriser
67 */
68 function formidable_autoriser(){}
69
70 /**
71 * Autorisation d'éditer un formulaire formidable
72 *
73 * Seuls les admins peuvent éditer les formulaires
74 *
75 * @param string $faire Action demandée
76 * @param string $type Type d'objet sur lequel appliquer l'action
77 * @param int $id Identifiant de l'objet
78 * @param array $qui Description de l'auteur demandant l'autorisation
79 * @param array $opt Options de cette autorisation
80 * @return bool true s'il a le droit, false sinon
81 **/
82 function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
83 $auteurs = lire_config('formidable/analyse/auteur');
84
85 /* administrateur ? */
86 if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and (!$qui['restreint']))
87 return true;
88
89 /* Test des autorisations par auteur */
90 if ($auteurs == 'on') {
91 return formidable_autoriser_par_auteur($id);
92 } else {
93 /* dans un else car la config 'auteurs' doit primer sur l'admin restreint */
94 if ($GLOBALS['formulaires']['autoriser_admin_restreint'])
95 return true;
96 else
97 return false;
98 }
99 }
100
101 /**
102 * Autorisation de voir la liste des formulaires formidable
103 *
104 * Admins et rédacteurs peuvent voir les formulaires existants
105 *
106 * @param string $faire Action demandée
107 * @param string $type Type d'objet sur lequel appliquer l'action
108 * @param int $id Identifiant de l'objet
109 * @param array $qui Description de l'auteur demandant l'autorisation
110 * @param array $opt Options de cette autorisation
111 * @return bool true s'il a le droit, false sinon
112 **/
113 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt){
114 if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
115 else return false;
116 }
117
118
119 /**
120 * Autorisation de répondre à un formidable formidable
121 *
122 * On peut répondre à un formulaire si :
123 * - c'est un formulaire classique
124 * - on enregistre et que multiple = oui
125 * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
126 * - on enregistre et que multiple = non et que modifiable = oui
127 *
128 * @param string $faire Action demandée
129 * @param string $type Type d'objet sur lequel appliquer l'action
130 * @param int $id Identifiant de l'objet
131 * @param array $qui Description de l'auteur demandant l'autorisation
132 * @param array $opt Options de cette autorisation
133 * @return bool true s'il a le droit, false sinon
134 **/
135 function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt){
136 // On regarde si il y a déjà le formulaire dans les options
137 if (isset($options['formulaire']))
138 $formulaire = $options['formulaire'];
139 // Sinon on va le chercher
140 else{
141 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
142 }
143
144 $traitements = unserialize($formulaire['traitements']);
145
146 // S'il n'y a pas d'enregistrement, c'est forcément bon
147 if (!($options = $traitements['enregistrement']))
148 return true;
149 // Sinon faut voir les options
150 else{
151 // Si multiple = oui c'est bon
152 if ($options['multiple'])
153 return true;
154 else{
155 // Si c'est modifiable, c'est bon
156 if ($options['modifiable'])
157 return true;
158 else{
159 include_spip('inc/formidable');
160 // Si la personne n'a jamais répondu, c'est bon
161 if (!formidable_verifier_reponse_formulaire($id))
162 return true;
163 else
164 return false;
165 }
166 }
167 }
168 }
169
170 /**
171 * Autorisation d'associer un nouvel auteur à un formulaire
172 *
173 * mêmes autorisations que pour éditer le formulaire
174 *
175 **/
176 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
177 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
178 }
179
180 /**
181 * Autorisation de modifier un formulaire
182 *
183 * mêmes autorisations que pour éditer le formulaire
184 *
185 **/
186 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
187 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
188 }
189
190
191 /**
192 * Autorisation d'instituer une réponse
193 *
194 * On peut modérer une réponse si on est admin
195 *
196 * @param string $faire Action demandée
197 * @param string $type Type d'objet sur lequel appliquer l'action
198 * @param int $id Identifiant de l'objet
199 * @param array $qui Description de l'auteur demandant l'autorisation
200 * @param array $opt Options de cette autorisation
201 * @return bool true s'il a le droit, false sinon
202 **/
203 function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt){
204 return formidable_auteur_admin_reponse($qui);
205 }
206
207 /**
208 * Autorisation de voir les réponses d'un formulaire formidable
209 *
210 * Au moins rédacteur pour voir les résultats
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_voir_dist($faire, $type, $id, $qui, $opt){
220 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
221 }
222
223 /**
224 * Autorisation de modifier une réponse d'un formulaire formidable
225 *
226 * suivant la config, un administrateur ou l'auteur du formulaire peuvent
227 * 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_modifier_dist($faire, $type, $id, $qui, $opt){
237 if ($id_formulaire = intval(sql_getfetsel(
238 'id_formulaire', 'spip_formulaires_reponses', "id_formulaires_reponse=$id"))) {
239
240 $retour = (autoriser_formulaire_editer_dist($faire, $type, $id_formulaire, $qui, $opt)
241 and formidable_auteur_admin_reponse($qui));
242 }
243 return $retour;
244 }
245
246 /**
247 * Autorisation de supprimer une réponse d'un formulaire formidable
248 *
249 * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer
250 *
251 * @param string $faire Action demandée
252 * @param string $type Type d'objet sur lequel appliquer l'action
253 * @param int $id Identifiant de l'objet
254 * @param array $qui Description de l'auteur demandant l'autorisation
255 * @param array $opt Options de cette autorisation
256 * @return bool true s'il a le droit, false sinon
257 **/
258 function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) {
259 $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt);
260 return $retour;
261 }
262
263 ?>