wonder-image / rsvp
RSVP plugin for Wonder Image new-site projects.
Requires
- php: ^8.2
- wonder-image/app: dev-main
This package is auto-updated.
Last update: 2026-05-12 11:36:44 UTC
README
Installazione del modulo via Packagist:
composer require wonder-image/rsvp:dev-main
Modulo RSVP per wonder-image/app, pronto per wonder-image/new-site.
Installazione
- Installa il package con Composer.
- Abilita il modulo in
custom/config/modules.php.
<?php return [ 'rsvp' => true, ];
- Esegui l’update del progetto consumer per materializzare le tabelle del modulo.
Non servono repositories custom nel composer.json del consumer se il package viene installato da Packagist.
URL frontend
Le due pagine frontend del modulo sono:
rsvp.homersvp.login
Path canonical:
GET /rsvp/GET /rsvp/login/
Traduzioni URL incluse nel package:
- IT:
- home:
/rsvp/ - login:
/rsvp/accedi/
- home:
- EN:
- home:
/rsvp/ - login:
/rsvp/login/
- home:
Nei template del progetto host usa sempre gli helper route:
<?=__r('rsvp.home')?> <?=__r('rsvp.login')?>
Flusso frontend
Se require_invite_code = true:
- l’utente apre
rsvp.login - inserisce un codice invito valido
- il modulo apre una sessione RSVP
- l’utente entra in
rsvp.home
Se require_invite_code = false, rsvp.home è accessibile direttamente.
API
Route name API:
api.rsvp.submitapi.rsvp.loginapi.rsvp.logoutapi.rsvp.session
Path API:
POST /api/rsvp/POST /api/rsvp/login/POST /api/rsvp/logout/GET /api/rsvp/session/
Le API restano intenzionalmente fisse e cross-lingua.
Backend del modulo
Dopo l’attivazione trovi queste resource:
rsvp/settingsrsvp/eventsrsvp/authorizationsrsvp/invite-codesrsvp/invite-groupsrsvp/responses
Permessi backend
Il modulo registra un permesso custom backend:
rsvp_response_viewer
Questo permesso serve per dare accesso solo alla lettura delle risposte RSVP.
Un utente con rsvp_response_viewer può:
- vedere la voce backend
rsvp/responses - aprire lista risposte
- aprire dettaglio risposta
- esportare le risposte
Un utente con rsvp_response_viewer non può:
- modificare impostazioni RSVP
- gestire eventi RSVP
- gestire autorizzazioni
- gestire codici invito
- gestire gruppi invito
- cancellare risposte
La cancellazione delle risposte resta riservata ad admin.
Come funziona il dominio RSVP
rsvp_event
Definisce un evento selezionabile nel form RSVP.
Campi principali:
codenamestarts_atlocation_namelocation_addresslocation_address_urllocation_position_urllocation_logopositionactive
Usalo per casi come:
- matrimonio
- aperitivo
- cena
- festa aziendale
- welcome party
rsvp_authorization
Definisce cosa un invitato può vedere o selezionare.
Campi principali:
visible_event_keys_jsonmax_participantsallow_childrenmax_children
Usa una authorization quando codici diversi devono avere regole diverse. Esempio:
WEDDING_ONLYWEDDING_AND_APERITIFCORPORATE_GUEST
rsvp_invite_code
È il codice effettivamente inserito dall’utente nella pagina login.
Campi principali:
codeusage_mode:single_useomultiple_useauthorization_idinvite_group_idactive
Il codice:
- apre la sessione RSVP
- eredita le regole dalla sua
authorization - può essere monouso o multiuso
- può essere organizzato in un gruppo invito
rsvp_invite_group
È un contenitore organizzativo. Non governa il frontend da solo.
Serve per segmentazioni come:
- famiglia
- colleghi
- fornitori
- tavoli
- lato sposa / lato sposo
Le regole di visibilità restano nella authorization.
Flusso consigliato di configurazione
- configura
rsvp/settings - crea gli eventi in
rsvp/events - crea una o più
rsvp/authorizations - crea eventuali
rsvp/invite-groups - crea i
rsvp/invite-codes - condividi
rsvp.loginorsvp.homea seconda del caso
Esempio:
- evento
WEDDING - evento
APERITIF - autorizzazione
WEDDING_ONLYconvisible_event_keys_json = ["WEDDING"] - autorizzazione
WEDDING_AND_APERITIFconvisible_event_keys_json = ["WEDDING", "APERITIF"] - gruppo
FAMIGLIA_ROSSI - codice
ROSSI01collegato aFAMIGLIA_ROSSIeWEDDING_AND_APERITIF
Cosa configuri in rsvp/settings
rsvp/settings contiene solo la configurazione operativa del modulo:
require_invite_codelogin_titlelogin_textmax_participantsallow_childrenmax_childrenrequire_image_releaseadmin_emailadmin_notificationscustomer_notificationscustomer_subjectcustomer_messageadmin_subjectadmin_message
Non ci sono più in settings:
Titolo RSVPTesto RSVPCatalogo eventiCatalogo eventi estesoContenuti pagina multilingua
Gli eventi stanno in rsvp/events. La personalizzazione strutturale del frontend si fa nelle view override del progetto host.
Default email inclusi nel codice
Il modulo include fallback reali per le email, usati quando i campi in rsvp/settings sono vuoti.
Default ospite:
- oggetto:
Conferma RSVP ricevuta - contenuto: conferma della ricezione con riepilogo RSVP
Default admin:
- oggetto:
Nuova risposta RSVP - {{contact_name}} {{contact_surname}} - contenuto: riepilogo completo RSVP con link al dettaglio backend
Placeholder supportati nei messaggi:
{{contact_name}}{{contact_surname}}{{event_name}}{{event_starts_at}}{{summary_html}}{{response_url}}
Export risposte
L’export RSVP genera una riga per ogni partecipante, non una sola riga per referente.
Per rendere leggibili le prenotazioni multiple, ogni risposta ha un codice prenotazione:
- formato:
pre_0000001 - salvato nel campo
booking_code - usato anche come fallback calcolato da
idper le risposte più vecchie
Nell’export troverai quindi:
- una riga per ciascun partecipante
- il codice prenotazione ripetuto su tutte le righe della stessa prenotazione
- le colonne fisse:
Codice prenotazione,Creato il,Nome,Cognome,Tipo,Esigenze alimentari,Referente email,Referente telefono,Partecipanti prenotazione,Bambini prenotazione,Eventi selezionati,Codice invito,Gruppo invito,Autorizzazione,Richieste,Privacy,Foto,Lingua,URL origine - eventuali colonne custom dell'estensione RSVP aggiunte in coda
- per i custom field
selectecheckbox, l'export usa la label dell'opzione configurata, non il valore tecnico salvato
Come customizzare le view dopo l’installazione
Il modulo supporta override view dal consumer.
Se nel progetto host crei questi file, il modulo userà quelli al posto delle view del package:
custom/modules/rsvp/views/frontend/home.phpcustom/modules/rsvp/views/frontend/login.php
Questa è la meccanica corretta per personalizzare HTML, struttura, sezioni, stile e logica presentazionale senza toccare vendor/.
Le view del package usano come contesto STATE, quindi nelle override hai già accesso ai dati principali:
$STATE['settings']$STATE['session']$STATE['authorization']$STATE['visible_events']$STATE['featured_event']$STATE['requires_invite_code']$STATE['max_participants']$STATE['allow_children']$STATE['max_children']$STATE['require_image_release']
Le view RSVP vengono renderizzate dentro il layout frontend del progetto host, quindi ereditano automaticamente:
head.phpheader.phpfooter.php- asset e utility globali del sito
Custom field e colonne response
Se il consumer registra custom field tramite l’estensione RSVP, ogni campo dichiarato viene materializzato anche come colonna dedicata nella tabella rsvp_response.
Regola di naming:
- campo
hotel-> colonnameta_hotel - campo
transfer_arrival-> colonnameta_transfer_arrival
metadata_json resta disponibile solo come fallback per dati extra non dichiarati nello schema dell’estensione.
I valori dei custom field vengono risolti prima della persistenza e i meta_* vengono preservati anche se l’estensione usa beforeSubmit(), quindi l’hook non deve ricostruire manualmente quelle colonne.
Dopo aver aggiunto o modificato i custom field dell’estensione, esegui l’update del progetto consumer per sincronizzare lo schema della tabella risposte.
Multilingua
Il modulo usa __t() per i testi frontend di default, per i messaggi email di default e per i messaggi API mostrati all’utente.
- route frontend traducibili via
lang/{locale}/urls.json - testi frontend del modulo in
lang/{locale}/rsvp.json - testi email del modulo in
lang/{locale}/emails.json - le view override del consumer possono usare
__l(),__t()e__r()come qualsiasi altra pagina del progetto
File lingua inclusi:
- lang/it/urls.json
- lang/en/urls.json
- lang/it/rsvp.json
- lang/en/rsvp.json
- lang/it/emails.json
- lang/en/emails.json
Payload RSVP supportato
Campi supportati direttamente:
participants: array di oggetti{ name, surname, dietary_requirements, is_child }contact_namecontact_surnamecontact_phonecontact_emailevent_keyeventsnotesaccept_privacy_policy+privacy_policy_idaccept_image_release+image_release_idinvite_code_idsource_url
Campi legacy ancora normalizzati automaticamente:
name,surnamechildren_name,children_surname,children_dietary_requirementspartner_name,partner_surnamephone,celemaileventallergiesrequests,requestlangphoto_privacypassword_idformJSON legacyrequest_url
I campi extra non riconosciuti e non dichiarati nell’estensione finiscono in metadata_json.
I metadati extra non generano colonne dedicate nella tabella risposte:
- restano nel campo unico
metadata_json - nel backend dettaglio vengono mostrati come blocco compatto
- negli export finiscono in una sola colonna
Metadati