You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
316 lines
10 KiB
316 lines
10 KiB
<?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); |
|
} |
|
|
|
include_spip('formidable_fonctions'); |
|
$traitements = formidable_deserialize($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; |
|
}
|
|
|