feat: AutoBooking initial commit — PHP WordPress Plugin (REST API, wpdb, WP_User_Query)

This commit is contained in:
2026-07-03 12:15:26 -04:00
commit c2b493117b
21 changed files with 10438 additions and 0 deletions
+186
View File
@@ -0,0 +1,186 @@
# CHANGES.md — AutoBooking Admin Dashboard
**Fecha:** 2026-05-29
**Autor:** Claude Code (claude-sonnet-4-6)
**Tarea:** PARTE A: fix rol corporate_admin + PARTE B: nuevo plugin autobooking-admin-dashboard
---
## ESTADO INICIAL (antes de tocar nada)
### Plugins existentes
| Plugin | Versión | Archivo principal |
|--------|---------|-------------------|
| autobooking-driver-dashboard | 2.0.0 | autobooking-driver-dashboard.php |
| autobooking-passenger-dashboard | 1.0.0 | autobooking-passenger-dashboard.php |
| autobooking-corporate-dashboard | (sin versión definida) | autobooking-corporate-dashboard.php |
| autobooking-roles | 1.0.0 | autobooking-roles.php |
### wp_snippets
VACÍO. No hay snippets activos. El plugin Code Snippets está instalado pero sin snippets.
### wp_options con prefijo fare/tariff/autobooking
NINGUNA. No existe configuración de tarifas en wp_options.
### Tablas de tarifas dedicadas
NO EXISTEN. Búsqueda de tablas con LIKE '%rate%', '%fare%', '%tarif%', '%price%' devolvió vacío.
### Sistema de tarifas actual (HALLAZGO CRITICO)
Las tarifas están hardcodeadas en cada plugin con inconsistencias:
- autobooking-passenger-dashboard.php linea 317:
$base_fare = 2.50 + $per_mile (usa MILLAS)
- autobooking-corporate-dashboard.php lineas 514-515:
$base = 3.00 + $per_km = 1.80 (usa KILOMETROS)
Conclusion: No existe un sistema centralizado de tarifas. Los valores son diferentes
entre plugins y usan unidades distintas (millas vs km). Ver TODOs al final.
### Bug critico identificado
- autobooking-roles v1.0.0 crea roles 'driver' y 'driver_pending' pero NO 'corporate_admin'
- El corporate dashboard verifica in_array('corporate_admin', $user->roles) -> acceso denegado siempre
### Esquema de tablas verificado
Todas las tablas inspeccionadas. Tabla wp_ab_trips incluye columna country_code char(2).
Tabla wp_ab_company_users: columna user_id bigint(20) NULL (puede o no tener WP user ligado).
---
## CAMBIOS REALIZADOS
### PARTE A -- autobooking-roles.php
[MODIFICADO] -- /wp-content/plugins/autobooking-roles/autobooking-roles.php -- v1.0.0 -> v1.1.0
Que cambio:
- Agregado rol 'corporate_admin' con caps read + read_corporate_dashboard
- Agregada cap custom 'manage_autobooking' asignada a 'administrator'
- Agregada funcion migracion retroactiva abr_migrate_existing_corporate_users() en activation hook
- Version bumped a 1.1.0
CODIGO ORIGINAL COMPLETO (para revertir):
--- INICIO ORIGINAL ---
<?php
/**
* Plugin Name: AutoBooking Roles (Drivers)
* Description: Crea los roles "Driver" y "Pending Driver" y capacidades para controlar acceso a dashboards.
* Version: 1.0.0
* Author: AutoBooking
*/
if (!defined('ABSPATH')) { exit; }
define('ABR_ROLE_DRIVER', 'driver');
define('ABR_ROLE_DRIVER_PENDING', 'driver_pending');
define('ABR_CAP_READ_DRIVER_DASH', 'read_driver_dashboard');
define('ABR_CAP_READ_CUST_DASH', 'read_customer_dashboard');
function abr_register_roles_caps() {
$driver_caps = [ 'read' => true, ABR_CAP_READ_DRIVER_DASH => true ];
if (!get_role(ABR_ROLE_DRIVER)) {
add_role(ABR_ROLE_DRIVER, 'Driver', $driver_caps);
} else {
$r = get_role(ABR_ROLE_DRIVER);
foreach ($driver_caps as $cap => $grant) {
if (!$r->has_cap($cap)) { $r->add_cap($cap, $grant); }
}
}
$pending_caps = [ 'read' => true ];
if (!get_role(ABR_ROLE_DRIVER_PENDING)) {
add_role(ABR_ROLE_DRIVER_PENDING, 'Pending Driver', $pending_caps);
} else {
$r = get_role(ABR_ROLE_DRIVER_PENDING);
foreach ($pending_caps as $cap => $grant) {
if (!$r->has_cap($cap)) { $r->add_cap($cap, $grant); }
}
}
if ($admin = get_role('administrator')) {
if (!$admin->has_cap(ABR_CAP_READ_DRIVER_DASH)) { $admin->add_cap(ABR_CAP_READ_DRIVER_DASH); }
if (!$admin->has_cap(ABR_CAP_READ_CUST_DASH)) { $admin->add_cap(ABR_CAP_READ_CUST_DASH); }
}
}
register_activation_hook(__FILE__, 'abr_register_roles_caps');
add_action('init', 'abr_register_roles_caps');
--- FIN ORIGINAL ---
### PARTE B -- autobooking-admin-dashboard (nuevo plugin)
[ANADIDO] -- /wp-content/plugins/autobooking-admin-dashboard/autobooking-admin-dashboard.php -- v1.0.0
[ANADIDO] -- /wp-content/plugins/autobooking-admin-dashboard/assets/admin-dashboard.css
[ANADIDO] -- /wp-content/plugins/autobooking-admin-dashboard/assets/admin-dashboard.js
Tablas creadas en activacion (via dbDelta):
wp_ab_admin_audit:
id BIGINT UNSIGNED AUTO_INCREMENT PK
admin_user_id BIGINT UNSIGNED
action VARCHAR(60)
target_type VARCHAR(40)
target_id BIGINT UNSIGNED
meta LONGTEXT NULL
created_at DATETIME
Keys: admin_user_id, (target_type,target_id), created_at
wp_ab_fare_config:
id BIGINT UNSIGNED AUTO_INCREMENT PK
country_code CHAR(2) UNIQUE
currency CHAR(3) DEFAULT 'USD'
base_fare DECIMAL(10,2) DEFAULT 3.00
per_km DECIMAL(10,4) DEFAULT 1.80
per_minute DECIMAL(10,4) DEFAULT 0.30
platform_fee_pct DECIMAL(5,4) DEFAULT 0.2000
minimum_fare DECIMAL(10,2) DEFAULT 5.00
active TINYINT(1) DEFAULT 1
updated_at DATETIME
---
## COMO REVERTIR
### Revertir PARTE A:
1. WP Admin -> Plugins -> AutoBooking Roles -> Desactivar
2. Reemplazar contenido del PHP con el CODIGO ORIGINAL de arriba
3. Reactivar
4. Los roles ya creados en DB no se borran (comportamiento seguro de WordPress)
### Revertir PARTE B:
1. WP Admin -> Plugins -> AutoBooking Admin Dashboard -> Desactivar
2. Borrar directorio /wp-content/plugins/autobooking-admin-dashboard/
3. Tablas wp_ab_admin_audit y wp_ab_fare_config quedan en DB (por seguridad)
4. Para borrar tablas manualmente:
DROP TABLE IF EXISTS wp_ab_admin_audit;
DROP TABLE IF EXISTS wp_ab_fare_config;
---
## TODOs / DECISIONES PENDIENTES PARA EL DUENO
1. [DECISION URGENTE] Inconsistencia de unidades en tarifas:
- passenger-dashboard calcula en MILLAS con base $2.50
- corporate-dashboard calcula en KILOMETROS con base $3.00
- El admin dashboard usa km (consistente con la columna fare_distance_m en metros de wp_ab_trips)
- Accion requerida: migrar passenger dashboard a km y unificar valores base
2. [TODO] Verificacion de documentos de conductores:
- La cola de aprobacion muestra datos basicos pero NO documentos (licencia, seguro, foto vehiculo)
- No existe tabla ni columnas para almacenar URLs de documentos en la DB actual
- Accion: crear wp_ab_driver_documents o usar wp_usermeta
3. [TODO] Motor de despacho (matching conductor-pasajero):
- Fuera del alcance de este prompt.
4. [TODO] Stripe Connect / payouts:
- Fuera del alcance. La config de comision existe en el admin pero no ejecuta pagos.
5. [CANDIDATO A ELIMINAR] Tablas duplicadas de rides:
- wp_ab_rides y wp_autobooking_rides parecen versiones antiguas (no usadas por plugins v2)
- NO se borraron. Decision pendiente del dueno.
6. [CANDIDATO A ELIMINAR] wp_ab_scheduled_trips:
- Driver dashboard v2 usa wp_ab_trips con status='assigned' para viajes programados
- wp_ab_scheduled_trips parece una version anterior sin uso activo
- NO se borró. Decision pendiente del dueno.