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');
90 /* administrateur ? */
91 if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and (count($qui['restreint']) == 0)) {
95 /* Test des autorisations par auteur */
96 if ($auteurs == 'on') {
97 return formidable_autoriser_par_auteur($id);
100 /* Test des autorisations pour un admin restreint */
101 if (count($qui['restreint'])) {
102 $autoriser_admin_restreint = isset($GLOBALS['autoriser_admin_restreint'])
103 ?
$GLOBALS['autoriser_admin_restreint']
104 : lire_config('formidable/analyse/autoriser_admin_restreint') == 'on'
108 return $autoriser_admin_restreint;
113 * Autorisation de voir la liste des formulaires formidable
115 * Admins et rédacteurs peuvent voir les formulaires existants
117 * @param string $faire Action demandée
118 * @param string $type Type d'objet sur lequel appliquer l'action
119 * @param int $id Identifiant de l'objet
120 * @param array $qui Description de l'auteur demandant l'autorisation
121 * @param array $opt Options de cette autorisation
122 * @return bool true s'il a le droit, false sinon
124 function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt) {
125 if (isset($qui['statut']) and $qui['statut'] <= '1comite') {
134 * Autorisation de répondre à un formidable formidable
136 * On peut répondre à un formulaire si :
137 * - c'est un formulaire classique
138 * - on enregistre et que multiple = oui
139 * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
140 * - on enregistre et que multiple = non et que modifiable = oui
142 * @param string $faire Action demandée
143 * @param string $type Type d'objet sur lequel appliquer l'action
144 * @param int $id Identifiant de l'objet
145 * @param array $qui Description de l'auteur demandant l'autorisation
146 * @param array $opt Options de cette autorisation
147 * @return bool true s'il a le droit, false sinon
149 function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) {
152 // On regarde si il y a déjà le formulaire dans les options
153 if (isset($opt['formulaire'])) {
154 $formulaire = $opt['formulaire'];
156 // Sinon on va le chercher
157 $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
160 $traitements = unserialize($formulaire['traitements']);
162 // S'il n'y a pas d'enregistrement, c'est forcément bon
163 if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) {
166 // Sinon faut voir les options
167 // Si multiple = oui c'est bon
168 if ($options['multiple']) {
171 // Si c'est modifiable, c'est bon
172 if ($options['modifiable']) {
175 include_spip('inc/formidable');
176 // Si la personne n'a jamais répondu, c'est bon
177 if (!formidable_verifier_reponse_formulaire($id)) {
188 * Autorisation d'associer un nouvel auteur à un formulaire
190 * mêmes autorisations que pour éditer le formulaire
193 function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
194 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
198 * Autorisation de modifier un formulaire
200 * mêmes autorisations que pour éditer le formulaire
203 function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) {
204 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
209 * Autorisation d'instituer une réponse
211 * On peut modérer une réponse si on est admin
213 * @param string $faire Action demandée
214 * @param string $type Type d'objet sur lequel appliquer l'action
215 * @param int $id Identifiant de l'objet
216 * @param array $qui Description de l'auteur demandant l'autorisation
217 * @param array $opt Options de cette autorisation
218 * @return bool true s'il a le droit, false sinon
220 function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt) {
221 return formidable_auteur_admin_reponse($qui);
225 * Autorisation de voir les réponses d'un formulaire formidable
227 * Au moins rédacteur pour voir les résultats
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
236 function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt) {
237 return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt);
241 * Autorisation de modifier une réponse d'un formulaire formidable
243 * suivant la config, un administrateur ou l'auteur du formulaire peuvent
246 * @param string $faire Action demandée
247 * @param string $type Type d'objet sur lequel appliquer l'action
248 * @param int $id Identifiant de l'objet
249 * @param array $qui Description de l'auteur demandant l'autorisation
250 * @param array $opt Options de cette autorisation
251 * @return bool true s'il a le droit, false sinon
253 function autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt) {
256 if ($id_formulaire = intval(
259 'spip_formulaires_reponses',
260 "id_formulaires_reponse=$id"
264 autoriser_formulaire_editer_dist($faire, $type, $id_formulaire, $qui, $opt)
265 and formidable_auteur_admin_reponse($qui);
272 * Autorisation de supprimer une réponse d'un formulaire formidable
274 * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer
276 * @param string $faire Action demandée
277 * @param string $type Type d'objet sur lequel appliquer l'action
278 * @param int $id Identifiant de l'objet
279 * @param array $qui Description de l'auteur demandant l'autorisation
280 * @param array $opt Options de cette autorisation
281 * @return bool true s'il a le droit, false sinon
283 function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) {
284 $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt);
290 * Autorisation de poster une réponse en Collection+JSON
292 * Tout le monde peut, l'autorisation réelle se fera après pendant le traitement, suivant l'id_formulaire envoyé
294 * @param string $faire Action demandée
295 * @param string $type Type d'objet sur lequel appliquer l'action
296 * @param int $id Identifiant de l'objet
297 * @param array $qui Description de l'auteur demandant l'autorisation
298 * @param array $opt Options de cette autorisation
299 * @return bool true s'il a le droit, false sinon
301 function autoriser_formulairesreponse_post_collection_dist($faire, $type, $id, $qui, $opt) {