4 * Déclaration des autorisations
6 * @package SPIP\Formidable\Autorisations
10 if (!defined("_ECRIRE_INC_VERSION")) return;
12 include_spip('action/editer_liens');
13 include_spip('inc/config');
16 * Autorisation par auteur et par formulaire
18 * Seuls les auteurs associés à un formulaire peuvent y accéder
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
25 function formidable_autoriser_par_auteur($id, $id_auteur = 0) {
26 if ($id == 0) return true;
31 $id_auteur = session_get('id_auteur');
33 if ($id_auteur == null) {
36 $autorisations = objet_trouver_liens(array('formulaire'=>$id),array('auteur'=>$id_auteur));
37 $retour = count($autorisations) > 0;
43 * Fonction d'appel pour le pipeline
46 function formidable_autoriser(){}
49 * Autorisation d'éditer un formulaire formidable
51 * Seuls les admins peuvent éditer les formulaires
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
60 function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
61 $auteurs = lire_config('formidable/analyse/auteur');
63 /* administrateur ? */
64 if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and (!$qui['restreint']))
67 /* Test des autorisations par auteur */
68 if ($auteurs == 'on') {
69 return formidable_autoriser_par_auteur($id);
71 /* dans un else car la config 'auteurs' doit primer sur l'admin restreint */
72 if ($GLOBALS['formulaires']['autoriser_admin_restreint'])
80 * Autorisation de voir la liste des formulaires formidable
82 * Admins et rédacteurs peuvent voir les formulaires existants
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
91 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt){
92 if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
98 * Autorisation de répondre à un formidable formidable
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
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
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
119 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
122 $traitements = unserialize($formulaire['traitements']);
124 // S'il n'y a pas d'enregistrement, c'est forcément bon
125 if (!($options = $traitements['enregistrement']))
127 // Sinon faut voir les options
129 // Si multiple = oui c'est bon
130 if ($options['multiple'])
133 // Si c'est modifiable, c'est bon
134 if ($options['modifiable'])
137 include_spip('inc/formidable');
138 // Si la personne n'a jamais répondu, c'est bon
139 if (!formidable_verifier_reponse_formulaire($id))
149 * Autorisation d'associer un nouvel auteur à un formulaire
151 * mêmes autorisations que pour éditer le formulaire
154 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
155 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
159 * Autorisation de modifier un formulaire
161 * mêmes autorisations que pour éditer le formulaire
164 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
165 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
170 * Autorisation d'instituer une réponse
172 * On peut modérer une réponse si on est admin
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
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;
187 * Autorisation de voir les réponses d'un formulaire formidable
189 * Au moins rédacteur pour voir les résultats
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
198 function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt){
199 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
203 * Autorisation de supprimer une réponse d'un formulaire formidable
205 * Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
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
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);