[PLUGINS] +set de base
[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 return $retour;
40 }
41
42 /**
43 * Fonction d'appel pour le pipeline
44 * @pipeline autoriser
45 */
46 function formidable_autoriser(){}
47
48 /**
49 * Autorisation d'éditer un formulaire formidable
50 *
51 * Seuls les admins peuvent éditer les formulaires
52 *
53 * @param string $faire Action demandée
54 * @param string $type Type d'objet sur lequel appliquer l'action
55 * @param int $id Identifiant de l'objet
56 * @param array $qui Description de l'auteur demandant l'autorisation
57 * @param array $opt Options de cette autorisation
58 * @return bool true s'il a le droit, false sinon
59 **/
60 function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
61 $auteurs = lire_config('formidable/analyse/auteur');
62
63 /* administrateur ? */
64 if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and (!$qui['restreint']))
65 return true;
66
67 /* Test des autorisations par auteur */
68 if ($auteurs == 'on') {
69 return formidable_autoriser_par_auteur($id);
70 } else {
71 /* dans un else car la config 'auteurs' doit primer sur l'admin restreint */
72 if ($GLOBALS['formulaires']['autoriser_admin_restreint'])
73 return true;
74 else
75 return false;
76 }
77 }
78
79 /**
80 * Autorisation de voir la liste des formulaires formidable
81 *
82 * Admins et rédacteurs peuvent voir les formulaires existants
83 *
84 * @param string $faire Action demandée
85 * @param string $type Type d'objet sur lequel appliquer l'action
86 * @param int $id Identifiant de l'objet
87 * @param array $qui Description de l'auteur demandant l'autorisation
88 * @param array $opt Options de cette autorisation
89 * @return bool true s'il a le droit, false sinon
90 **/
91 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt){
92 if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
93 else return false;
94 }
95
96
97 /**
98 * Autorisation de répondre à un formidable formidable
99 *
100 * On peut répondre à un formulaire si :
101 * - c'est un formulaire classique
102 * - on enregistre et que multiple = oui
103 * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
104 * - on enregistre et que multiple = non et que modifiable = oui
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_formulaire_repondre_dist($faire, $type, $id, $qui, $opt){
114 // On regarde si il y a déjà le formulaire dans les options
115 if (isset($options['formulaire']))
116 $formulaire = $options['formulaire'];
117 // Sinon on va le chercher
118 else{
119 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
120 }
121
122 $traitements = unserialize($formulaire['traitements']);
123
124 // S'il n'y a pas d'enregistrement, c'est forcément bon
125 if (!($options = $traitements['enregistrement']))
126 return true;
127 // Sinon faut voir les options
128 else{
129 // Si multiple = oui c'est bon
130 if ($options['multiple'])
131 return true;
132 else{
133 // Si c'est modifiable, c'est bon
134 if ($options['modifiable'])
135 return true;
136 else{
137 include_spip('inc/formidable');
138 // Si la personne n'a jamais répondu, c'est bon
139 if (!formidable_verifier_reponse_formulaire($id))
140 return true;
141 else
142 return false;
143 }
144 }
145 }
146 }
147
148 /**
149 * Autorisation d'associer un nouvel auteur à un formulaire
150 *
151 * mêmes autorisations que pour éditer le formulaire
152 *
153 **/
154 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
155 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
156 }
157
158 /**
159 * Autorisation de modifier un formulaire
160 *
161 * mêmes autorisations que pour éditer le formulaire
162 *
163 **/
164 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
165 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
166 }
167
168
169 /**
170 * Autorisation d'instituer une réponse
171 *
172 * On peut modérer une réponse si on est admin
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_formulaires_reponse_instituer_dist($faire, $type, $id, $qui, $opt){
182 if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
183 else return false;
184 }
185
186 /**
187 * Autorisation de voir les réponses d'un formulaire formidable
188 *
189 * Au moins rédacteur pour voir les résultats
190 *
191 * @param string $faire Action demandée
192 * @param string $type Type d'objet sur lequel appliquer l'action
193 * @param int $id Identifiant de l'objet
194 * @param array $qui Description de l'auteur demandant l'autorisation
195 * @param array $opt Options de cette autorisation
196 * @return bool true s'il a le droit, false sinon
197 **/
198 function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt){
199 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
200 }
201
202 /**
203 * Autorisation de supprimer une réponse d'un formulaire formidable
204 *
205 * Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
206 *
207 * @param string $faire Action demandée
208 * @param string $type Type d'objet sur lequel appliquer l'action
209 * @param int $id Identifiant de l'objet
210 * @param array $qui Description de l'auteur demandant l'autorisation
211 * @param array $opt Options de cette autorisation
212 * @return bool true s'il a le droit, false sinon
213 **/
214 function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt){
215 // On récupère l'id du formulaire
216 if ($id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', $id)))
217 return autoriser('editer', 'formulaire', $id_formulaire);
218 else
219 return false;
220 }
221
222 ?>