Hooks participants et inscriptions

Disponible dans :Free

Ces hooks suivent une inscription du formulaire jusqu’à l’entrée. Ils servent à ajouter des champs au formulaire, à refuser ou limiter une inscription et à ajouter des colonnes à l’écran Attendees. D’autres réagissent quand quelqu’un s’inscrit, annule, change de date ou est supprimé.

Pour le point de vue de l’administrateur, voyez mettre en place un formulaire d’inscription et gérer les participants. Si les hooks sont nouveaux pour vous, commencez par Étendre HappenBoard avec les hooks.

Dates, places et traductions

Une inscription à un événement récurrent porte sur une seule date. La ligne du participant garde le numéro de séquence de cette date dans la série (occurrence_seq, 0 pour la première date) ; il vaut null pour un événement unique.

La capacité de l’événement s’applique à chaque date. Seuls les participants going occupent des places : waitlist, declined et cancelled n’en occupent pas.

Avec WPML ou Polylang, les traductions d’un événement partagent leurs places. Les inscriptions de toutes les traductions s’imputent sur la capacité de la traduction dans la langue par défaut, et un e-mail ne s’inscrit qu’une fois. Chaque ligne garde la traduction sur laquelle elle a été créée, qui fixe la langue des e-mails du participant.

Quel hook se déclenche quand

Ce qui se passeHook
Quelqu’un s’inscrit (formulaire, commande de billets, import)happenboard_rsvp_submitted
Le participant annule avec son lien, ou un remboursement annule le billethappenboard_rsvp_cancelled
Un opérateur change le statut, annulation comprisehappenboard_attendee_status_changed
Un opérateur modifie le nom, l’e-mail ou les placeshappenboard_attendee_updated
Un opérateur déplace le participant vers une autre datehappenboard_attendee_date_changed
Le participant est supprimé définitivement, seul ou avec son événementhappenboard_attendee_deleted
Un billet est scanné à l’entrée (Pro)happenboard_pro_attendee_checked_in

happenboard_rsvp_form_fields

Filtre Free et Pro src/Block/RsvpForm/Block.php

Ajoute vos propres champs au bloc RSVP Form, après l’e-mail et avant le nombre de places. Le Ticket Picker de HappenBoard Pro affiche les mêmes champs : les acheteurs de billets y répondent aussi.

Signature

apply_filters( 'happenboard_rsvp_form_fields', string $html, int $post_id )

Paramètres

$html string
HTML à afficher. Vide par défaut.
$post_id int
L’événement.

Valeur de retour

string HTML affiché tel quel : échappez tout ce que vous construisez.

Exemple

