[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / formidable_1_0 / formidable_autorisations.php
diff --git a/www/plugins/formidable_1_0/formidable_autorisations.php b/www/plugins/formidable_1_0/formidable_autorisations.php
new file mode 100644 (file)
index 0000000..411ee3f
--- /dev/null
@@ -0,0 +1,222 @@
+<?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, $id_auteur = 0) {
+       if ($id == 0) return true;
+
+       $retour = false;
+
+       if ($id_auteur == 0)
+               $id_auteur = session_get('id_auteur');
+
+       if ($id_auteur == null) {
+               $retour = false;
+       } else {
+               $autorisations = objet_trouver_liens(array('formulaire'=>$id),array('auteur'=>$id_auteur));
+               $retour = count($autorisations) > 0;
+       }
+       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
+ *
+ * @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){
+       $auteurs = lire_config('formidable/analyse/auteur');
+
+       /* administrateur ? */
+       if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and (!$qui['restreint']))
+               return true;
+
+       /* Test des autorisations par auteur */
+       if ($auteurs == 'on') {
+               return formidable_autoriser_par_auteur($id);
+       } else {
+               /* dans un else car la config 'auteurs' doit primer sur l'admin restreint */
+               if ($GLOBALS['formulaires']['autoriser_admin_restreint'])
+                       return true;
+               else
+                       return false;
+       }
+}
+
+/**
+ * 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') return true;
+    else return false;
+}
+
+
+/**
+ * Autorisation de répondre à un formidable 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){
+// On regarde si il y a déjà le formulaire dans les options
+    if (isset($options['formulaire']))
+        $formulaire = $options['formulaire'];
+    // Sinon on va le chercher
+    else{
+        $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 (!($options = $traitements['enregistrement']))
+        return true;
+    // Sinon faut voir les options
+    else{
+        // 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))
+                    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 est admin
+ *
+ * @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_reponse_instituer_dist($faire, $type, $id, $qui, $opt){
+    if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
+    else return false;
+}
+
+/**
+ * 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 supprimer une réponse d'un formulaire formidable
+ *
+ * Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
+ *
+ * @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){
+    // On récupère l'id du formulaire
+    if ($id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', $id)))
+        return autoriser('editer', 'formulaire', $id_formulaire);
+    else
+        return false;
+}
+
+?>