<?php /** * Déclaration des autorisations * * @package SPIP\Formidable\Autorisations **/ // Sécurité if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('action/editer_liens'); include_spip('inc/config'); /** * Autorisation par auteur et par formulaire * * Seuls les auteurs associés à un formulaire peuvent y accéder * * @param int $id id du formulaire à tester * @param int $id_auteur id de l'auteur à tester, si ==0 => auteur courant * @return bool true s'il a le droit, false sinon * */ function formidable_autoriser_par_auteur($id_formulaire, $id_auteur = 0) { if ($id_formulaire == 0) { return true; } $retour = false; if ($id_auteur == 0) { include_spip('inc/session'); $id_auteur = session_get('id_auteur'); } // Si on a bien un id_auteur if (($id_auteur = intval($id_auteur)) > 0) { // On cherche si cet auteur est lié à ce formulaire $autorisations = objet_trouver_liens(array('formulaire' => $id_formulaire), array('auteur' => $id_auteur)); $retour = count($autorisations) > 0; } return $retour; } /** * Réponses à un formulaire éditable par un auteur * * Est-on en présence d'un auteur qui tente de modifier les réponses d'un formulaire * et que Formidable est configuré pour prendre en compte les auteurs * et que les auteurs sont en droit de modifier les réponses de leurs formulaires ? * * @param array $qui Description de l'auteur demandant l'autorisation * @return bool true s'il a le droit, false sinon * */ function formidable_auteur_admin_reponse($qui) { $retour = false; if ( // Si c'est un admin complet (isset($qui['statut']) and $qui['statut'] == '0minirezo' and !$qui['restreint']) // Ou un admin restreint et qu'on a autorisé les restreints entiers à être admins des formulaires or ($qui['restreint'] and lire_config('formidable/autoriser_admin_restreint')) // Ou qu'on a autorisé les auteurs à être liés et donc admins de formulaires ET de leurs réponses or (lire_config('formidable/auteur') and lire_config('formidable/admin_reponses_auteur')) ) { $retour = true; } return $retour; } /** * Fonction d'appel pour le pipeline * @pipeline autoriser */ function formidable_autoriser() {} /** * Autorisation d'éditer un formulaire formidable * * Seuls les admins peuvent éditer les formulaires ou les auteurs explicitement associés à un formulaire * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt) { $ok = false; if ( // Si on est admin complet (isset($qui['statut']) and $qui['statut'] == '0minirezo' and !$qui['restreint']) // Ou admin restreint avec l'option droit pour admin restreint or (isset($qui['statut']) and $qui['statut'] == '0minirezo' and $qui['restreint'] and lire_config('formidable/autoriser_admin_restreint')) // Ou si ya les auteurs liés et qu'on est bien lié à ce formulaire or (lire_config('formidable/auteur') and formidable_autoriser_par_auteur($id, $qui['id_auteur'])) ) { $ok = true; } return $ok; } /** * Autorisation de voir la liste des formulaires formidable * * Admins et rédacteurs peuvent voir les formulaires existants * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt) { if (isset($qui['statut']) and ($qui['statut'] == '1comite' or $qui['statut'] == '0minirezo')) { return true; } else { return false; } } /** * Autorisation de répondre à un formulaire formidable * * On peut répondre à un formulaire si : * - c'est un formulaire classique * - on enregistre et que multiple = oui * - on enregistre et que multiple = non et que la personne n'a pas répondu encore * - on enregistre et que multiple = non et que modifiable = oui * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) { $id = intval($id); // On regarde si il y a déjà le formulaire dans les options if (isset($opt['formulaire'])) { $formulaire = $opt['formulaire']; } else { // Sinon on va le chercher $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id); } $traitements = unserialize($formulaire['traitements']); // S'il n'y a pas d'enregistrement, c'est forcément bon if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) { return true; } else { // Sinon faut voir les options // Si multiple = oui c'est bon if ($options['multiple']) { return true; } else { // Si c'est modifiable, c'est bon if ($options['modifiable']) { return true; } else { include_spip('inc/formidable'); // Si la personne n'a jamais répondu, c'est bon if (!formidable_verifier_reponse_formulaire($id, $traitements['enregistrement']['identification'], $traitements['enregistrement']['variable_php'], $traitements['enregistrement']['anonymiser'])) { return true; } else { return false; } } } } } /** * Autorisation d'associer un nouvel auteur à un formulaire * * mêmes autorisations que pour éditer le formulaire * **/ function autoriser_formulaire_associerauteurs_dist($faire, $type, $id, $qui, $opt) { return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt); } /** * Autorisation de modifier un formulaire * * mêmes autorisations que pour éditer le formulaire * **/ function autoriser_formulaire_modifier_dist($faire, $type, $id, $qui, $opt) { return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt); } /** * Autorisation d'instituer une réponse * * On peut modérer une réponse si on a le droit d'édition sur le formulaire parent, * et si on n'est pas admin, s'il y a l'option pour que les auteurs liés aient le droit de modérer les réponses aussi * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulairesreponse_instituer_dist($faire, $type, $id, $qui, $opt) { $ok = false; // Quel formulaire parent if (isset($opt['id_formulaire'])) { $id_formulaire = intval($opt['id_formulaire']); } else { $id_formulaire = sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', 'id_formulaires_reponse = '.intval($id)); } if ( // Si on a bien trouvé le formulaire parent $id_formulaire // Si on peut éditer le formulaire parent and autoriser('editer', 'formulaire', $id_formulaire, $qui, $opt) and ( // Et soit on est admin (isset($qui['statut']) and $qui['statut'] == '0minirezo') or // Soit c'est autorisé pour les auteurs liés (et si on est là c'est forcément qu'on est auteur lié puisqu'autorisé à éditer) lire_config('formidable/admin_reponses_auteur') ) ) { $ok = true; } return $ok; } /** * Autorisation de voir les réponses d'un formulaire formidable * * Au moins rédacteur pour voir les résultats * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulairesreponse_voir_dist($faire, $type, $id, $qui, $opt) { return autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt); } /** * Autorisation de modifier une réponse d'un formulaire formidable * * Comme le droit d'instituer * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt) { return autoriser('instituer', $type, $id, $qui, $opt); } /** * Autorisation de supprimer une réponse d'un formulaire formidable * * Il faut pouvoir modifier les réponses d'un formulaire pour pouvoir les en supprimer * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulairesreponse_supprimer_dist($faire, $type, $id, $qui, $opt) { $retour = autoriser_formulairesreponse_modifier_dist($faire, $type, $id, $qui, $opt); return $retour; } /** * Autorisation de poster une réponse en Collection+JSON * * Tout le monde peut, l'autorisation réelle se fera après pendant le traitement, suivant l'id_formulaire envoyé * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_formulairesreponse_post_collection_dist($faire, $type, $id, $qui, $opt) { return true; }