Mi cuenta

ODSLocal Data Editor

Editor frontend con flujo de aprobación draft → pending → approved/rejected
Versión 1.3.0
PHP ≥ 8.1
WordPress ≥ 6.0
Requiere ODSLocal Municipios

1. Qué hace

ODSLocal Data Editor da a los colaboradores un editor frontend amigable para introducir y actualizar valores de indicadores ODS por municipio, con un pipeline de revisión completo y notificaciones por email.

Pensado como alternativa accesible al panel de WordPress para usuarios sin rol administrativo.

  • Autosave cada 3 minutos en modo borrador.
  • Filtros por scope: cada usuario solo ve los municipios y grupos ODS que tiene asignados.
  • Notificaciones por email al cambiar el estado de las mediciones.
  • Redirección post-login para roles ODS-only que no deben entrar a wp-admin.

2. Instalación

  1. Asegúrate de tener ODSLocal Municipios activo.
  2. Copia odslocal-data-editor/ a wp-content/plugins/.
  3. Actívalo. En la primera carga se crea automáticamente la página «Editor de datos ODS» en /editor-datos-ods/ con el shortcode .
  4. Asigna las capabilities necesarias a los roles (ver §3).
  5. Configura los scopes territorio/ODS de cada usuario en Municipios → Gestión de accesos.

3. Roles y capabilities

Capability Quién la necesita Qué permite
ods_edit_own Cualquier colaborador Editar las mediciones que él mismo introdujo mientras están en draft.
ods_edit_assigned Investigador, gestor municipal Editar los territorios/grupos asignados por scope.
ods_edit_all Admin, gestor de plataforma Editar cualquier municipio / ODS.
ods_validate Validador/a Aprobar o rechazar mediciones pendientes.

4. Uso para colaboradores

4.1 Acceder al editor

Tras iniciar sesión, abrir /editor-datos-ods/ (o la pestaña Aportar datos del Hub si está instalado Contributor Profiles).

4.2 Seleccionar municipio

  1. Si tu usuario tiene 1 solo municipio asignado, se selecciona automáticamente.
  2. Si tienes ≤ 50 municipios asignados, aparecen en un selector.
  3. Si tienes más (o eres admin con acceso global), aparece un buscador con autocompletado: escribe nombre o código INE (3+ caracteres).

4.3 Elegir año

Por defecto el año actual. Puedes editar valores de años anteriores si necesitas completar series históricas.

4.4 Rellenar indicadores

Los 178 indicadores ODS están agrupados por ODS1..ODS17 en acordeones. Abre el grupo que quieres editar y rellena:

  • Valor — número, puede usar coma o punto como decimal.
  • Fuente (opcional) — p. ej. INE, Ministerio, elaboración propia.
  • URL de evidencia (opcional) — solo http:// o https://.
  • Notas (opcional) — texto libre.

4.5 Guardar

Acción Estado resultante
Guardar como borrador draft — solo visible para ti.
Enviar a revisión pending — notifica a revisores.
Autosave automático draft cada 3 min si has modificado algo.
ℹ Admins con ods_edit_all
Si guardas con rol admin/gestor con ods_edit_all, las mediciones se marcan directamente como approved sin pasar por pending. Este atajo acelera la carga masiva por un equipo técnico.

5. Revisión y validación

Usuarios con ods_validate disponen de:

5.1 Página Admin

Municipios → Revisión de datos:

  • Lista de mediciones pending, paginada.
  • Filtros por municipio, indicador, año, autor.
  • Acciones en lote: aprobar / rechazar con motivo.

5.2 Acción por batch

  1. Marca las filas a aprobar.
  2. Pulsa Aprobar seleccionadas.
  3. Las mediciones pasan a approved y se dispara el hook odslocal_measurements_validated con la lista de IDs y la decisión.
  4. Cada autor afectado recibe un email resumen.

5.3 Rechazo

Al rechazar se pide un motivo (obligatorio). Se guarda en el campo rejection_reason de la medición. El autor lo ve al reabrir el editor y puede corregir y re-enviar.

6. Panel de administración

Elementos añadidos al panel WP:

  • Municipios → Revisión de datos — fila de pendientes con badge contador (cache de 1 request).
  • Redirect post-login para usuarios ODS-only: al loguearse van directos a /editor-datos-ods/.

Ocultar wp-admin a roles ODS

Los roles sin edit_posts (p. ej. ods_researcher) reciben 403 si intentan entrar a /wp-admin/, excepto a admin-ajax.php (necesario para el editor) y a sus propias pantallas de revisión.

7. Endpoints AJAX

Todos requieren nonce odslocal_editor_nonce y usuario autenticado con la capability correspondiente.

Action Capability Propósito
odslocal_editor_municipalities edit caps Listar/buscar municipios dentro del scope.
odslocal_editor_load edit caps Cargar indicadores y mediciones existentes para un territorio/año.
odslocal_editor_save edit caps Enviar valores (draft → pending/approved).
odslocal_editor_save_draft edit caps Guardar borrador sin notificar.
odslocal_editor_pending ods_validate Listar mediciones pendientes.
odslocal_editor_approve ods_validate Aprobar/rechazar un batch con motivo opcional.

8. Formatos numéricos

El servidor normaliza notación europea antes de persistir:

Entrada Se guarda como
3,14 3.14
1.234,56 1234.56
1,234.56 1234.56
−3,5 (minus unicode) -3.5

9. Accesibilidad

  • Cabeceras de grupos ODS operables por teclado (role="button", tabindex="0", aria-expanded).
  • Toggle con Enter y Espacio.
  • Focus ring visible.
  • Etiquetas label asociadas a cada input.

10. Seguridad

  • Todos los AJAX verifican nonce + capability + scope territorial.
  • Texto sanitizado con sanitize_text_field / sanitize_textarea_field.
  • URLs de evidencia solo aceptan esquema http o https.
  • Cap de 500 indicadores por petición para mitigar payloads abusivos.
  • La configuración inline JSON usa JSON_HEX_TAG | JSON_HEX_APOS para prevenir </script> injection.

11. Notificaciones por email

Se envían en estos eventos:

Evento Destinatarios
Medición aprobada Autor de la medición.
Medición rechazada Autor, con el motivo.
Nueva tanda pendiente (> 5 filas) Usuarios con ods_validate dentro del scope del territorio.

Los correos son texto plano. El enlace al editor usa la URL correcta del panel edit.php?post_type=municipio&page=….

12. Traducciones

  • Text domain: odslocal-editor.
  • languages/odslocal-editor.pot — plantilla.
  • odslocal-editor-gl_ES.po/.mo — galego.
  • Los strings del JS se sirven pre-traducidos vía wp_localize_script (cfg.i18n).
# Regenerar POT
wp i18n make-pot . languages/odslocal-editor.pot --domain=odslocal-editor

# Compilar .mo
wp i18n make-mo languages

13. Solución de problemas

«No tienes municipios asignados»

El usuario no tiene ningún scope. Asígnale uno en Municipios → Gestión de accesos.

El autosave no funciona

  • ¿El navegador tiene la pestaña activa? El autosave se pausa en segundo plano para ahorrar recursos.
  • ¿El nonce ha expirado (24h por defecto)? Recarga la página.

Los revisores no reciben email

  • Verifica que wp_mail funciona (instala WP Mail SMTP si usas un host con bloqueo saliente).
  • Revisa que existen usuarios con ods_validate cuyo scope cubra el territorio en cuestión.

El valor aparece como 0 al guardar

Probablemente introdujiste algo no numérico. Revisa el campo; el normalizador rechaza strings sin dígitos.

Saltar al contenido principal