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 tablespip_articlesestARTICLES(en majuscules), ce qui permet d’écrire<BOUCLEx(ARTICLES)>au lieu de<BOUCLEx(spip_articles)>. - les jointures : la table
spip_evenements_participantsne contient pas le nom des auteurs qui se trouve dans la tablespip_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.



Vos commentaires
# Le 3 avril à 12:03, par Daf
Bonjour,
D’après mes recherches, on ne peut pas limiter l’affichage du formulaire d’inscription à une date limite d’inscription à un évènement. Comment peut on mettre cette solution en place ?
Est ce prevu pour une version future ?
merci et bravo pour le travail accompli !
Répondre à ce message
# Le 7 février à 14:14, par ?
Bonjour,
Le formulaire d’inscription ne semble pas gérer les répétitions à un événement ?
Comment prendre en charge les répétitions et enregistrer la bonne date pour l’inscription ?
Merci.
Florent
# Le 7 février à 17:15, par ?
Bonjour,
Comment tester si un événement demande une inscription obligatoire ? J’ai essayé différentes solutions avec
formulaires_participer_evenement_charger_dist...mais sans succès. ( J’aimerais charger le formulaire de login uniquement sur les événements obligatoire lorsque l’internaute n’est pas logué.)
# Le 7 février à 19:11, par Jean Baptiste Pressac
Bonjour,
Comme indiqué au début de l’article, la fonctionnalité ne gère pas les répétitions. Mais tu peux toujours en faire la suggestion à Cédric qui a développé le plugin.
# Le 8 février à 22:17, par Jean Baptiste Pressac
Pour tester si l’utilisateur est connecté, essaye de rajouter dans formulaires_participer_evenement_verifier_dist, 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 remplace
if (!($reponse=_request(’reponse’))suivant parelseif (!($reponse=_request(’reponse’)).# Le 9 février à 14:16, par ?
C’est bien ce petit bout de fonction en plus. On conserve néanmoins un souci ergonomique :
L’internaute tente de s’inscrire, puis déchu par un message d’erreur, il doit d’une part créer un compte, puis revenir sur la page pour confirmer son inscription à l’événement. Trop tordu pour que celà fonctionne je pense.
Une forme de surcharge du formulaire d’inscription ne serait-elle pas plus judicieuse ? Le genre "créez un compte et en même temps vous serez inscrit".
# Le 9 février à 17:24, par Jean Baptiste Pressac
C’est sûr que la rustine proposée n’est qu’une piste à améliorer. Cependant, quand on regarde d’autres sites comme celui du Sundance Festival, ils ont plutôt tendance à séparer l’inscription au site de l’utilisation de fonctionnalités comme l’ajout de séances de films à un agenda personnel.
De toutes façons, cet article n’est qu’une contribution à la documentation du plugin. Si tu as des suggestions, tu peux toujours les soumettre aux développeurs sur le forum du plugin.
Répondre à ce message
# Le 30 janvier à 17:15, par DJIMEL
Bonjour, et bravo pour le plugin... mais je suis vraiment débutant sous spip...
je ne sais pas comment accéder à la fameuse table spip_evenements_participation, afin de récupérer les inscrits à un évènement... ???
Merci d’avance !
Jean-Michel
# Le 31 janvier à 11:14, par Jean Baptiste Pressac
Bonjour, tu trouveras la réponse dans la partie « Affichage des inscriptions » que je viens de mettre à jour.
Répondre à ce message
# Le 24 janvier à 21:46, par Jean Baptiste Pressac
Pour afficher les participants, la boucle suivante semble fonctionner :
<BOUCLE_personnes_inscrites(spip_auteurs spip_evenements_participants){par nom}>#NOM
</BOUCLE_personnes_inscrites>
# Le 25 janvier à 01:23, par DD
Bonjour,
Je confirme : ça fonctionne très bien aussi avec inscription2 pour les champs supplémentaires :
<BOUCLE_auteurs(spip_auteurs spip_evenements_participants spip_auteurs_elargis){par nom}{id_evenement}>#REPONSE #NOM_FAMILLE #PRENOM #PROFESSION #SOCIETE #TELEPHONE #EMAIL
</BOUCLE_auteurs>
dd
# Le 25 janvier à 21:49, par ?
<BOUCLE_personnes_inscrites(spip_auteurs spip_evenements_participants){par nom}>#NOM
</BOUCLE_personnes_inscrites>
Cette boucle me retourne tous les auteurs du site sans qu’il y ai besoin d’être inscrit. Il doit y avoir un petit os.
# Le 25 janvier à 22:11, par ?
Oups, je me suis trompé, il manque le critère
{id_evenement}à la bouclepersonnes_inscrites. Voici la boucle corrigée :<BOUCLE_personnes_inscrites(spip_auteurs spip_evenements_participants){par nom}{id_evenement}> #NOM </BOUCLE_personnes_inscrites># Le 25 janvier à 22:16, par Jean Baptiste Pressac
Oui, je me suis trompé dans mon exemple, il manque le critère
{id_evenement}à la bouclepersonnes_inscrites. Voici la boucle corrigée :<BOUCLE_personnes_inscrites(spip_auteurs spip_evenements_participants){par nom}{id_evenement}>#NOM
</BOUCLE_personnes_inscrites>
# Le 26 janvier à 02:34, par ?
Huuuu ça m’affiche ceux qui ont répondu, mais pas particulièrement ceux qui ont répondu par la positive. Les noms de ceux qui ont répondu par la négative sont aussi affichés. Y a t-il un moyen d’afficher les réponses "oui peut-être ou non" à coté du nom ?
# Le 26 janvier à 11:14, par ?
Heu si j’ajoute
#reponsepeut être ? Je ne sais pas trop si l’on peut utiliser un morceau d’une table non déclaré de la sorte.# Le 28 janvier à 18:37, par Jean Baptiste Pressac
Oui, tu peux afficher tous les champs de la table en utilisant des balises de même nom que le champ à condition que la balise soit écrite en majuscules (ton idée d’utiliser
#REPONSEest donc la bonne, à la majuscule près).Tu peux aussi utiliser les champs comme critère de la boucle. Donc normalement le critère
{reponse='oui'}devrait fonctionner.Répondre à ce message
# Le 24 janvier à 19:57, par ?
Bonjour,
Coté site public, peut-on afficher les personnes inscrites ?
Répondre à ce message