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é
15 discussions
Bonjour,
Je reviens avec une nouvelle question : étant donné que le plugin ne permet pas de suivre les inscriptions en partie privée, peut-on imaginer l’envoi d’un mail à un destinataire à chaque enregistrement dans ce formulaire ? Comment procéder ?
Un grand merci !!
ceci est possible dans la partie traitement du formulaire (le fichier php) mais :
Merci pour ces pistes. Ce code mérite d’être développé à mon sens. J’essaierai d’y contribuer dans la limite de mes compétences, et de mon temps aussi.
Merci gilcot
oui et non... :-) Le plugin essaye d’être à la fois générique et simple, or tout le monde n’a pas le besoin du mail de notification (perso, j’aimerais pas remplir ma boîte de vingt à trente message juste parce-que les gens s’inscrivent... mais par contre la seconde option me plait mieux : pouvoir sortir une liste de présence/appel le jour J...)
Comme c’est un plugin pour SPIP 2.0 et suivants, il peut se permettre de faire le minimum à ce niveau pour rester simple : aux plugins/webmestres de surcharger le formulaire donné en exemple ou de créer les leurs selon les besoins.
Mais s’il y a des améliorations que les uns et les autres peuvent apporter, elles sont bienvenue : cette fonctionnalité était expérimentale (je crois l’avoir lu quelque part dans la doc) d’où ce goût parfois d’inachevé. Mais le principal est là à mon avis (la table des participants, déjà déclarée par le plugin et qui ne demande qu’à être exploité)
Exact : je crois que même pour moi, c’est plus judicieux de proposer la consultation de la liste des inscrits à un instant T, histoire de relancer un coup de pub sur l’événement par exemple, et à la date de fermeture des inscriptions.
A réfléchir. Et si je fais un truc propre, je le montrerai ici.
Ciao ;-)
Pour la liste des inscrits, c’est ce que traite la discussion initiée le 24 janvier 2010 :)
Oui, mais je ne souhaitais pas la voir s’afficher en partie publique. Un simple lien vers la page en admin (nomdusite/ecrire/ ?exec=agenda_inscriptions&id_evenement=X) me suffit : on y retrouve un tableau avec les inscrits (avec date et réponse), on peut créer un csv et supprimer les inscrits.
Dans mon code, çà se passe ici :
[(#AUTORISER{modifier,id_evenement,#ID_EVENEMENT})<a href="#URL_ECRIRE{agenda_inscriptions,id_evenement=#ID_EVENEMENT}"><span class="txtVert">En tant qu'administrateur</span> : Vous êtes autorisé à modifier les inscriptions</a>]
Le truc à améliorer en partie privée serait donc d’accéder à cette zone de gestion des inscrits plus facilement, sans passer par ce lien alambiqué où on doit renseigner le n° de l’événement. Car sauf erreur de ma part, actuellement, il n’y a pas d’entrée dédiée en privé.
Répondre à ce message
Bonjour,
Petite question : dans une rubrique qui liste mes articles-événements, je voudrais afficher un lien vers le formulaire de participation uniquement quand l’événement est ouvert à l’inscription. Comment dois-je écrire cela ?
Ce doit être un truc de ce genre...
[(#EVENEMENT|?{' '}) | <a href="#URL_ARTICLE">Inscription</a>]
Je suis dans
D’avance, Merci !
Bon, apparemment je faisais fausse route en cherchant à tester l’existence d’un événement (vu que je suis dans une page d’agenda, il n’y a que des événements !!). Donc, j’ai trouvé quelque chose comme çà :
... mais ce n’est pas satisfaisant puisque je teste ici le nb de places restantes et non l’existence ou non de l’option Inscription.
Quelle est donc la formule magique ?
Pas testé, mais comme il y a un champ booléen inscription dans la table et qui correspond à une case à cocher dans l’interface ; ne serait-ce pas simplement
[(#INSCRIPTION|oui) <a href="#URL_ARTICLE">Inscription</a> ]
?Il n’y a pas de mal à tester s’il reste une place disponible : ça fait le boulot aussi :) Sauf qu’on peut ouvrir les inscriptions sans pour autant limiter le nombre de places... (mais à l’inverse, quand le nombre de places est limité, c’est forcément sur inscription... et pas besoin de changer si dans votre cas le nombre de places disponibles est toujours indiqué ;))
Répondre à ce message
Bonjour,
Excellent tuto ! J’ai testé le code de Artlogic qui fonctionne parfaitement bien. Mais je cherche à y inclure une 4e option pour le cas ou le visiteur n’est pas connecté : un message de type ’votre inscription sur ce site / identification est nécessaire pour vous inscrire à cet événement’ avec l’affichage des formulaires
#FORMULAIRE_INSCRIPTION
et#LOGIN_PUBLIC
.Comment écrire cela ? Merci d’avance !
Bon... pour çà, j’ai trouvé toute seule :
Répondre à ce message
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
Bonjour, tu trouveras la réponse dans la partie « Affichage des inscriptions » que je viens de mettre à jour.
Répondre à ce message
Bonjour,
Coté site public, peut-on afficher les personnes inscrites ?
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 : |