WP Manifestindependent plugin directory
manifest / events / wp-agenda-automatizada

WP Agenda Automatizada WP Registry grade D+. High-severity findings · 3 findingsWP RegistryHigh-severity findings · 3 findingsOpen the reportD+

Plugin para WordPress con funcionalidad de agenda dinámica sincronizada con Google calendar

★ 0stars
140release downloads
v4.0.0latest · 1mo ago

Install

Download wp-agenda-automatizada.zip From the v4.0.0 release on GitHub, Sep 22, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/robertotd/wp-agenda-automatizada/releases/download/v4.0.0/wp-agenda-automatizada.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Plugin de WordPress para gestión de citas con integración a Google Calendar. Shortcode: [agenda_automatizada].
Para Cursor: Trabaja solo en este plugin; no modificar tema ni backend Node. Endpoints y flujos deben estar respaldados por docs/.

Overview

Architecture rules

  • PHP (includes/): Estructura, datos iniciales, orquestación. Controllers coordinan Models y Services; no contienen lógica de dominio. Models = solo acceso a BD. Services = integración con backend Node y APIs.
  • JS (assets/js/): UI y consumo de servicios/controladores existentes. main-admin.js / main-frontend.js = solo arranque. Controllers = orquestación UI ↔ Services ↔ DOM, sin lógica de negocio. Services = lógica de dominio y llamadas a APIs. ui/ = solo DOM y render. utils/ = funciones puras, sin estado ni DOM.
  • Regla global: Cada función en el módulo que corresponde a su responsabilidad. Flujo: main → controller → service → utils/UI. No mezclar UI con lógica, ni controladores con domain logic, ni models con orquestación. No duplicar lógica de negocio entre PHP y JS.
  • Vistas: views/ y templates/ son fragmentos HTML y pantallas; la lógica de presentación compleja puede delegarse a JS (ui/), pero los datos iniciales salen de PHP.

Key paths

Ruta Uso
wp-agenda-automatizada.php Entrada del plugin; hooks y carga de controladores
includes/controllers/ Controladores PHP (availability, confirm, enqueue, proximasCitas, Webhooks, etc.)
includes/models/ Acceso a datos (ReservationsModel, AssignmentsModel)
includes/services/ Servicios PHP (confirm-backend, notifications, assignments, appointments, Sync, etc.)
includes/routes/ Rutas de la app (agenda-app.php)
assets/js/main-admin.js, main-frontend.js Punto de entrada JS; solo bootstrapping
assets/js/controllers/ Orquestación JS (admin, reservas, disponibilidad, confirm, WhatsApp, etc.)
assets/js/services/ Lógica de dominio JS; subcarpeta availability/ para slots y rangos
assets/js/ui/ Componentes de interfaz (calendario, slots, etc.); solo DOM y render
assets/js/ui-adapters/ Adaptadores de UI (WPAgenda, datePicker, modal, slots)
assets/js/utils/ Utilidades puras (fechas, helpers); sin estado ni DOM
css/ Estilos del plugin (styles.css, calendar-default.css)
views/ Vistas PHP del plugin (admin-controls, etc.)
docs/ Documentación del plugin

How to work in this repo

  • Do: Respetar separación PHP = estructura + datos iniciales; JS = UI + consumo de controladores/servicios ya definidos.
  • Do: Añadir endpoints o flujos solo si están descritos o alineados con docs/ (estrategia de producto, arquitectura, design brief).
  • Do: Pasar datos desde PHP (localized script) y consumirlos desde JS; no reimplementar en JS lógica que ya vive en PHP.
  • Do: Mantener controladores como orquestadores; lógica de negocio en services; UI en módulos ui/ o equivalentes.
  • Do: Consultar docs/DESIGN_BRIEF.md para tokens y componentes antes de tocar estilos o nuevos componentes.
  • Don’t: Inventar endpoints, acciones AJAX o flujos no documentados en los docs del plugin.
  • Don’t: Poner lógica de negocio en controladores ni en componentes de UI.
  • Don’t: Duplicar reglas de negocio entre capa PHP y capa JS.
  • Don’t: Mezclar responsabilidades (p. ej. domain logic en models o en archivos de vista).
  • Don’t: Añadir features grandes (app móvil nativa, pagos, multi-sede, etc.) sin alinear con 01-product-strategy.md y sin usuarios que las validen.

Docs

Documentación de referencia dentro del plugin (no inventar flujos ni endpoints que no figuren aquí):

  • 01-product-strategy.md — Estado actual del producto, problema que resuelve, modelo de uso, cuello de botella (distribución) y fases siguientes; guía de decisiones alineada con el código.
  • 02-architecture-principles.md — Principios y capas PHP/JS; estructura de carpetas y responsabilidades de cada capa.
  • DESIGN_BRIEF.md — Sistema de diseño: tokens (colores, espaciado, tipografía), componentes (cards, botones, badges, toolbars), interacciones y anti-patterns.

Releases

