WP Manifestindependent plugin directory
manifest / email / zg-report

ZG Report

Zentrygate periodical report

by Ignacio Pomar Ballestero · github.com/ignaciopomar/zg-report · website

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/ignaciopomar/zg-report/archive/refs/heads/main.zip

Readme

ZG Report

Complemento de ZentryGate que genera el informe de suscripciones de un evento y lo envía por correo, a mano o cada día.

No crea tablas propias: lee directamente wp_zgEvents, wp_zgUsers y wp_zgReservations, así que ZentryGate tiene que estar instalado y con su esquema al día.

Qué contiene el informe

  • Resumen por sección: total de suscritos y cuántos están pendientes de pago.
  • Resumen desde el último lunes: las mismas cifras, pero solo de las altas de la semana en curso.
  • Usuarios no suscritos: quienes se registraron en la web pero no reservaron ninguna sección del evento. Solo aparecen las altas del último trimestre: a quien lleva más de tres meses registrado sin reservar nada ya no tiene sentido perseguirlo en cada informe.
  • Usuarios suscritos: una fila por persona y una columna por sección, con el estado de cada reserva (NO si no está suscrito a esa sección concreta). Solo salen quienes tienen alguna reserva en el evento; los de ediciones anteriores llenaban la tabla y el CSV de filas con todo NO, que no dicen nada de este evento.

Todas las cifras se acotan al evento seleccionado: los identificadores de sección solo son únicos dentro de su propio sectionsJson, así que dos eventos que reutilicen s1 no se mezclan.

El cuerpo del correo lleva los resúmenes y los usuarios no suscritos. El listado completo viaja en dos adjuntos, porque puede ser muy largo:

  • el informe entero en HTML,
  • un CSV ancho (separador ;, CRLF y BOM UTF-8, para abrirlo en Excel sin romper tildes).

Los adjuntos se escriben en wp-content/uploads para poder enviarlos y se borran nada más terminar el envío: llevan email, NIF, teléfono y organización, y ese directorio se sirve por HTTP. Cada envío borra únicamente los suyos —los dos ficheros comparten un sufijo aleatorio, zg-report-{evento}-{fecha}-{sufijo}— para no pisar a otro envío que estuviera componiéndose a la vez.

El barrido completo del patrón zg-report-* se hace al activar y al desactivar el plugin, que es cuando no puede coincidir con ningún envío. Así se arrastra también el histórico que dejaron las versiones que no borraban nada: basta con desactivar y volver a activar el plugin para limpiarlo.

Uso

WP Admin → Herramientas → ZG Informe Suscripciones.

  • Guardar: fija el evento y los destinatarios que usará el envío automático.
  • Enviar ahora: manda un informe puntual sin tocar lo guardado. El aviso de resultado indica qué adjuntos salieron: el correo se envía aunque no se pueda escribir el HTML o el CSV en uploads, y en ese caso la pantalla lo dice en vez de dar un "correcto" a secas.
  • Activar envíos diarios (08:00): programa el evento de WP-Cron zg_report_daily_hook a las 08:00 de la zona horaria configurada en WordPress (Ajustes → Generales). El estado que se muestra es el real de WP-Cron, no una opción aparte.

Todas las fechas del plugin —la hora del cron, el corte del último lunes, la ventana del trimestre y el pie del informe— usan esa misma zona. WordPress no guarda zona por usuario, así que la del sitio es la única referencia posible.

Los destinatarios se escriben separados por ; o ,. La primera dirección va en Para y el resto en CC, con un máximo de 20 en total.

Eventos caducados

Un evento deja de dar un informe vivo por dos motivos: porque está cerrado o porque ya se ha celebrado. Los dos se avisan igual, y si concurren se dicen los dos.

El desplegable lista los eventos por celebrar y deja los caducados en gris y al final, etiquetados con el motivo (— CERRADO, — YA CELEBRADO, — CERRADO Y YA CELEBRADO). Se pueden seguir eligiendo —a veces interesa el informe de uno ya pasado— pero la pantalla lo deja claro: el combo se marca en rojo y aparece un aviso debajo. Y si es el evento programado para el envío diario, sale además un aviso de error arriba, junto al estado del cron.

El evento recordado siempre aparece en el desplegable como seleccionado, aunque su fecha ya haya pasado y no salga en la lista de futuros: así el combo nunca señala un evento distinto del que realmente se va a enviar.

Al desactivar el plugin se limpia el evento programado.

Estructura

Fichero Responsabilidad
zg-report.php Cabecera del plugin, constantes y carga de clases.
ZgReport/Plugin.php Registro de hooks.
ZgReport/Settings.php Preferencias persistentes, parseo de destinatarios, fechas.
ZgReport/Schedule.php Alta, baja y disparo del envío diario (WP-Cron).
ZgReport/Repository.php Consultas a las tablas de ZentryGate.
ZgReport/ReportData.php Recuentos por sección y matriz usuario x sección.
ZgReport/ReportHtml.php Composición del HTML del informe.
ZgReport/CsvExport.php Volcado del CSV ancho.
ZgReport/Mailer.php Montaje de adjuntos y envío.
ZgReport/AdminPage.php Pantalla de Herramientas y sus handlers.

Opciones que usa

  • zg_report_saved_event_id – evento recordado para el cron.
  • zg_report_saved_recipients – destinatarios recordados, normalizados.
  • zg_report_cron_enabled – rastro informativo del último cambio de estado.

Requisitos

  • PHP 7.4 o superior.
  • MySQL/MariaDB con soporte de funciones JSON (JSON_VALID, JSON_EXTRACT): los datos del formulario (NIF, organización, rol, teléfono) se extraen del campo otherData.

Licencia

GPL2

Read the full README on GitHub →