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.

by Tegent Software · github.com/bn010001/tgns-event-registrations

0stars
0forks

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.zip

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.