Newest 25 of 40 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v4.0.0 latest
Sep 22, 2026 1mo ago
wp-agenda-automatizada.zip
4
Aug 24, 2026 2mo ago
wp-agenda-automatizada.zip
6
Aug 22, 2026 2mo ago
wp-agenda-automatizada.zip
2
Aug 17, 2026 2mo ago
wp-agenda-automatizada.zip
3
Aug 15, 2026 2mo ago
wp-agenda-automatizada.zip
3
Aug 15, 2026 2mo ago
wp-agenda-automatizada.zip
3
Aug 10, 2026 2mo ago
wp-agenda-automatizada.zip
2
Jul 30, 2026 2mo ago
wp-agenda-automatizada.zip
3
Jul 17, 2026 3mo ago
wp-agenda-automatizada.zip
3
Jul 16, 2026 3mo ago
wp-agenda-automatizada.zip
2
Jul 16, 2026 3mo ago
wp-agenda-automatizada.zip
1
Jul 2, 2026 3mo ago
wp-agenda-automatizada.zip
2
Jul 2, 2026 3mo ago
wp-agenda-automatizada.zip
0
Jun 29, 2026 3mo ago
wp-agenda-automatizada.zip
4
Apr 4, 2026 6mo ago
wp-agenda-automatizada.zip
11
Apr 4, 2026 6mo ago
wp-agenda-automatizada.zip
6
Mar 26, 2026 7mo ago
wp-agenda-automatizada.zip
7
Mar 20, 2026 7mo ago
wp-agenda-automatizada.zip
5
Mar 7, 2026 7mo ago
wp-agenda-automatizada.zip
3
Mar 5, 2026 7mo ago
wp-agenda-automatizada.zip
2
Mar 4, 2026 7mo ago
wp-agenda-automatizada.zip
3
Feb 24, 2026 8mo ago
wp-agenda-automatizada.zip
5
Feb 23, 2026 8mo ago
wp-agenda-automatizada.zip
4
Feb 21, 2026 8mo ago
wp-agenda-automatizada.zip
3
Feb 19, 2026 8mo ago
wp-agenda-automatizada.zip
4
All releases on GitHub →
D+ grade

Security

WP Agenda Automatizada 4.0.0 · audited by WP Registry

High-severity findings.

2 high 1 medium
Audited release
4.0.0
Findings
3
Worst severity
high
Content hash
20aaa6e707d0bb5f4c15e4d6…

Findings

  • high Unauthenticated confirmation mailer leaks virtual meeting links to attacker-chosen email

    missing_auth

    wp_ajax_nopriv_aa_enviar_confirmacion is reachable by anyone who can obtain the public aa_reservation_nonce from the booking UI. After a nonce check and IP rate limit, the handler accepts attacker-controlled id_reserva, correo, nombre (and related fields) and delegates to confirm_backend_service_enviar_correo. That service looks up aa_reservas by id_reserva, pulls virtual_link and join_token, builds join_url=home_url('/citas-virtuales/?token='+join_token), and POSTs backend_data including email=$datos['correo'] (attacker-chosen) to the confirmation mail API. An unauthenticated attacker can enumerate reservation IDs and receive confirmation emails containing virtual meeting links / join tokens for other customers' appointments, and can also spam arbitrary inboxes via the site's mail pipeline.

    includes/controllers/confirmController.php:65-121

    Recommendation

    Require proof of ownership (e.g. match correo/telefono to the reservation row, or a per-reservation secret issued at booking time) before sending. Always send only to the email stored on the reservation, never to a client-supplied address. Prefer removing nopriv access for this mail trigger or binding it to the just-created reservation response token.

  • high Confirmation mail service attaches reservation join_token to attacker-supplied recipient

    information_disclosure

    confirm_backend_service_enviar_correo uses intval($datos['id_reserva']) to SELECT virtual_link and join_token from aa_reservas, constructs join_url for virtual attendance, and places attacker-controlled $datos['correo'] into backend_data['email'] without verifying that the address belongs to that reservation. Combined with the nopriv AJAX controller, this is the concrete sink that discloses meeting access tokens.

    includes/services/confirm-backend-service.php:720-812

    Recommendation

    Load the recipient email exclusively from the reservation/cliente record. Do not accept client-supplied correo for this path. Consider omitting join_token from any channel that is not the verified booker.

  • medium State-changing assignment/staff AJAX lacks CSRF nonces

    csrf

    Multiple manage_options AJAX handlers that create/update/delete staff, service areas, services, and assignments (e.g. aa_create_staff, aa_create_assignment, aa_delete_assignment, aa_toggle_staff) check current_user_can('manage_options') but never call check_ajax_referer/wp_verify_nonce. An attacker who can trick a logged-in administrator into visiting a crafted page can forge POSTs to admin-ajax.php and mutate scheduling configuration.

    includes/services/assignments/staffService.php:60-90

    Recommendation

    Add check_ajax_referer (shared aa_* nonce) to every state-changing assignment/staff/area/service AJAX handler before processing POST bodies.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.