From 74f3dc6230825433cbab863b9a88b1c83621af86 Mon Sep 17 00:00:00 2001 From: mgonzalez Date: Fri, 5 Jun 2026 15:09:09 -0500 Subject: [PATCH] =?UTF-8?q?docs:=20secci=C3=B3n=2023=20LOPDP=20Ecuador=20?= =?UTF-8?q?=E2=80=94=20router,=20bugs,=20verificaci=C3=B3n,=20requisitos?= =?UTF-8?q?=20para=20nuevos=20temas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROMPT_IA.md | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 122 insertions(+), 1 deletion(-) diff --git a/PROMPT_IA.md b/PROMPT_IA.md index 4aac8c2..035ac0a 100644 --- a/PROMPT_IA.md +++ b/PROMPT_IA.md @@ -22,7 +22,8 @@ Sitio web personal de **hoja de vida / currículum ejecutivo** de **Patricia Sol ``` pflores.linkedcorp.net/ ├── backend/ -│ ├── start-wordpress.sh # Arrancar el servidor PHP +│ ├── start-wordpress.sh # Arrancar el servidor PHP (usa router.php) +│ ├── router.php # Router PHP — permite URLs tipo /politica-de-privacidad/ │ └── wordpress/ # Instalación WordPress 7.0 │ ├── wp-config.php # Config dinámica (URL, auto-updates OFF) │ ├── favicon.ico # Foto de Patricia, circular, 16/32/48px @@ -458,6 +459,38 @@ Los temas deben manejar ambos formatos de competencias: ``` +### LOPDP — 3 requisitos obligatorios en todo tema nuevo + +**1. Navegación con URLs absolutas** — en `functions.php`, la función que genera el menú debe usar `home_url('/')` como base cuando no se está en el front page: + +```php +function NOMBRE_render_nav(): string { + // ... + $base = is_front_page() ? '' : home_url('/'); + $items = [ + $base . '#sobre-mi' => 'Sobre mí', + $base . '#experiencia' => 'Experiencia', + // ... resto de anclas igual + ]; + // ... +} +``` + +Sin esto, los links del menú quedan como `#sobre-mi` en la página de política de privacidad y no llevan de vuelta al CV. + +**2. `index.php` estilizado** — reescribir con el estilo del tema, botón "Volver al CV" y tipografía coherente. Ver los existentes como referencia: `frontend/persona-cv-theme/index.php`. + +**3. Link de privacidad en el footer** — en `footer.php` o en la sección del copyright de `front-page.php`: + +```php + + Política de Privacidad · LOPDP + +``` + +> El banner LOPDP y la página de política son globales — están en el plugin `pflores-cv-fields.php`, no en cada tema. Solo el link del footer y el index.php deben adaptarse por tema. + ### `inc/cv-data.php` — función de fallback Debe contener **todos los datos reales** de Patricia Flores, idénticos a los que están en la BD. Copiar la función de otro tema y renombrar a `NOMBRE_cv_data()`. @@ -866,3 +899,91 @@ for f in os.listdir(src): " rm -rf /tmp/wp.zip /tmp/wp_extract ``` + +--- + +## 23. LOPDP Ecuador — Implementación completa + +### ¿Qué es y por qué existe? + +La **Ley Orgánica de Protección de Datos Personales del Ecuador (LOPDP)** exige informar a los visitantes sobre el tratamiento de sus datos. Este sitio usa estadísticas anónimas de visitas (transients de WordPress, eliminados cada hora) con base legal en el **Art. 26 LOPDP — interés legítimo**. + +### Componentes implementados + +Todo el código LOPDP vive en `backend/wordpress/wp-content/plugins/pflores-cv-fields/pflores-cv-fields.php` (sección 3). + +| Componente | Función | Dónde | +|---|---|---| +| `router.php` | Permite URLs bonitas (`/politica-de-privacidad/`) en el servidor PHP integrado | `backend/router.php` | +| Página de política | Creada automáticamente en `admin_init` con contenido completo | BD: `cv_posts`, `post_name = politica-de-privacidad` | +| Banner LOPDP | `wp_footer` — aparece en todos los temas, se acepta con `localStorage` | `pflores-cv-fields.php` función `pflores_lopd_banner()` | +| Widget dashboard | Estadísticas de visitas por tema + total | `pflores-cv-fields.php` función `pflores_visitas_widget()` | +| Link en footer | Cada tema tiene un enlace discreto "Política de Privacidad · LOPDP" | `footer.php` o `front-page.php` de cada tema | +| Nav con home_url | Menú funciona desde páginas internas | `functions.php` de cada tema | +| `index.php` estilizado | Páginas internas con estilo del tema + "Volver al CV" | `index.php` de cada tema | + +### Infraestructura de URLs (router.php) + +Sin el router, PHP built-in server devuelve 404 para `/politica-de-privacidad/`. + +El archivo `backend/router.php`: +```php +/dev/null + +# Si no existe, forzar creación visitando el admin: +curl -s http://127.0.0.1:8081/wp-admin/admin.php > /dev/null +# O insertar directamente en BD (ver PRODUCCION.md sección "Problemas conocidos") +``` + +### Verificación rápida + +```bash +# Banner presente en el HTML +curl -s http://127.0.0.1:8081/ | grep -c "pflores-lopd-banner" # debe ser 5 + +# Página de política accesible +curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8081/politica-de-privacidad/ # debe ser 200 + +# Contenido correcto +curl -s http://127.0.0.1:8081/politica-de-privacidad/ | grep -c "Art. 26\|LOPDP" # debe ser >= 1 + +# Sin cédula en el HTML público +curl -s http://127.0.0.1:8081/ | grep "1103591648" # debe retornar vacío +```