WP Manifestindependent plugin directory
manifest / events / tgns-event-registrations

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.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/bn010001/tgns-event-registrations/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Gestione 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 alias ts_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()
Email 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() o update()/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 %s includono 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-pot e phpcs --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.