4 * Déclaration des autorisations
6 * @package SPIP\Formidable\Autorisations
10 if (!defined('_ECRIRE_INC_VERSION')) {
14 include_spip('action/editer_liens');
15 include_spip('inc/config');
18 * Autorisation par auteur et par formulaire
20 * Seuls les auteurs associés à un formulaire peuvent y accéder
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
27 function formidable_autoriser_par_auteur($id, $id_auteur = 0) {
34 if ($id_auteur == 0) {
35 $id_auteur = session_get('id_auteur');
37 if ($id_auteur == null) {
40 $autorisations = objet_trouver_liens(array('formulaire' => $id), array('auteur' => $id_auteur));
41 $retour = count($autorisations) > 0;
48 * Réponses à un formulaire éditable par un auteur
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 ?
54 * @param array $qui Description de l'auteur demandant l'autorisation
55 * @return bool true s'il a le droit, false sinon
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')));
69 * Fonction d'appel pour le pipeline
72 function formidable_autoriser() {
76 * Autorisation d'éditer un formulaire formidable
78 * Seuls les admins peuvent éditer les formulaires
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
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)) {
94 /* Test des autorisations par auteur */
95 if ($auteurs == 'on') {
96 return formidable_autoriser_par_auteur($id);
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'
107 return $autoriser_admin_restreint;
112 * Autorisation de voir la liste des formulaires formidable
114 * Admins et rédacteurs peuvent voir les formulaires existants
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
123 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt) {
124 if (isset($qui['statut']) and ($qui['statut'] == '1comite' or $qui['statut'] == '0minirezo')) {
133 * Autorisation de répondre à un formidable formidable
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
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
148 function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) {
151 // On regarde si il y a déjà le formulaire dans les options
152 if (isset($opt['formulaire'])) {
153 $formulaire = $opt['formulaire'];
155 // Sinon on va le chercher
156 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
159 $traitements = unserialize($formulaire['traitements']);
161 // S'il n'y a pas d'enregistrement, c'est forcément bon
162 if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) {
165 // Sinon faut voir les options
166 // Si multiple = oui c'est bon
167 if ($options['multiple']) {
170 // Si c'est modifiable, c'est bon
171 if ($options['modifiable']) {
174 include_spip('inc/formidable');
175 // Si la personne n'a jamais répondu, c'est bon
176 if (!formidable_verifier_reponse_formulaire($id)) {
187 * Autorisation d'associer un nouvel auteur à un formulaire
189 * mêmes autorisations que pour éditer le formulaire
192 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
193 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
197 * Autorisation de modifier un formulaire
199 * mêmes autorisations que pour éditer le formulaire
202 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
203 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
208 * Autorisation d'instituer une réponse
210 * On peut modérer une réponse si on est admin
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
219 function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt) {
220 return formidable_auteur_admin_reponse($qui);
224 * Autorisation de voir les réponses d'un formulaire formidable
226 * Au moins rédacteur pour voir les résultats
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
235 function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt) {
236 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
240 * Autorisation de modifier une réponse d'un formulaire formidable
242 * suivant la config, un administrateur ou l'auteur du formulaire peuvent
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
252 function autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt) {
255 if ($id_formulaire = intval(
258 'spip_formulaires_reponses',
259 "id_formulaires_reponse=$id"
263 autoriser_formulaire_editer_dist($faire, $type, $id_formulaire, $qui, $opt)
264 and formidable_auteur_admin_reponse($qui);
271 * Autorisation de supprimer une réponse d'un formulaire formidable
273 * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer
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
282 function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) {
283 $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt);
289 * Autorisation de poster une réponse en Collection+JSON
291 * Tout le monde peut, l'autorisation réelle se fera après pendant le traitement, suivant l'id_formulaire envoyé
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
300 function autoriser_formulairesreponse_post_collection_dist($faire, $type, $id, $qui, $opt) {