Gestion des Événements et Inscriptions
Un système complet de gestion des inscriptions aux événements pour Larapen. Créez et gérez des événements avec types de billets, champs d'inscription personnalisés, suivi des participants, traitement des paiements et événements soumis par les utilisateurs.
Gestion des Événements
Créez des événements avec tous les détails : lieu, dates, en ligne/présentiel, limites de capacité, images mises en avant et galerie.
Types de Billets
Plusieurs niveaux de billets par événement avec tarification individuelle, quantités, fenêtres de vente et limites par inscription.
Inscription & Enregistrement
Inscription en ligne avec workflow de confirmation, suivi des enregistrements et export CSV des inscriptions.
Champs Personnalisés
Collectez des données supplémentaires des participants avec 10 types de champs. Créez des champs globaux ou spécifiques à un événement.
Intégration de Paiement
Supporte Stripe, PayPal, Paddle et MoMo via le PaymentService de base pour les inscriptions payantes.
Événements Soumis par les Utilisateurs
Permettez aux utilisateurs inscrits de créer et gérer leurs propres événements, avec approbation admin avant publication.
Cas d'Utilisation
Conférences & Sommets
Organisez des conférences sur plusieurs jours avec différents types de billets (Early Bird, Admission Générale, VIP). Utilisez les champs personnalisés pour collecter les préférences alimentaires, tailles de T-shirt ou informations d'entreprise. Suivez les enregistrements à l'entrée et exportez les listes de participants.
Ateliers & Sessions de Formation
Gérez des ateliers à capacité limitée avec support de liste d'attente. Définissez des fenêtres d'inscription pour contrôler le calendrier des inscriptions. Collectez des informations préalables via les champs personnalisés.
Webinaires & Événements en Ligne
Créez des événements en ligne avec des URL de réunion (Zoom, Google Meet, etc.). Suivez les inscriptions pour les webinaires gratuits ou payants. Envoyez des e-mails de confirmation automatiques avec les liens de connexion.
Rencontres Communautaires
Activez la fonctionnalité « Événements Utilisateurs » pour permettre aux membres de la communauté de créer et gérer leurs propres événements. Les événements passent par une validation admin avant publication.
Prérequis
- Larapen CMS v1.0.0 ou ultérieur
- PHP 8.3+
- MySQL 8.0+
- Un add-on de passerelle de paiement (ex. Stripe, PayPal) pour les événements payants (optionnel)
Installation
Étape 1 : Placer l'Add-on
Copiez ou créez un lien symbolique du dossier events dans votre répertoire Larapen "extensions/addons" :
Étape 2 : Activer l'Add-on
Allez dans Admin → Add-ons → Add-ons Installés et activez Gestion des Événements et Inscriptions.
Étape 3 : Exécuter les Migrations
Cela crée 5 tables : events_events, events_registrations,
events_ticket_types, events_custom_fields et events_custom_field_values.
Il utilise également la table unifiée categories avec categorizable_type = 'event'.
Étape 4 : Définir les Permissions
L'add-on enregistre 17 permissions (voir Permissions). Attribuez-les aux rôles admin via Admin → Utilisateurs → Rôles & Permissions.
Étape 5 : Configurer
Naviguez vers Admin → Événements → Paramètres pour configurer les options de fonctionnalités, les préférences de notifications et le comportement des inscriptions. Voir Configuration.
Étape 6 : Compiler les Assets du Thème
Si l'add-on events inclut des fichiers SCSS ou JS spécifiques au thème, recompilez le manifeste Vite :
Configuration
Tous les paramètres sont gérés via Admin → Événements → Paramètres et stockés dans la
table settings avec le préfixe event_. Les valeurs par défaut sont définies dans
config/events.php.
Paramètres Généraux
| Paramètre | Description | Défaut |
|---|---|---|
per_page |
Nombre d'événements affichés par page sur la liste côté public. | 12 |
admin_per_page |
Nombre d'éléments par page dans les tableaux admin. | 15 |
max_images |
Nombre maximum d'images de galerie par événement. | 5 |
max_tickets_per_registration |
Quantité maximale de billets qu'un inscrit peut sélectionner par inscription. | 10 |
Options de Fonctionnalités
| Paramètre | Description | Défaut |
|---|---|---|
registration_confirmation |
Exiger la confirmation admin pour les nouvelles inscriptions (les inscriptions démarrent en « en attente » au lieu de « confirmé »). | false |
allow_guest_registration |
Permettre aux visiteurs non authentifiés de s'inscrire aux événements. | false |
require_phone |
Rendre le champ numéro de téléphone obligatoire dans le formulaire d'inscription. | false |
enable_waitlist |
Activer la liste d'attente lorsque les événements atteignent leur capacité. | false |
allow_user_events |
Permettre aux utilisateurs inscrits de créer et soumettre leurs propres événements. | false |
confirmation_email |
Envoyer un e-mail de confirmation aux inscrits après une inscription réussie. | true |
Options de Notifications
| Paramètre | Description | Défaut |
|---|---|---|
notify_admin_on_new_event |
Notifier les admins lorsqu'un nouvel événement est créé (par les utilisateurs). | true |
notify_organizer_on_publish |
Notifier l'organisateur de l'événement lorsque son événement est publié. | true |
notify_registrants_on_cancellation |
Notifier tous les inscrits lorsqu'un événement est annulé. | true |
notify_registrant_on_registration |
Envoyer une confirmation à un inscrit après une inscription réussie. | true |
notify_admin_on_new_registration |
Notifier les admins lorsqu'une nouvelle inscription est soumise. | true |
notify_registrant_on_confirmation |
Notifier un inscrit lorsque son inscription est confirmée par l'admin. | true |
notify_registrant_on_cancellation |
Notifier un inscrit lorsque son inscription est annulée. | true |
notify_organizer_on_new_registration |
Notifier l'organisateur de l'événement lorsqu'une nouvelle inscription est reçue. | true |
Admin : Événements
La page Événements (Événements → Tous les Événements) gère tous les événements de la plateforme.
Liste des Événements
Un tableau trié et paginé affichant :
- Titre : nom de l'événement avec lien pour modifier
- Catégorie : catégorie d'événement attribuée
- Date de Début / Fin
- Statut : badge coloré (Brouillon, Publié, Annulé, Terminé, Archivé)
- Nombre d'inscriptions
- Mis en avant : indicateur étoile
- Nombre de vues
Filtres : menu déroulant statut, menu déroulant catégorie et recherche textuelle. Actions par événement : Modifier, Publier, Annuler, Supprimer.
Créer & Modifier
Le formulaire d'événement est organisé en sections :
Informations de Base
- Titre (traduisible) : obligatoire
- Slug (traduisible) : généré automatiquement à partir du titre
- Catégorie : sélectionner parmi les catégories d'événements
- Description (traduisible) : courte description / extrait
- Contenu (traduisible) : contenu complet de l'événement avec éditeur WYSIWYG
Date & Heure
- Date de Début (datetime) : obligatoire
- Date de Fin (datetime) : optionnel
- Fuseau Horaire : fuseau horaire de l'événement
- Début des Inscriptions (datetime) : quand les inscriptions ouvrent
- Fin des Inscriptions (datetime) : quand les inscriptions ferment
Lieu
- En Ligne : bascule pour les événements virtuels
- URL en Ligne / Plateforme en Ligne : affiché quand « En Ligne » est activé
- Nom du Lieu, Adresse, Ville, Région, Pays
- Latitude / Longitude : pour l'affichage sur la carte
Capacité & Tarification
- Nombre Max de Participants : null pour illimité
- Gratuit : bascule
- Types de Billets : gestion en ligne (ajouter/modifier/supprimer des niveaux de billets)
Organisateur & Contact
- Nom de l'Organisateur, Description de l'Organisateur
- E-mail de Contact, Téléphone de Contact
SEO & Publication
- Méta Titre (traduisible), Méta Description (traduisible)
- Statut : Brouillon, Publié, Annulé, Terminé, Archivé
- Mis en Avant : bascule
- Publié le : programmer la date de publication
- Position : ordre de tri
Médias
- Image Mise en Avant : image principale de l'événement
- Galerie : jusqu'à 5 images supplémentaires (configurable via
max_images)
Publier & Annuler
Les boutons d'action rapide sur la liste des événements permettent de changer le statut sans ouvrir le formulaire de modification :
- Publier : définit le statut à
published, définitpublished_at, et envoie une notification à l'organisateur (si activé). - Annuler : définit le statut à
cancelledet notifie tous les inscrits confirmés (si activé).
Admin : Catégories
Les catégories d'événements utilisent la table unifiée categories avec categorizable_type = 'event'.
Elles supportent l'imbrication hiérarchique (parent/enfant) via la colonne parent_id.
Liste des Catégories
Une vue arborescente hiérarchique de toutes les catégories d'événements avec réorganisation par glisser-déposer. Affiche : nom (traduisible), slug, nombre d'événements, statut actif.
Formulaire de Catégorie
- Nom (traduisible) : obligatoire
- Slug (traduisible) : généré automatiquement
- Description (traduisible)
- Méta Titre / Méta Description (traduisible)
- Catégorie Parente : optionnel
- Position : ordre de tri
- Est Actif : bascule
Admin : Inscriptions
La page Inscriptions (Événements → Inscriptions) fournit une vue centralisée de toutes les inscriptions aux événements.
Liste des Inscriptions
Un tableau paginé affichant :
- Numéro d'Inscription : identifiant unique (format :
EVT-YYYY-#####) - Nom de l'Événement
- Nom du Participant & E-mail
- Type de Billet & Quantité
- Statut : badge coloré (En Attente, Confirmé, Annulé, Présent, Absent)
- Statut de Paiement (si applicable)
- Montant Payé
- Date d'Inscription
Filtres : menu déroulant événement, menu déroulant statut et recherche textuelle.
Détails & Actions
La page de détail d'inscription (Inscriptions → {inscription}) affiche :
- Fiche d'inscription : numéro d'inscription, nom de l'événement, détails du participant (nom, e-mail, téléphone, entreprise, poste), type de billet, quantité, dates
- Gestion du statut : badge de statut actuel avec boutons d'action :
| Action | Transition | Effet |
|---|---|---|
| Confirmer | En Attente → Confirmé | Envoie une notification de confirmation à l'inscrit |
| Annuler | Tout → Annulé | Envoie une notification d'annulation à l'inscrit |
| Enregistrer | Confirmé → Présent | Enregistre l'horodatage checked_in_at |
| Supprimer | — | Supprime définitivement l'enregistrement d'inscription |
- Détails du paiement : montant, devise, méthode de paiement, référence, date de paiement
- Valeurs des champs personnalisés : toutes les réponses aux champs personnalisés soumises par le participant
- Adresse IP & compte utilisateur lié (si authentifié)
Export
Cliquez sur Exporter CSV pour télécharger les inscriptions en fichier CSV. L'export peut être filtré par événement et statut avant le téléchargement. Le CSV inclut tous les champs d'inscription, informations de billets, données de paiement et valeurs des champs personnalisés.
Admin : Champs Personnalisés
Les champs personnalisés vous permettent de collecter des informations supplémentaires des inscrits au-delà des champs standard (nom, e-mail, téléphone). Les champs peuvent être globaux (apparaissent sur tous les événements) ou spécifiques à un événement (apparaissent uniquement sur un événement particulier).
Liste des Champs Personnalisés
Affiche tous les champs personnalisés avec : nom, type, portée (Global ou nom de l'événement spécifique), statut obligatoire, position et bascule actif. Filtrable par événement.
Formulaire de Champ Personnalisé
- Nom (traduisible) : libellé du champ affiché aux inscrits
- Slug : identifiant unique généré automatiquement
- Placeholder (traduisible) : texte indicatif optionnel
- Texte d'Aide (traduisible) : texte d'aide optionnel affiché sous le champ
- Type : voir Types de Champs
- Options : valeurs séparées par des virgules pour les types Sélection, Radio et Case à cocher
- Événement : sélectionner un événement spécifique ou laisser vide pour un champ global
- Obligatoire : bascule
- Position : ordre de tri
- Est Actif : bascule
Types de Champs
| Type | Saisie HTML | Supporte les Options |
|---|---|---|
text | Saisie texte | Non |
textarea | Zone de texte | Non |
number | Saisie numérique | Non |
select | Liste déroulante | Oui |
checkbox | Case(s) à cocher | Oui |
radio | Boutons radio | Oui |
date | Sélecteur de date | Non |
url | Saisie URL | Non |
email | Saisie e-mail | Non |
file | Téléversement de fichier | Non |
Admin : Paramètres
La page de paramètres (Événements → Paramètres) est organisée en trois sections :
Général
- Événements Par Page : pagination de la liste côté public
- Admin Par Page : pagination des tableaux admin
- Max Images : limite d'images de galerie par événement
- Max Billets Par Inscription : plafond de quantité
Fonctionnalités
- Confirmation d'Inscription : activer le workflow d'approbation manuelle
- Autoriser l'Inscription Invité : autoriser les inscriptions non authentifiées
- Téléphone Obligatoire : rendre le champ téléphone obligatoire
- Activer la Liste d'Attente : liste d'attente à capacité atteinte
- Autoriser les Événements Utilisateurs : permettre aux utilisateurs de créer des événements
- E-mail de Confirmation : envoyer un e-mail après inscription
Notifications
Huit bascules contrôlant l'envoi des notifications par e-mail. Voir Notifications pour la liste complète.
Côté Public : Liste des Événements
La page publique des événements affiche tous les événements publiés et actifs avec filtrage et pagination.
Routes
| Méthode | URL | Nom de Route | Description |
|---|---|---|---|
| GET | /{locale}/events |
front.events.index.localized |
Page de liste des événements |
| GET | /{locale}/events/category/{slug} |
front.events.category.localized |
Événements filtrés par catégorie |
Les variantes non localisées (sans {locale}) sont également enregistrées.
Fonctionnalités
- Grille paginée de cartes d'événements (configurable par page)
- Barre latérale ou filtre de catégories
- Recherche textuelle sur le titre, la description, le lieu, la ville et l'organisateur
- Les événements sont ordonnés par date de début et position
- Les événements mis en avant peuvent être mis en évidence
Côté Public : Détail de l'Événement
/{locale}/events/{slug}
Description
Affiche la page complète de l'événement avec tous les détails, types de billets et formulaire d'inscription.
Fonctionnalités
- Contenu complet de l'événement (description, contenu, galerie)
- Détails du lieu avec carte (si coordonnées fournies)
- Affichage date/heure avec fuseau horaire
- Lien de l'événement en ligne (affiché après inscription ou à l'organisateur)
- Informations de l'organisateur
- Sélection du type de billet avec tarifs
- Formulaire d'inscription avec champs personnalisés (chargés via AJAX)
- Indicateur de places disponibles et statut de capacité
- Événements similaires de la même catégorie
- Compteur de vues (incrémenté à chaque visite)
Côté Public : Processus d'Inscription
Le processus d'inscription suit ces étapes :
- Sélectionner le type de billet & quantité : sur la page de détail de l'événement.
- Remplir le formulaire d'inscription : prénom, nom, e-mail, téléphone (optionnel/obligatoire), entreprise, poste, plus les champs personnalisés.
- Soumettre l'inscription :
POST /{locale}/events/{event}/register - Vérification des doublons : le système vérifie si l'e-mail est déjà inscrit pour cet événement.
- Inscription créée : un numéro d'inscription unique est généré (
EVT-YYYY-#####). - Attribution du statut :
- Si
registration_confirmationest activé : statut =pending - Sinon : statut =
confirmed
- Si
- Redirection paiement : si l'événement est payant, redirection vers la page de paiement.
- Page de confirmation : si gratuit, redirection vers la page de confirmation affichant les détails de l'inscription.
- Notifications envoyées : selon les paramètres de notification (au inscrit, admin, organisateur).
/{locale}/events/{event}/register
Champs Obligatoires
first_name | Obligatoire | Prénom du participant |
last_name | Obligatoire | Nom du participant |
email | Obligatoire | Adresse e-mail valide |
quantity | Obligatoire | Nombre de billets (1 à max_tickets_per_registration) |
ticket_type_id | Conditionnel | Obligatoire si l'événement a des types de billets |
phone | Conditionnel | Obligatoire si require_phone est activé |
custom_fields[*] | Conditionnel | Selon la configuration des champs personnalisés |
/{locale}/events/registration/{registrationNumber}
Description
Page de confirmation affichant les détails de l'inscription, les informations du billet et le numéro d'inscription. L'inscrit peut sauvegarder ou imprimer cette page comme reçu de confirmation.
Endpoint AJAX des Champs Personnalisés
/api/events/custom-fields/{eventId?}
Description
Retourne les champs personnalisés actifs pour un événement spécifique (incluant les champs globaux) en JSON. Utilisé par le formulaire d'inscription pour charger dynamiquement les saisies de champs personnalisés.
Réponse (JSON)
Côté Public : Paiement & Commande
Pour les événements payants, le modèle d'inscription implémente l'interface Payable de l'application de base,
permettant une intégration transparente avec les passerelles de paiement.
/{locale}/events/registration/checkout/{registration}
Description
Affiche la page de paiement pour une inscription. Montre le récapitulatif de commande (nom de l'événement, type de billet, quantité, montant total) et les méthodes de paiement disponibles.
/{locale}/events/registration/checkout/{registration}
Description
Traite le paiement via la passerelle de paiement sélectionnée. Les passerelles supportées incluent Stripe, PayPal, Paddle et MoMo (selon les add-ons de paiement actifs).
En cas de Succès
Le payment_status de l'inscription est défini à paid,
l'horodatage paid_at est enregistré, et l'utilisateur est redirigé vers la page de confirmation.
En cas d'Échec
Le payment_status est défini à failed et l'utilisateur est renvoyé à la
page de paiement avec un message d'erreur.
Méthodes de l'Interface Payable
Le modèle Registration implémente ces méthodes pour l'intégration des passerelles de paiement :
| Méthode | Retourne |
|---|---|
getPayableAmount() | Montant de l'inscription (amount_paid) |
getPayableCurrency() | Code devise |
getPayableDescription() | Chaîne de description pour la passerelle de paiement |
getPayableCustomerEmail() | E-mail de l'inscrit |
getPayableCustomerName() | Nom complet de l'inscrit |
getPayableIdentifier() | Numéro d'inscription |
markAsPaid(method, reference) | Met à jour les champs de paiement |
getPaymentSuccessUrl() | URL de la page de confirmation |
getPaymentCancelUrl() | URL de la page de paiement |
Côté Public : Événements Utilisateurs
Quand allow_user_events est activé, les utilisateurs authentifiés peuvent créer et gérer leurs propres événements.
draft et nécessitent une approbation admin
(publication) avant d'apparaître sur la liste publique.
| Méthode | URL | Nom de Route | Description |
|---|---|---|---|
| GET | /{locale}/events/my-events |
front.events.my-events.localized |
Lister les événements créés par l'utilisateur |
| GET | /{locale}/events/create/new |
front.events.create.localized |
Formulaire de création d'événement |
| POST | /{locale}/events/create/new |
front.events.store.localized |
Soumettre un nouvel événement |
| GET | /{locale}/events/{event}/edit |
front.events.edit.localized |
Modifier son événement |
| PUT | /{locale}/events/{event} |
front.events.update.localized |
Mettre à jour son événement |
| DELETE | /{locale}/events/{event} |
front.events.destroy.localized |
Supprimer son événement (brouillon/annulé uniquement) |
Toutes les routes d'événements utilisateur nécessitent une authentification. Les variantes non localisées sont également enregistrées.
Côté Public : Mes Inscriptions
/{locale}/events/attending
Description
Affiche tous les événements auxquels l'utilisateur authentifié s'est inscrit. Fait correspondre les inscriptions par ID utilisateur et adresse e-mail. Affiche le nom de l'événement, la date, le statut d'inscription, le type de billet et la quantité.
Notifications
Toutes les notifications étendent BaseNotification et sont envoyées via le canal e-mail.
Chacune peut être activée/désactivée individuellement dans les paramètres.
| Notification | Destinataire | Déclencheur |
|---|---|---|
NewEventAdminNotification |
Admins | Un nouvel événement est créé (par un utilisateur) |
EventPublishedNotification |
Organisateur de l'événement | Le statut de l'événement passe à publié |
EventCancelledNotification |
Tous les inscrits | L'événement est annulé |
RegistrationConfirmationNotification |
Inscrit | Soumission d'inscription réussie |
RegistrationConfirmedNotification |
Inscrit | L'admin confirme une inscription en attente |
RegistrationCancelledNotification |
Inscrit | L'inscription est annulée |
NewRegistrationAdminNotification |
Admins | Une nouvelle inscription est reçue |
NewRegistrationOrganizerNotification |
Organisateur de l'événement | Une nouvelle inscription est reçue pour son événement |
Mise à Jour
Étape 1 : Remplacer les Fichiers
Remplacez le répertoire de l'add-on par la nouvelle version.
Étape 2 : Exécuter les Migrations
Étape 3 : Vider les Caches
Étape 4 : Recompiler les Assets
Si les vues de thème ou les fichiers SCSS ont été mis à jour :
Étape 5 : Vérifier
Visitez Événements → Tous les Événements dans le panneau d'administration et confirmez que tout se charge correctement. Testez la liste côté public et le processus d'inscription.
Dépannage
Les événements ne s'affichent pas côté public
- Assurez-vous que les événements ont le statut
publishedet quepublished_atest dans le passé. - Vérifiez que la
start_dateouend_datede l'événement n'est pas passée (seuls les événements actifs sont affichés par défaut). - Vérifiez que l'add-on est activé dans Admin → Add-ons.
Le formulaire d'inscription n'affiche pas les champs personnalisés
- Assurez-vous que les champs personnalisés sont marqués comme Actifs.
- Pour les champs spécifiques à un événement, vérifiez qu'ils sont attribués au bon événement.
- Vérifiez la console du navigateur pour les erreurs AJAX lors du chargement de
/api/events/custom-fields/{eventId}.
L'inscription échoue : « Déjà inscrit »
Le système vérifie les inscriptions en double par e-mail par événement. Si le participant est déjà inscrit avec la même adresse e-mail pour cet événement, l'inscription est rejetée. C'est intentionnel pour éviter les inscriptions en double.
La page de paiement ne se charge pas
- Assurez-vous qu'au moins un add-on de passerelle de paiement est installé et actif (ex. Stripe).
- Vérifiez que l'événement n'est pas marqué comme « gratuit » (
is_free = false). - Vérifiez que l'inscription a un
amount_paidet unecurrencyvalides.
L'utilisateur ne peut pas créer d'événements
- Vérifiez que
allow_user_eventsest activé dans Événements → Paramètres. - L'utilisateur doit être authentifié (connecté).
- Le lien « Mes Événements » n'apparaît dans le menu utilisateur que lorsque le paramètre est activé.
Les notifications ne sont pas envoyées
- Vérifiez la bascule de notification correspondante dans Événements → Paramètres.
- Vérifiez que votre configuration mail dans Admin → Paramètres → Mail fonctionne correctement.
- Consultez le log Laravel (
storage/logs/laravel.log) pour les erreurs d'envoi de mail.
La capacité de l'événement n'est pas appliquée
- Assurez-vous que
max_attendeesest défini sur l'événement (null signifie illimité). - Le système ne compte que les inscriptions
confirmedetattendedpour la capacité. - Les inscriptions annulées et en attente ne comptent pas dans la limite.
L'export CSV est vide ou incomplet
- Appliquez les filtres souhaités (événement, statut) avant de cliquer sur Exporter.
- Assurez-vous qu'il y a des inscriptions correspondant aux critères de filtre actuels.
- Vérifiez l'encodage du fichier si les caractères spéciaux apparaissent altérés : l'export utilise UTF-8.
Erreur « Unable to locate file in Vite manifest »
Cela signifie que la compilation Vite n'a pas été exécutée après l'ajout de nouveaux fichiers SCSS/JS de thème. Exécutez :