SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

290 Plugins, 198 contribs sur SPIP-Zone, 89 visiteurs en ce moment

Accueil > Dates, calendriers et agendas > Plugin Agenda > Formulaire de participation à un événement

Formulaire de participation à un événement

23 janvier 2010 – par Cerdic, Jean-Baptiste Pressac, nicod_ – 75 commentaires

18 votes

Cet article tente de rassembler des informations au sujet de l’affichage d’un formulaire de participation aux événements gérés par le plugin Agenda développé par Cédric Morin.

La version 2 du plugin Agenda permet d’afficher dans l’espace public des formulaires de participation aux événements. Cette fonctionnalité est incomplète, mais utilisable.

Voici à quoi ressemble le formulaire sur une page de l’espace public en utilisant les squelettes par défaut de SPIP :

Capture d’écran d’un formulaire de participation à un événement

Les utilisateurs [1] ont la possibilité de répondre j’y serai, j’y serai peut-êre ou je n’y vais pas.

Il est possible de limiter le nombre de places disponibles. Dans ce cas, quand l’événement est complet, les utilisateurs en sont tenus informés par un message et le formulaire n’est plus affiché, sauf pour les utilisateurs connectés ayant déjà répondu j’y serai de manière à leur permettre de se désinscrire et de libérer éventuellement une place.

Si l’utilisateur revient au cours de sa visite sur la page du formulaire, sa réponse reste affichée.

Le plugin ne permet pas encore l’affichage des réponses dans l’espace privé, mais elles peuvent être consultées dans la table spip_evenements_participants en base de données.

Par ailleurs, l’inscription est valable sur toute la durée de l’événement, y compris si l’événement se produit avec des répétitions.

Affichage du formulaire

Le formulaire s’affiche dans un squelette grâce à la balise #FORMULAIRE_PARTICIPER_EVENEMENT{#ID_EVENEMENT} [2] à condition qu’elle soit incluse dans une boucle de type EVENEMENTS. Par exemple, dans le squelette article.html, vous pouvez rajouter la boucle suivante pour afficher les événement liés à l’article et les formulaires de participation associés :

<BOUCLE_evenement(EVENEMENTS){id_article}>
        <p>#TITRE</p>
        #FORMULAIRE_PARTICIPER_EVENEMENT{#ID_EVENEMENT}
</BOUCLE_evenement>

