ZG Report
Zentrygate periodical report
by Ignacio Pomar Ballestero · github.com/ignaciopomar/zg-report · website
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.zipReadme
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 (
NOsi 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 todoNO, 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_hooka 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 campootherData.
Licencia
GPL2