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 :
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é.
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
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_articles
estARTICLES
(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 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.
Discussions par date d’activité
Une discussion
Bonjour,
je souhaite qu’un email soit envoyé à l’auteur de l’événement lorsqu’un utilisateur s’inscrit. Existe-t-il un plugin ? Une aide quelconque pour cette mise en place ? Merci !
personnelelement je n’utilise pas les formulaires livrés avec le plugin, mais
- Formidable, le générateur de formulaires
- Formulaire de participation à un évènement avec Formidable
- Formidable participation : destinataires supplémentaires
cela répond à ce besoin, et bien plus encore :)
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |