TGNS Event Registrations
Gestione completa delle iscrizioni agli eventi WordPress, compatibile con The Events Calendar. Consente richieste di partecipazione con approvazione, rifiuto o cancellazione, invia notifiche email automatiche e offre un’interfaccia admin con azioni singole o massime e esportazione CSV.
by Tegent Software · github.com/bn010001/tgns-event-registrations
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/bn010001/tgns-event-registrations/archive/refs/heads/main.zipGestione iscrizioni eventi con flusso approvativo (compatibile con The Events Calendar).
Feature
- Richiesta iscrizione e disiscrizione (AJAX) — azioni ora:
tgns_request_event_reg/tgns_request_event_cancel - Approvazione / Rifiuto / Cancellazione (singolo e bulk) dalla dashboard
- Email automatiche a utente e amministratore
- Shortcode:
[event_register_button],[my_event_regs] - Export CSV con profilo utente (nome, cognome, email, telefono)
- Filtri admin: per stato, ID iscrizione o ID evento; export coerente.
- Permessi: capability manage_event_registrations (assegnata di default agli Administrator).
Dev
- Text domain:
tgns-evreg - Namespace:
Tgns\\EvReg - JS handle front:
tgns-evreg-frontend(server mantiene aliasts_request_event_*per retro-compatibilità) - JS handle admin:
tgns-evreg-admin
Shortcode Examples
[event_register_button]
[event_register_button id="123"
label_request="Iscriviti"
label_pending="In attesa di approvazione"
label_approved="Iscritto"
label_cancel="Richiedi disiscrizione"
class="my-btn" align="center"]
[my_event_regs]
[my_event_regs statuses="pending,approved,cancel_requested,cancelled,rejected" img_size="medium" per_page="20"]
Hooks (quick)
| Type | Hook | Purpose |
|---|---|---|
| action | tgns_evreg_status_changed |
Notifica ogni transizione di stato |
| filter | tgns_evreg_status_label |
Cambia l’etichetta di uno stato |
| filter | tgns_evreg_status_text |
Alias legacy per label stato |
| filter | tgns_evreg_phone_keys |
Aggiunge chiavi meta telefono |
| filter | tgns_evreg_front_labels |
Sovrascrive label bottone |
See HOOKS.md for full signatures.
🧩 Developer Notes
Questa sezione è pensata per chi contribuisce o mantiene il plugin.
Include linee guida di sicurezza, standard di codifica e checklist prima del rilascio.
🛡️ Security & Code Quality Guidelines
Questo plugin segue le WordPress Coding Standards (WPCS) e le best practice di sicurezza raccomandate nel Plugin Developer Handbook. Tutte le operazioni con input utente, database e output HTML devono rispettare i principi di Sanitization, Validation ed Escaping.
🔐 Input sanitization
Pulire e validare prima di salvare o usare un dato:
| Caso | Funzione |
|---|---|
| Testo generico | sanitize_text_field() |
sanitize_email() |
|
| URL | esc_url_raw() |
| Intero | absint() / (int) |
| Checkbox / booleano | (int) ( ! empty( $_POST['field'] ) ) |
| Array di ID | array_map( 'intval', $array ) |
Esempio:
$event_id = absint( $_POST['event_id'] ?? 0 );
$status = sanitize_text_field( $_POST['status'] ?? '' );
🧱 Output escaping
Usare sempre la funzione di esc_...() corretta al momento della stampa in HTML:
| Contesto | Funzione | Esempio |
|---|---|---|
| Testo visibile nel markup | esc_html() |
<p><?php echo esc_html( $title ); ?></p> |
| Valori di attributo HTML | esc_attr() |
<input value="<?php echo esc_attr( $val ); ?>"> |
URL in href o src |
esc_url() |
<a href="<?php echo esc_url( $link ); ?>"> |
Testo in <textarea> |
esc_textarea() |
<textarea><?php echo esc_textarea( $msg ); ?></textarea> |
| HTML controllato | wp_kses() |
wp_kses( $html, ['strong'=>[], 'br'=>[]] ) |
Esempio corretto:
<a href="<?php echo esc_url( $profile_url ); ?>"
title="<?php echo esc_attr( $user_name ); ?>">
<?php echo esc_html( $user_name ); ?>
</a>
💾 Database queries (SQL safety)
Tutte le query dirette usano $wpdb->prepare() e $wpdb->update()/insert() con formati specifici (%d, %s, ecc.):
global $wpdb;
$table = $wpdb->prefix . 'event_regs';
$wpdb->get_var( $wpdb->prepare(
"SELECT status FROM $table WHERE event_id=%d AND user_id=%d",
$event_id, $user_id
));
- Mai concatenare variabili direttamente dentro SQL.
- Usa sempre
prepare()oupdate()/insert()con tipi di dato espliciti. - Non esporre errori SQL o messaggi di debug in output.
📤 Escaping nelle email HTML
Tutti i contenuti dinamici (nome, titolo evento, link) vengono passati attraverso esc_html(), esc_url(), esc_attr(), o wp_kses()
in modo che le email HTML non contengano codice malevolo.
🧩 AJAX & Nonce
Ogni endpoint AJAX:
- verifica capability o login (
current_user_can()/is_user_logged_in()), - valida il nonce (
wp_verify_nonce()), - restituisce risposte sicure via
wp_send_json_success()/wp_send_json_error().
🔒 Hardening HTML e link esterni
- Tutti i link con
target="_blank"devono includere:rel="noopener noreferrer"per prevenire tabnabbing attacks. - I colori e gli stili dinamici passano da
esc_attr()per evitare iniezioni CSS. - Le stringhe i18n con placeholder
%sincludono commenti/* translators: ... */per sicurezza di localizzazione.
🧰 Code quality tools
- Regole WPCS definite in
phpcs.xml. - Autoload PSR-4 in
composer.json. - Tutto il codice validato con
php -l,wp i18n make-potephpcs --standard=WordPress.
✅ TL;DR
🔸 Sanitize when receiving data. 🔸 Escape when printing data. 🔸 Always prepare SQL. 🔸 Verify nonces and permissions. 🔸 Use rel="noopener noreferrer" on external links.