Notez que la boucle ne doit pas se trouver dans un INCLURE statique, faute de quoi le formulaire ne sera pas rafraîchi à chaque consultation de la page par l’utilisateur. Autrement dit, si au lieu de placer la boucle directement dans article.html, vous souhaitez la placer dans un squelette nommé formulaire-evenement.html, n’utilisez pas [(#INCLURE{fond=formulaire-evenement})] pour appeller ce squelette depuis article.html, mais <INCLURE{fond=formulaire-evenement}> [3].

Par ailleurs, la balise #FORMULAIRE_PARTICIPER_EVENEMENT étant un formulaire CVT (charger, vérifier, traiter), vous pouvez bénéficier du chargement du formulaire en AJAX en encapsulant la balise dans une div de classe ajax.

<div class='ajax'>
#FORMULAIRE_PARTICIPER_EVENEMENT
</div>

L’insertion de la balise #FORMULAIRE_PARTICIPER_EVENEMENT{#ID_EVENEMENT} dans vos squelettes ne suffit pas. Pour que le formulaire s’affiche, vous devez cocher la case « inscription en ligne » du formulaire de saisie de l’événement. Vous avez également la possibilité de saisir un nombre de places si celui-ci est limité.

Formulaire de saisie d’un événement avec une inscription en ligne

Sauvegarde des réponses dans la base de données

Les réponses sont stockées en base de données dans la table spip_evenements_participants, créée à l’installation du plugin. Elle comporte les champs suivants :

  • id_evenement
  • id_auteur
  • date
  • reponse
La table spip_evenements_participants dans phpMyAdmin

Le champ reponse peut prendre les valeurs suivantes :

  • ’oui’ (si la réponse est "j’y serai")
  • ’non’ (si la réponse est "je n’y vais pas")
  •  ?’ (si la réponse est "j’y serai peut-être")

La seule façon d’identifier l’auteur d’une réponse est donc id_auteur. Il vaut donc mieux inciter les utilisateurs n’ayant pas de compte de rédacteur ou d’administrateur à créer un compte sur votre site et à se connecter avant de répondre. Cette connexion préalable est d’autant plus nécessaire que dans le cas où un utilisateur ne serait pas connecté, sa réponse serait enregistrée sous l’id_auteur zéro et sa réponse perdue par l’enregistrement de la réponse du prochain utilisateur non connecté.

Pour vérifier si l’utilisateur est connecté, vous pouvez essayer de modifier formulaires_participer_evenement_verifier_dist, en rajoutant après $reponse = _request('reponse'); le test suivant :

if ($GLOBALS['visiteur_session']['id_auteur'] == 0)
$erreurs['reponse'] = "Pour signaler votre participation a l'evenement vous devez etre connecte sur le site. Si vous n'avez pas encore de compte, veuillez en creer un.";

et en remplaçant if (!($reponse=_request(’reponse’)) suivant par elseif (!($reponse=_request(’reponse’)).

Si vous hésitez à autoriser des inconnus à se connecter à votre site, notez que SPIP vous donne la possibilité de créer des auteurs nommés « visiteurs », n’ayant pas accès à l’espace privé. Ce type d’auteur est généralement utilisé pour permettre à des utilisateurs de poster des messages dans des forums après abonnement. Pour autoriser l’inscription des visiteurs, allez dans Configuration > Interactivité > Visiteurs puis cochez la case Accepter l’inscription de visiteurs du site public.

Les balises #FORMULAIRE_INSCRIPTION et #LOGIN_PUBLIC vous permettront d’afficher le formulaire d’inscription et le formulaire permettant à vos utilisateurs de s’identifier tout en restant sur le site public [4]. Vous pouvez afficher la liste des visiteurs dans Auteurs puis en cliquant sur Afficher les visiteurs.

Affichage des inscriptions

Le formulaire d’inscription étant une fonctionnalité en cours de développement du plugin Agenda, il n’est pas encore possible de visualiser les inscriptions dans l’espace privé. Vous pouvez toutefois visualiser le contenu de la table spip_evenements_participants avec un outil comme phpMyAdmin si votre hébergeur l’a mis à votre disposition.

Par contre, il est possible d’afficher dans l’espace public la liste des auteurs inscrits à un événement en rajoutant dans le squelette article.html une boucle du type :

<BOUCLE_evenement(EVENEMENTS){id_article}>
<BOUCLE_personnes_inscrites(spip_auteurs spip_evenements_participants){id_evenement}{par nom}>
#NOM
</BOUCLE_personnes_inscrites>
</BOUCLE_evenement>

La boucle utilise deux fonctionnalités de SPIP :

  • la possibilité d’interroger une table de la base de donnée pour laquelle aucun alias n’a été déclaré (ce qui est le cas actuellement pour la table spip_evenements_participants). Par exemple, l’alias de la table spip_articles est ARTICLES (en majuscules), ce qui permet d’écrire <BOUCLEx(ARTICLES)> au lieu de <BOUCLEx(spip_articles)>.
  • les jointures : la table spip_evenements_participants ne contient pas le nom des auteurs qui se trouve dans la table spip_auteurs, c’est pourquoi la boucle fait appel à ces deux tables pour créer une jointure [5].

Etude du code du formulaire

Pour revenir à la balise #FORMULAIRE_PARTICIPER_EVENEMENT, celle-ci est un formulaire CVT (charger, vérifier, traiter). Vous trouverez donc dans le dossier formulaires à la racine du plugin, le squelette participer_evenement.html et le script participer_evenement.php contenant les fonctions :

  • formulaires_participer_evenement_charger_dist($id_evenement)
  • formulaires_participer_evenement_verifier_dist($id_evenement)
  • formulaires_participer_evenement_traiter_dist($id_evenement)

La fonction formulaires_participer_evenement_charger_dist est exécutée avant l’affichage du formulaire pour vérifier si l’événement passé en paramètre par #FORMULAIRE_PARTICIPER_EVENEMENT{#ID_EVENEMENT} existe réellement et qu’une inscription en ligne est bien prévue pour cet événement (la case « Inscription en ligne » est bien cochée dans le formulaire de saisie de l’événement). Si ce n’est pas le cas, le formulaire n’est pas affiché. Sinon, la fonction vérifie si un nombre de places a été défini et le cas échéant, calcule si l’événement est complet ou non. Les réponses ’oui’ ont un poids de 1 et les réponses ’peut-être’ un poids de 0,5. La somme des réponses ’peut-être’ est arrondie à l’entier supérieur. Par exemple, si deux personnes ont répondu ’oui’ et trois personnes ’peut-être’, on considère que (2 x 1) + arrondi(3 x 0,5) = 4 places ont été réservées. Si l’événement est complet, le message "evenement complet" est affiché et le formulaire ne s’affiche que si l’utilisateur (identifié par $GLOBALS['visiteur_session']['id_auteur']) a déjà répondu ’oui’ de manière à lui permettre de se désinscrire et de libérer éventuellement une place.

Si le formulaire est affiché et que l’utilisateur clique sur le bouton d’envoi, la fonction formulaires_participer_evenement_verifier_dist prend le relais pour vérifier que l’utilisateur a bien coché une des propositions, faute de quoi le message "Indiquez votre choix" est affiché. Si l’événement est complet et que l’utilisateur qui avait préalablement répondu ’non’ ou ’peut-être’ change sa réponse pour ’oui’, on affiche le message ’Plus de places’.

Si aucun message d’erreur n’est affiché, les réponses sont traitées par formulaires_participer_evenement_traiter_dist qui met à jour ou insère dans la base de donnée la réponse de l’utilisateur puis affiche un message de confirmation de prise en compte de la réponse.

Notes

[1Nous préférons à « visiteur » le terme d’« utilisateur » pour désigner une personne qui consulte votre site. En effet, dans le jargon de SPIP, un visiteur est un auteur qui peut avoir des droits pour participer à des forums, par exemple, mais qui ne peux pas accéder à l’espace privé et modifier le contenu du site.

[2Attention, il est important d’utiliser la balise #ID_EVENEMENT et non pas le critère {id_evenement}, faute de quoi le code ne sera pas valide.

[3Pour connaitre les différences entre les INCLURE statiques et dynamiques, consultez <INCLURE> d’autres squelettes.

[4Pour en savoir plus sur les formulaires, consultez l’article éponyme sur le site officiel.

[5Pour en savoir plus sur les jointures, voir programmer.spip.org.

Dernière modification de cette page le 30 juin 2014

Retour en haut de la page
Chargement en cours...

Ça discute par ici

  • Convertir un site SPIP 3 en utf-8 avec le plugin Grenier

    8 janvier 2014 – 23 commentaires

    SPIP 3 fonctionne nativement avec l’encodage universel unicode utf-8. Sur certains sites (par exemple sur une mise à jour), on peut avoir un site qui est resté en iso-latin ce qui n’est pas conseillé (source de bugs, d’incompatibilité, ...) . (...)

  • ScolaSPIP 4

    19 janvier 2016 – 360 commentaires

    ScolaSPIP est plugin-squelette responsive personnalisable pour sites Web d’établissements scolaires basé sur SPIPr Présentation de ScolaSPIP Ce plugin pour SPIP 3 est développé par la Dane de l’académie de Versailles pour les webmestres de cette (...)

  • SPIP 3.2, Agenda et FullCalendar

    6 juin – 10 commentaires

    Nous avions publié un article sur la manière d’utiliser FullCalendar avec SPIP 3.0 afin d’afficher des évènements sous forme d’Agenda. La version de FullCalendar a changé avec SPIP 3.2. Le présent article est donc un tutoriel adapté à SPIP 3.2. Pour (...)

  • Mailsubscribers

    16 janvier 2013 – 408 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes de (...)

  • Nouvelle version - Modération de modifications

    29 janvier 2012 – 49 commentaires

    Suite à une migration depuis SPIP-Agora, j’ai développé ce plugin permettant de reprendre la fonctionnalité « Nouvelle version » inexistente sur SPIP2 ni sur SPIP3 Ce plugin permet d’étendre le work-flow de -rédaction-publication d’un article au cas d’un (...)