add_filter(
    'happenboard_rsvp_form_fields',
    function ( string $html, int $post_id ): string {
        // Le formulaire n'envoie que les champs nommés happenboard_cf_<key>.
        $html .= sprintf(
            '<label class="wp-block-happenboard-rsvp-form__field"><span>%s</span><input type="text" name="happenboard_cf_diet" maxlength="190"></label>',
            esc_html__( 'Dietary requirements', 'my-plugin' )
        );
        return $html;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Complétez $html : HappenBoard Pro affiche aussi ses champs personnalisés par ce filtre.
  • Nommez chaque champ happenboard_cf_<key>. Le formulaire n’envoie que ceux-là, sous la clé <key>, et ignore les champs désactivés. Une valeur n’est enregistrée que si happenboard_rsvp_custom_fields la garde.
  • Il ne s’exécute que si le formulaire s’affiche : pas pour un événement annulé, reporté, terminé, sans date, complet ou protégé par mot de passe. HappenBoard Pro remplace le formulaire par le Ticket Picker sur un événement qui a des billets.

happenboard_rsvp_custom_fields

Filtre Free et Pro src/Service/Attendees/RsvpService.php

Vérifie les réponses supplémentaires envoyées avec une inscription et renvoie celles à enregistrer sur le participant. C’est l’autre moitié de happenboard_rsvp_form_fields : ce filtre-là affiche le champ, celui-ci garde la valeur.

Signature

apply_filters( 'happenboard_rsvp_custom_fields', array<string,mixed> $fields, array<string,string|array<int,string>> $raw, int $event_id )

Paramètres

$fields array<string,mixed>
Réponses gardées jusqu’ici. Vide par défaut.
$raw array<string,string|array<int,string>>
Ce qui a été envoyé, indexé par clé de champ (le nom du champ sans happenboard_cf_). Les clés sont passées par sanitize_key() et les valeurs par sanitize_text_field(), ce qui n’est pas une validation.
$event_id int
L’événement.

Valeur de retour

array<string,mixed>|WP_Error Les réponses à enregistrer, ou un WP_Error pour refuser l’inscription avec son message. Toute autre valeur n’enregistre rien.

Exemple

add_filter(
    'happenboard_rsvp_custom_fields',
    function ( $fields, array $raw, int $event_id ) {
        $fields = is_array( $fields ) ? $fields : array();
        $diet   = sanitize_text_field( (string) ( $raw['diet'] ?? '' ) );
        if ( '' === $diet ) {
            // Le bloc RSVP Form affiche ce message au visiteur.
            return new WP_Error( 'my_diet_required', __( 'Please tell us about your dietary requirements.', 'my-plugin' ), array( 'status' => 400 ) );
        }
        $fields['diet'] = $diet;
        return $fields;
    },
    20,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3, en priorité 20 ou plus si HappenBoard Pro est actif. Pro vérifie ses propres champs en priorité 10 et, si l’événement en a, ne renvoie que ceux-là.
  • Ajoutez à $fields plutôt que de le remplacer. Le résultat est enregistré en JSON : limitez-vous à des chaînes et des tableaux de chaînes.
  • Il s’exécute pour toute inscription passant par le service d’inscription de HappenBoard : le formulaire, l’ability create-rsvp, l’import CSV de Pro et ses simulations. Il vient après les contrôles de date, de doublon et de capacité. Le paiement du Ticket Picker de Pro l’applique aussi ; pas les commandes WooCommerce.

happenboard_rsvp_allowed

Filtre Free src/Service/Attendees/RsvpService.php

Décide si un événement accepte les inscriptions gratuites. Renvoyez un WP_Error pour refuser l’inscription avec votre propre code, message et statut HTTP.

Signature

apply_filters( 'happenboard_rsvp_allowed', true|WP_Error $allowed, int $event_id, array<string,mixed> $input )

Paramètres

$allowed true|WP_Error
true, ou le WP_Error d’un callback précédent.
$event_id int
L’événement, dont on sait déjà qu’il est publié et accepte encore des inscriptions.
$input array<string,mixed>
L’inscription : event_id, email, display_name, quantity, occurrence (la date demandée), raw_fields, et depuis les outils d’administration user_id, status, bypass_capacity, validate_only ou comp (Pro).

Valeur de retour

true|WP_Error true pour continuer, ou un WP_Error renvoyé tel quel à l’appelant. Toute autre valeur refuse avec happenboard_rsvp_not_allowed (HTTP 403).

Exemple

add_filter(
    'happenboard_rsvp_allowed',
    function ( $allowed, int $event_id, array $input ) {
        if ( is_wp_error( $allowed ) ) {
            return $allowed;
        }
        // Les événements réservés au personnel n'acceptent que ses adresses.
        $staff = str_ends_with( strtolower( (string) ( $input['email'] ?? '' ) ), '@example.com' );
        if ( has_term( 'staff-only', 'happenboard_category', $event_id ) && ! $staff ) {
            return new WP_Error( 'my_staff_only', __( 'This event is open to staff only.', 'my-plugin' ), array( 'status' => 403 ) );
        }
        return $allowed;
    },
    20,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • Transmettez un WP_Error reçu sans y toucher. Le contrôle est strict : 1 ou 'yes' refuse.
  • Il s’exécute pour chaque appel au service d’inscription de HappenBoard. Il vient après les contrôles de l’événement (publié, ni annulé, ni reporté, ni terminé) et avant ceux de date, de doublon, de capacité et des champs.
  • HappenBoard Pro s’en sert en priorité 10 : il refuse les inscriptions simples sur tout événement qui a des billets, gratuits ou payants (happenboard_pro_ticket_required). Seule exception, une ligne de son import CSV marquée comp.

happenboard_rsvp_max_quantity

Filtre Free src/Service/Attendees/RsvpQuantityLimit.php

Filtre le nombre maximal de places qu’une inscription peut demander via la route d’inscription publique. HappenBoard le lit dans les blocs RSVP Form de la page de l’événement : une requête ne peut pas demander plus que ce que le formulaire propose.

Signature

apply_filters( 'happenboard_rsvp_max_quantity', int $limit, int $event_id )

Paramètres

$limit int
La plus grande limite parmi les blocs RSVP Form du contenu de l’événement et de son modèle de page. Un formulaire autorise 1 place sans Allow multi-seat RSVP, sinon son Maximum seats per RSVP (4 par défaut). 20 si aucun formulaire n’est trouvé.
$event_id int
L’événement.

Valeur de retour

int La limite, ramenée entre 1 et 20 après le filtre.

Exemple

add_filter(
    'happenboard_rsvp_max_quantity',
    function ( int $limit, int $event_id ): int {
        // Le formulaire des ateliers est dans une compo synchronisée que HappenBoard ne voit pas : il autorise 6 places.
        if ( has_term( 'workshops', 'happenboard_category', $event_id ) ) {
            return 6;
        }
        return $limit;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Les formulaires placés dans une compo synchronisée ou une partie de modèle ne sont pas vus. Sur un thème classique, le formulaire que HappenBoard ajoute après le contenu compte comme un formulaire à une place.
  • Il ne limite que la route publique POST /happenboard/v1/rsvp : une demande plus grande est refusée avec happenboard_quantity_too_high (HTTP 400). Il ne change pas le nombre proposé par le formulaire, et les outils d’administration (l’ability create-rsvp, l’import CSV) l’ignorent.

happenboard_rsvp_client_ip

Filtre Free et Pro src/REST/Rsvp.php

Filtre l’adresse IP du visiteur sur laquelle se base la limite d’inscriptions (5 par adresse et par minute). HappenBoard lit REMOTE_ADDR et ignore X-Forwarded-For : derrière un proxy ou un CDN, tous les visiteurs partagent une seule adresse tant que vous ne la filtrez pas.

Signature

apply_filters( 'happenboard_rsvp_client_ip', string $ip )

Paramètres

$ip string
REMOTE_ADDR s’il s’agit d’une IP valide, sinon une chaîne vide.

Valeur de retour

string L’adresse à compter. Renvoyez $ip si vous ne pouvez pas faire mieux.

Exemple

// Derrière Cloudflare : compter l'adresse réelle de chaque visiteur.
add_filter(
    'happenboard_rsvp_client_ip',
    fn( $ip ) => filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'] ?? '', FILTER_VALIDATE_IP ) ?: $ip
);

// Les formulaires de réservation ont leur propre filtre : ajoutez la même chose.
add_filter(
    'happenboard_booking_client_ip',
    fn( $ip ) => filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'] ?? '', FILTER_VALIDATE_IP ) ?: $ip
);

Remarques

  • Un seul argument.
  • Ne faites confiance qu’à un en-tête posé par votre propre proxy, et seulement si le site n’est pas joignable sans lui. Sinon, n’importe qui peut envoyer l’en-tête et le changer à volonté. Avec X-Forwarded-For, prenez l’adresse ajoutée par votre proxy, pas la première, que le visiteur contrôle.
  • Les limites de HappenBoard Pro utilisent le même filtre. Elles portent sur les paniers de billets gratuits (même quota que les inscriptions), les paiements (voir happenboard_pro_checkout_limits) et les propositions d’événements (3 par adresse toutes les 10 minutes).
  • L’adresse est aussi transmise à Turnstile et Akismet. Une chaîne vide désactive la limite par adresse ; la limite par e-mail (3 par heure), le champ piège et le temps de saisie minimal s’appliquent toujours.

happenboard_rsvp_submitted

Action Free et Pro src/Service/Attendees/RsvpService.php

Se déclenche juste après la création d’un participant, pour une inscription gratuite comme pour une commande de billets. C’est le point d’entrée de tout ce qui doit se passer à l’inscription.

Signature

do_action( 'happenboard_rsvp_submitted', int $attendee_id, array{event_id:int,occurrence_seq:?int,email:string,display_name:string,quantity:int,cancel_token:string} $data )

Paramètres

$attendee_id int
Le nouveau participant.
$data array<string,mixed>
event_id, occurrence_seq (la date d’un événement récurrent, sinon null), email, display_name, quantity et cancel_token. Les billets de Pro ajoutent paid, source (stripe, woocommerce ou free_ticket) et session_id ou order_id.

Exemple

add_action(
    'happenboard_rsvp_submitted',
    function ( int $attendee_id, array $data ): void {
        // Journaliser chaque nouvelle inscription.
        error_log( sprintf(
            'Attendee %d registered for event %d with %d seat(s).',
            $attendee_id,
            (int) $data['event_id'],
            (int) $data['quantity']
        ) );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Il se déclenche depuis le service d’inscription de HappenBoard : le formulaire, l’ability create-rsvp, l’import CSV de Pro (hors simulations). Pro le déclenche aussi depuis son webhook Stripe, les commandes WooCommerce et les paniers de billets gratuits. C’est une fois par ligne de billet : une commande peut donc le déclencher plusieurs fois.
  • $data ne contient pas le statut : lisez la ligne si besoin, car un import peut enregistrer des participants en liste d’attente ou déclinés. HappenBoard envoie son e-mail de confirmation en priorité 10, aux seuls participants going.
  • cancel_token est le secret du lien d’annulation du participant. Ne le journalisez pas, ne l’affichez pas et ne l’envoyez à aucun tiers.

happenboard_rsvp_cancelled

Action Free et Pro src/REST/Rsvp.php

Se déclenche quand une inscription est annulée par le participant (le lien d’annulation de ses e-mails, ou DELETE /happenboard/v1/rsvp/{token}) ou par un remboursement dans HappenBoard Pro. La ligne est gardée avec le statut cancelled et ses places sont libérées.

Signature

do_action( 'happenboard_rsvp_cancelled', int $attendee_id )

Paramètres

$attendee_id int
Le participant dont l’inscription a été annulée.

Exemple

add_action(
    'happenboard_rsvp_cancelled',
    function ( int $attendee_id ): void {
        // La ligne existe toujours, avec le statut cancelled.
        $attendee = ( new \HappenBoard\Service\Attendees\Repository() )->find_by_id( $attendee_id );
        if ( null !== $attendee ) {
            error_log( 'Seat released for ' . $attendee['email'] );
        }
    }
);

Remarques

  • Un seul argument.
  • HappenBoard Pro le déclenche pour chaque ligne qu’un remboursement Stripe annule (depuis l’écran Orders ou le webhook charge.refunded) et pour une commande WooCommerce remboursée, annulée ou échouée. Votre callback peut alors tourner dans une requête de webhook, sans utilisateur connecté.
  • Un remboursement Stripe partiel n’annule que les lignes remboursées en entier ou choisies par l’opérateur. Une annulation répétée ne déclenche rien.
  • Une annulation par un opérateur (écran Attendees, ability cancel-rsvp) déclenche happenboard_attendee_status_changed à la place. HappenBoard envoie l’e-mail d’annulation dans les deux cas.

happenboard_attendee_status_changed

Action Free src/Service/Attendees/AttendeeStatusService.php

Se déclenche quand un opérateur change le statut d’un participant : dans l’écran Attendees (action Cancel comprise), via PATCH /happenboard/v1/attendees/{id}, ou avec les abilities update-attendee-status et cancel-rsvp.

Signature

do_action( 'happenboard_attendee_status_changed', int $attendee_id, string $new_status, string $old_status )

Paramètres

$attendee_id int
Le participant.
$new_status string
Le nouveau statut : going, waitlist, cancelled ou declined.
$old_status string
Le statut précédent. Chaîne vide si la ligne n’en avait pas.

Exemple

add_action(
    'happenboard_attendee_status_changed',
    function ( int $attendee_id, string $new_status, string $old_status ): void {
        // Quelqu'un a obtenu une place depuis la liste d'attente.
        if ( 'going' === $new_status && 'waitlist' === $old_status ) {
            error_log( sprintf( 'Attendee %d promoted from the waitlist.', $attendee_id ) );
        }
    },
    10,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3. Le nouveau statut vient avant l’ancien.
  • Il se déclenche après une écriture réussie, et seulement si le statut change vraiment. Un passage en going dont les places ne tiennent pas dans la capacité est refusé avant toute écriture, sauf si l’opérateur confirme le dépassement : il ne se déclenche donc pas.
  • HappenBoard écrit au participant à partir de ce hook : la confirmation quand il sort de la liste d’attente, l’annulation quand il est annulé. HappenBoard Pro y rend ou reprend les places des billets, car seul going occupe des places.

happenboard_attendee_updated

Action Free src/REST/Attendees.php

Se déclenche quand un opérateur modifie le nom, l’e-mail ou le nombre de places d’un participant via PATCH /happenboard/v1/attendees/{id} (l’écran Attendees). Il reçoit l’avant et l’après de chaque champ modifié.

Signature

do_action( 'happenboard_attendee_updated', int $attendee_id, array<string,array{from:mixed,to:mixed}> $changes )

Paramètres

$attendee_id int
Le participant.
$changes array<string,array{from:mixed,to:mixed}>
Indexé par colonne (display_name, email, quantity), chacune avec from et to.

Exemple

add_action(
    'happenboard_attendee_updated',
    function ( int $attendee_id, array $changes ): void {
        if ( ! isset( $changes['email'] ) ) {
            return;
        }
        // Garder notre liste de diffusion à jour avec la nouvelle adresse.
        my_plugin_sync_contact( (string) $changes['email']['from'], (string) $changes['email']['to'] );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Les clés sont des noms de colonnes, pas les noms camelCase de la requête. Une requête qui ne change rien le déclenche quand même, avec un tableau vide : sortez tout de suite.
  • Un changement de statut dans la même requête déclenche happenboard_attendee_status_changed après celui-ci. L’ajout de places à un participant going est vérifié d’abord (happenboard_attendee_seats_left) ; une requête refusée ne déclenche rien.

happenboard_attendee_seats_left

Filtre Free src/Service/Attendees/SeatCheck.php

Filtre le nombre de places qu’un participant peut occuper quand un opérateur augmente son nombre de places ou le passe en going : dans l’écran Attendees (Mark as Going compris) ou avec l’ability update-attendee-status. HappenBoard autorise la capacité de l’événement (celle de la date, pour un événement récurrent) moins les places des autres participants going.

Signature

apply_filters( 'happenboard_attendee_seats_left', int|null $left, array<string,mixed> $attendee )

Paramètres

$left int|null
Places que le participant peut occuper, ou null si l’événement n’a pas de capacité.
$attendee array<string,mixed>
La ligne du participant avant la modification (attendee_id, event_id, occurrence_seq, status, quantity…).

Valeur de retour

int|null Le nombre maximal de places, ou null pour aucune limite. Une demande plus grande est refusée avec happenboard_capacity_full (HTTP 409).

Exemple

add_filter(
    'happenboard_attendee_seats_left',
    function ( $left, array $attendee ) {
        // Pas plus de 6 places par participant, même sans capacité définie.
        return null === $left ? 6 : min( 6, (int) $left );
    },
    20,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2. Renvoyez un entier ou null : les autres valeurs sont converties en entier, et false vaut 0 place et refuse la modification.
  • Il ne s’exécute que si un participant qui est ou devient going occuperait plus de places qu’avant : plus de places, ou un passage en going depuis un autre statut. Pas quand l’opérateur confirme le dépassement de capacité. Moins de places passe toujours.
  • Sur un événement traduit, la capacité est celle de la traduction dans la langue par défaut, et les participants de toutes les traductions comptent. Le déplacement vers une autre date utilise happenboard_attendee_date_seats_left.
  • HappenBoard Pro répond en priorité 10 pour les détenteurs de billets : ce qu’il reste sur leur billet à leur date, plus les places qu’ils occupent déjà. Utilisez une priorité plus tardive pour modifier sa réponse, comme dans l’exemple.

happenboard_attendee_date_changed

Action Free src/Service/Attendees/AttendeeDateService.php

Se déclenche après qu’un opérateur a déplacé un participant d’un événement récurrent vers une autre date : avec Change date dans l’écran Attendees, via POST /happenboard/v1/attendees/{id}/date ou avec l’ability reschedule-rsvp. La ligne est déjà sur la nouvelle date.

Signature

do_action( 'happenboard_attendee_date_changed', int $attendee_id, int $sequence, ?int $from, array<string,mixed> $context )

Paramètres

$attendee_id int
Le participant déplacé.
$sequence int
Séquence de la nouvelle date.
$from ?int
Séquence de l’ancienne date, null si la ligne n’en avait pas.
$context array<string,mixed>
event_id ; from_start_utc et from_label (la date quittée) ; to_start_utc et to_label ; quantity ; status ; over_capacity ; notify. Les débuts sont en UTC Y-m-d H:i:s, les libellés aux formats de date et d’heure du site.

Exemple

add_action(
    'happenboard_attendee_date_changed',
    function ( int $attendee_id, int $sequence, ?int $from, array $context ): void {
        // Garder une trace de chaque déplacement.
        error_log( sprintf(
            'Attendee %d moved from "%s" to "%s".',
            $attendee_id,
            (string) $context['from_label'],
            (string) $context['to_label']
        ) );
    },
    10,
    4
);

Remarques

  • Quatre arguments : enregistrez avec 10, 4.
  • Il ne se déclenche pas si le participant est déjà sur cette date ou si le déplacement est refusé. Le déplacement est refusé vers une date annulée, passée, hors série, ou sur laquelle le même e-mail est déjà inscrit. Une date sans place pour un participant going est refusée sauf confirmation de l’opérateur (over_capacity vaut alors true).
  • notify vaut true si le participant est going et que l’opérateur a laissé l’e-mail activé. HappenBoard envoie alors la nouvelle date avec un fichier calendrier en priorité 20 et déplace le rappel.
  • HappenBoard Pro déplace les places du billet vers la nouvelle date en priorité 5, avant que d’autres callbacks ne les lisent.

happenboard_attendee_date_seats_left

Filtre Free src/Service/Attendees/AttendeeDateService.php

Filtre les places restantes pour un participant sur les dates d’un événement récurrent vers lesquelles il peut être déplacé. HappenBoard compare la capacité de l’événement aux places des participants going sur chaque date.

Signature

apply_filters( 'happenboard_attendee_date_seats_left', array<int,?int> $left, array<string,mixed> $attendee, array<int,int> $sequences )

Paramètres

$left array<int,?int>
Places restantes, indexées par séquence ; null quand rien ne les limite.
$attendee array<string,mixed>
La ligne du participant.
$sequences array<int,int>
Les dates demandées.

Valeur de retour

array<int,?int> Places restantes par séquence, null pour aucune limite. Un retour qui n’est pas un tableau est ignoré.

Exemple

add_filter(
    'happenboard_attendee_date_seats_left',
    function ( $left, array $attendee, array $sequences ) {
        // Garder deux places en réserve sur chaque date limitée.
        foreach ( (array) $left as $sequence => $seats ) {
            if ( null !== $seats ) {
                $left[ $sequence ] = max( 0, $seats - 2 );
            }
        }
        return $left;
    },
    20,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • Il s’exécute une fois pour toute la liste des dates (jusqu’à 200 dates à venir), puis pour la date choisie quand un participant going est déplacé. Lisez ce qu’il vous faut pour toutes les dates en une requête.
  • Un déplacement est refusé si les places du participant dépassent le chiffre de la date, sauf confirmation de l’opérateur. Renvoyez null pour une date : sa limite est levée.
  • HappenBoard Pro répond en priorité 10 pour les détenteurs de billets : la capacité du billet sur chaque date moins ce qui y est vendu et réservé.

happenboard_attendee_dates_assigned

Action Free src/Service/Attendees/AttendeeDates.php

Se déclenche après que des participants d’un événement récurrent sans date en ont reçu une. Chacun reçoit la date en cours au moment de son inscription : la première pas encore terminée, sinon la dernière.

Signature

do_action( 'happenboard_attendee_dates_assigned', int $event_id, array<int,int> $attendee_ids )

Paramètres

$event_id int
L’événement récurrent.
$attendee_ids array<int,int>
Les participants qui ont reçu une date.

Exemple

add_action(
    'happenboard_attendee_dates_assigned',
    function ( int $event_id, array $attendee_ids ): void {
        // Oublier les dates mises en cache pour ces participants.
        foreach ( $attendee_ids as $attendee_id ) {
            delete_transient( 'my_attendee_date_' . $attendee_id );
        }
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Les lignes sans date sont les inscriptions antérieures à HappenBoard 0.2.0, celles d’un événement devenu récurrent depuis, et celles insérées avec une date null. L’affectation tourne une fois à la mise à jour de la table des participants, puis à chaque happenboard_occurrences_changed (priorité 20).
  • Il se déclenche une fois par événement, seulement si au moins une ligne a été placée. Une ligne plus ancienne que la première date encore stockée d’une longue série reste sans date.
  • HappenBoard programme un rappel pour les participants placés dont la date est à venir. HappenBoard Pro déplace leurs ventes de billets sur les mêmes dates.

happenboard_attendee_deleted

Action Free src/Service/Attendees/AttendeeDeletion.php

Se déclenche après la suppression définitive d’un participant : avec Delete permanently dans l’écran Attendees (DELETE /happenboard/v1/attendees/{id}), ou avec son événement quand celui-ci est supprimé définitivement. Utile pour effacer ce que vous stockez sur ce participant.

Signature

do_action( 'happenboard_attendee_deleted', int $attendee_id )

Paramètres

$attendee_id int
Identifiant de la ligne supprimée.

Exemple

add_action(
    'happenboard_attendee_deleted',
    function ( int $attendee_id ): void {
        global $wpdb;
        // Supprimer les badges imprimés pour ce participant.
        $wpdb->delete( $wpdb->prefix . 'my_badges', array( 'attendee_id' => $attendee_id ), array( '%d' ) );
    }
);

Remarques

  • Un seul argument. La ligne a déjà disparu : récupérez ce qu’il vous faut avant, par exemple sur happenboard_event_deleting, qui voit encore les lignes.
  • Quand l’événement est en cours de suppression, son post et ses métadonnées sont encore lisibles. Annuler une inscription ne supprime rien et ne le déclenche pas.
  • HappenBoard efface ici le rappel en attente du participant. HappenBoard Pro libère les places du billet, supprime la vente et l’historique du participant, et envoie le webhook attendee.deleted.

happenboard_rest_attendees_prefetch

Action Free src/REST/Attendees.php

Se déclenche une fois avec toutes les lignes qu’une liste ou un export de participants va renvoyer, avant que happenboard_rest_attendee_response ne traite chaque ligne. Chargez ici vos données pour tout l’ensemble, en une requête.

Signature

do_action( 'happenboard_rest_attendees_prefetch', array<int,array<string,mixed>> $rows, WP_REST_Request $request )

Paramètres

$rows array<int,array<string,mixed>>
Lignes brutes dans l’ordre de la réponse (colonnes en snake_case, custom_fields encore en JSON). La liste d’un événement inclut les participants de ses traductions.
$request WP_REST_Request
La liste (GET /happenboard/v1/attendees) ou un export (GET /happenboard/v1/attendees/export).

Exemple

$my_tiers = array();

add_action(
    'happenboard_rest_attendees_prefetch',
    function ( array $rows ) use ( &$my_tiers ): void {
        // Une requête pour toute la page, indexée par participant.
        $my_tiers = my_plugin_tiers_for( array_map( 'intval', array_column( $rows, 'attendee_id' ) ) );
    }
);
add_filter(
    'happenboard_rest_attendee_response',
    function ( array $serialized, array $row ) use ( &$my_tiers ): array {
        $id = (int) $row['attendee_id'];
        // Réponse à une seule ligne, non annoncée : requête de secours.
        $serialized['myTier'] = $my_tiers[ $id ] ?? ( my_plugin_tiers_for( array( $id ) )[ $id ] ?? '' );
        return $serialized;
    },
    10,
    2
);

Remarques

  • Deux arguments. Un callback qui n’a besoin que des lignes peut garder la valeur par défaut d’un argument.
  • Une page de liste contient jusqu’à 200 lignes et un export jusqu’à 10 000 : une requête dans le filtre par ligne tournerait autant de fois.
  • Les réponses à une seule ligne (GET et PATCH /attendees/{id}, POST /attendees/{id}/date) ne le déclenchent pas : le filtre a donc besoin d’une solution de secours. Ne gardez que les données de la réponse en cours.

happenboard_rest_attendee_response

Filtre Free src/REST/Attendees.php

Filtre un participant tel que l’API REST l’envoie à l’écran Attendees et à ses exports. Utile pour ajouter vos propres colonnes.

Signature

apply_filters( 'happenboard_rest_attendee_response', array<string,mixed> $serialized, array<string,mixed> $row )

Paramètres

$serialized array<string,mixed>
id, eventId, eventTitle, language, occurrenceId, occurrenceSeq, occurrenceStartUtc, occurrenceLabel, occurrenceStatus, bookedStartUtc, userId, email, displayName, status, quantity, customFields, createdUtc, updatedUtc.
$row array<string,mixed>
La ligne brute de la base, pour ne pas avoir à la relire.

Valeur de retour

array<string,mixed> Le participant avec vos clés ajoutées. Il est converti avec (array) : renvoyez toujours le tableau.

Exemple

add_filter(
    'happenboard_rest_attendee_response',
    function ( array $serialized, array $row ): array {
        // Ajouter le niveau de l'événement à chaque participant.
        $serialized['myTier'] = (string) get_post_meta( (int) $row['event_id'], '_my_tier', true );
        return $serialized;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Ajoutez des clés sans reconstruire le tableau, sinon vous perdez les champs de HappenBoard et ceux des callbacks précédents (HappenBoard Pro ajoute checkinCount et lastCheckinUtc).
  • Une clé ajoutée arrive dans l’export JSON. L’export CSV garde ses propres colonnes (plus une colonne cf: par champ personnalisé) et l’export vCard ignore les clés en plus.
  • Il s’exécute une fois par ligne : chargez vos données sur happenboard_rest_attendees_prefetch.

happenboard_pro_attendee_checked_in

Action Pro src/Service/Checkin/Repository.php

Se déclenche après l’enregistrement d’un check-in à l’entrée : un scan sur l’écran de check-in (POST /happenboard/v1/pro/checkin/mark) ou l’ability check-in-attendee de Pro. Utile pour imprimer un badge, prévenir une équipe ou rafraîchir une liste en direct.

Signature

do_action( 'happenboard_pro_attendee_checked_in', int $checkin_id, int $attendee_id, int $event_id )

Paramètres

$checkin_id int
Identifiant de la ligne de check-in qui vient d’être enregistrée (pas celui du participant).
$attendee_id int
Le participant scanné.
$event_id int
L’événement de l’inscription du participant (sur un événement traduit, la traduction sur laquelle il s’est inscrit).

Exemple

add_action(
    'happenboard_pro_attendee_checked_in',
    function ( int $checkin_id, int $attendee_id, int $event_id ): void {
        // Journaliser chaque entrée.
        error_log( sprintf( 'Scan %d: attendee %d entered event %d.', $checkin_id, $attendee_id, $event_id ) );
    },
    10,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • Il se déclenche à chaque scan enregistré, nouveaux scans compris, chacun avec un nouvel identifiant de check-in. Dédoublonnez si vous ne voulez que la première entrée.
  • Un billet refusé (pas de place, autre date ou autre événement) déclenche happenboard_pro_attendee_checkin_refused, et un scan annulé déclenche happenboard_pro_attendee_checkin_undone. Les deux sont documentés avec les hooks de check-in.

Pour aller plus loin