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)
Note : L'add-on fonctionne de manière autonome pour les événements gratuits. Les add-ons de passerelle de paiement ne sont nécessaires que si vous souhaitez facturer les inscriptions.

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éfinit published_at, et envoie une notification à l'organisateur (si activé).
  • Annuler : définit le statut à cancelled et 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 :
ActionTransitionEffet
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
textSaisie texteNon
textareaZone de texteNon
numberSaisie numériqueNon
selectListe déroulanteOui
checkboxCase(s) à cocherOui
radioBoutons radioOui
dateSélecteur de dateNon
urlSaisie URLNon
emailSaisie e-mailNon
fileTéléversement de fichierNon

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éthodeURLNom de RouteDescription
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

GET /{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 :

  1. Sélectionner le type de billet & quantité : sur la page de détail de l'événement.
  2. Remplir le formulaire d'inscription : prénom, nom, e-mail, téléphone (optionnel/obligatoire), entreprise, poste, plus les champs personnalisés.
  3. Soumettre l'inscription : POST /{locale}/events/{event}/register
  4. Vérification des doublons : le système vérifie si l'e-mail est déjà inscrit pour cet événement.
  5. Inscription créée : un numéro d'inscription unique est généré (EVT-YYYY-#####).
  6. Attribution du statut :
    • Si registration_confirmation est activé : statut = pending
    • Sinon : statut = confirmed
  7. Redirection paiement : si l'événement est payant, redirection vers la page de paiement.
  8. Page de confirmation : si gratuit, redirection vers la page de confirmation affichant les détails de l'inscription.
  9. Notifications envoyées : selon les paramètres de notification (au inscrit, admin, organisateur).
POST /{locale}/events/{event}/register
Champs Obligatoires
first_nameObligatoirePrénom du participant
last_nameObligatoireNom du participant
emailObligatoireAdresse e-mail valide
quantityObligatoireNombre de billets (1 à max_tickets_per_registration)
ticket_type_idConditionnelObligatoire si l'événement a des types de billets
phoneConditionnelObligatoire si require_phone est activé
custom_fields[*]ConditionnelSelon la configuration des champs personnalisés
GET /{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

GET /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.

GET /{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.

POST /{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éthodeRetourne
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.

Note : Les événements créés par les utilisateurs démarrent avec le statut draft et nécessitent une approbation admin (publication) avant d'apparaître sur la liste publique.
MéthodeURLNom de RouteDescription
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

GET /{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.

Sauvegarde d'abord : Sauvegardez toujours votre base de données avant d'exécuter des migrations sur un système de production.

Dépannage

Les événements ne s'affichent pas côté public

  • Assurez-vous que les événements ont le statut published et que published_at est dans le passé.
  • Vérifiez que la start_date ou end_date de 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_paid et une currency valides.

L'utilisateur ne peut pas créer d'événements

  • Vérifiez que allow_user_events est 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_attendees est défini sur l'événement (null signifie illimité).
  • Le système ne compte que les inscriptions confirmed et attended pour 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 :

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket