Mi cuenta

ODSLocal Contributor Profiles

Perfiles públicos, hub de colaboradores, verificación QR y cartas académicas
Versión 1.3.1
PHP ≥ 8.1
WordPress ≥ 6.0
Español · Galego
Requiere ODSLocal Municipios

1. Introducción

ODSLocal Contributor Profiles extiende ODSLocal Municipios añadiendo la capa social y académica de la plataforma:

  • Página de perfil público de cada colaborador con avatar, bio, afiliación, ORCID y redes académicas.
  • Panel personal “Mis contribuciones” con estadísticas y acciones rápidas.
  • Módulo Hub con login personalizado y dashboard de pestañas.
  • QR de verificación para validar colaboradores en contextos presenciales.
  • Informe imprimible y carta / certificado académico con placeholders.
  • Campo DNI/NIE confidencial visible únicamente para el propio usuario y administradores, que aparece solo en la carta exportada.

2. Requisitos e instalación

  • WordPress 6.0+, PHP 8.1+.
  • Plugin ODSLocal Municipios activo (provee ODSLocal_DB, ODSLocal_Roles, ODSLocal_Territories).
  1. Subir odslocal-contributor-profiles/ a wp-content/plugins/.
  2. Activar. El plugin crea automáticamente 6 páginas (ver sección 3) con sus shortcodes.
  3. Visitar Ajustes → Contributor Profiles y configurar: logo, nombre de la organización, dirección, firma y plantilla de la carta.
  4. Cada usuario ya registrado puede ir a /mis-contribuciones/ o /editar-perfil/ para completar su perfil.

3. Páginas creadas automáticamente

En la activación se crean estas páginas (los IDs se guardan en wp_options y nunca se duplican):

Slug Shortcode Propósito
/perfil-colaborador/
Colaborador no encontrado.
Perfil público (recibe ?user=ID).
/mis-contribuciones/
Inicia sesión para ver tus contribuciones.
Panel personal del colaborador logueado.
/verificar-colaborador/
No se proporcionó un token de verificación.
Landing al escanear un QR (recibe ?token=…).
/editar-perfil/
Inicia sesión para editar tu perfil.
Formulario AJAX de edición de perfil.
/odslocal-acceso/ Login personalizado con branding.
/odslocal-hub/

Inicia sesión para acceder a tu espacio ODSLocal.

Dashboard con pestañas tras iniciar sesión.

4. Shortcodes

Shortcode Atributos Quién lo ve
Colaborador no encontrado.
(usa ?user=ID en la URL) Público si el perfil es público.
Inicia sesión para ver tus contribuciones.
— El propio colaborador.
Inicia sesión para editar tu perfil.
— Usuario autenticado.
No se proporcionó un token de verificación.
(usa ?token=…) Público. Sólo carga datos de perfiles públicos.
— Visitantes no autenticados.

Inicia sesión para acceder a tu espacio ODSLocal.

— Usuario autenticado.

URLs especiales

  • ?odslocal_report=report&user=ID — informe imprimible de contribuciones.
  • ?odslocal_report=letter&user=ID — carta / certificado académico.

Ambas URLs comprueban permisos: solo el propio usuario o administradores pueden abrirlas. Los demás son redirigidos al inicio.

5. Editar tu perfil (colaborador)

El colaborador puede editar su perfil desde el frontend en /editar-perfil/ (o desde el Hub, pestaña Mi perfil).

Campos disponibles

Campo Visibilidad Notas
Nombre público (display_name) Público Si eres una ONG/organización, pon su nombre.
Afiliación Público Universidad, ayuntamiento, asociación, empresa…
ORCID iD Público Formato 0000-0000-0000-0000. Validación client-side.
DNI / NIE Confidencial Solo aparece en la carta exportada (ver §6).
Presentación breve (bio) Público Hasta 600 caracteres.
Foto de perfil (avatar) Público JPG / PNG / WebP / GIF, máx. 2 MB. Fallback a Gravatar.
Enlaces sociales Público LinkedIn, X/Twitter, ResearchGate, Academia.edu, GitHub, ORCID URL, sitio web. Solo https://.

Privacidad del perfil

En Mis contribuciones hay un toggle Público / Privado. Si está privado:

  • El perfil no aparece en listados públicos.
  • Los endpoints REST devuelven 404.
  • El propio usuario y administradores sí pueden verlo, con un banner amarillo indicando que está privado.

6. Campo DNI/NIE confidencial

Desde la v1.3.1, cada colaborador puede añadir su DNI/NIE para que aparezca en el certificado académico que él mismo exporte.

Dónde se introduce

  • Frontend:
    Inicia sesión para editar tu perfil.
    → campo «🔒 DNI / NIE».
  • Admin: Usuarios → Editar → sección «Perfil ODSLocal» (visible sólo a administradores o al propio usuario).

Dónde se muestra

Superficie ¿Muestra DNI? Quién la ve
Perfil público ❌ —
Panel Mis contribuciones ❌ —
Formulario de edición ✅ (input) Solo el propio usuario.
Admin → Editar usuario ✅ (input) Admin + propio usuario.
REST API /verify, /stats ❌ Payload whitelisted.
Carta / certificado exportado ✅ en bloque «Datos del titular» Solo el propio usuario o admins.

Validación del formato

  • Se acepta DNI español (8 dígitos + letra) y NIE (X/Y/Z + 7 dígitos + letra).
  • Algoritmo de checksum oficial: TRWAGMYFPDXBNJZSQVHLCKE[n%23].
  • Si el valor no valida pero el usuario lo quiere guardar (pasaporte, otro documento), se guarda igualmente con un aviso no bloqueante.
ℹ Placeholder en la carta
En la plantilla configurable de la carta (Ajustes → Contributor Profiles → Plantilla) puedes usar el placeholder {dni}. Por defecto el DNI aparece en el bloque «Datos del titular» sobre el título.

7. El Hub: login y dashboard

El Hub es una alternativa amigable al panel de WordPress. Pensado para colaboradores que no necesitan ver wp-admin.

Página de acceso

En /odslocal-acceso/ hay un login personalizado con logo, nombre y tagline de la plataforma.

Dashboard

Tras iniciar sesión, en /odslocal-hub/ el usuario encuentra un dashboard con pestañas:

  • Aportar datos — embed del shortcode si el plugin Data Editor está activo.
  • Contribuciones — resumen + acciones rápidas (informe, carta).
  • Mi perfil — embed del shortcode
    Inicia sesión para editar tu perfil.
    .
  • Publicar — si ODSLocal News está activo, formulario de envío de artículo.
  • Eventos — si ODSLocal Events está activo, mis eventos + mis reservas.

Plugins terceros pueden añadir pestañas propias:

add_filter('odslocal_hub_tabs', function($tabs, $user){
    $tabs[] = [
        'id'      => 'mi-tab',
        'label'   => 'Mi sección',
        'icon'    => '<svg>…</svg>',
        'content' => '…HTML…',
    ];
    return $tabs;
}, 10, 2);

8. Carta / certificado académico

Cada colaborador con al menos una medición validada puede generar una carta profesional con QR de verificación, sello, firma y datos de su aportación.

Flujo de exportación

  1. En Mis contribuciones o en el Hub, el colaborador pulsa «Mi carta».
  2. Se abre ?odslocal_report=letter&user=ID en una pestaña nueva.
  3. La página tiene un botón Imprimir / Guardar PDF que usa window.print(): el usuario selecciona Guardar como PDF en el diálogo de impresión.

Configuración de la carta

En Ajustes → Contributor Profiles hay campos:

  • Título del documento (por defecto: «Certificado de participación en la plataforma ODSLocal»).
  • Nombre de la organización (por defecto: bloginfo('name')).
  • Dirección — aparece bajo el logo.
  • Logo (URL).
  • Sello oficial (URL, aparece al lado de la firma).
  • Nombre del firmante y cargo.
  • Cuerpo de la carta con editor visual y placeholders.

9. Verificación QR pública

Cada colaborador tiene un token de 40 caracteres hexadecimales generado con random_bytes(20) y almacenado en user_meta.

  • El QR codifica la URL /verificar-colaborador/?token=….
  • Al escanearlo, se muestra un resumen público: nombre, rol, número de mediciones validadas, municipios y años activos.
  • Si el perfil está privado o el token no existe, se muestra un mensaje de «colaborador no encontrado».

10. Ajustes del administrador

Menú Ajustes → ODSLocal Profiles.

Ajuste Descripción
Organización Nombre, dirección, URL del logo. Se usan en la carta, informes y compartidos con el plugin Data Export.
Firma Nombre y cargo del firmante, URL del sello.
Carta Título del documento y plantilla con editor visual y placeholders.
Visibilidad por defecto Los nuevos registros se crean con perfil público o privado según esta opción.
Páginas IDs de las 6 páginas creadas (se pueden reasignar si se renombraron).

Panel por usuario

En Usuarios → Editar, el administrador tiene una sección «Perfil ODSLocal» con todos los campos, incluido DNI, toggle público/privado y tokens.

11. REST API

Namespace odslocal-profiles/v1. Todos los endpoints son públicos y devuelven sólo datos de perfiles públicos.

Ruta Descripción
GET /verify/{token} Resumen de un colaborador a partir de su token QR.
GET /stats/{user_id} Estadísticas del colaborador (total mediciones, municipios, primera y última contribución).
curl https://odslocal.es/wp-json/odslocal-profiles/v1/verify/abc123…

12. Plantillas y placeholders

Disponibles en la plantilla del cuerpo de la carta:

Placeholder Valor
{nombre_org} Nombre de la organización.
{nombre} Nombre público del colaborador.
{email} Email del colaborador.
{rol} Rol traducido (p. ej. «Investigador/a»).
{fecha_registro} Fecha de alta en la plataforma.
{fecha_inicio_contribucion} Primera medición aportada.
{fecha_actual} Fecha de emisión.
{num_municipios} Nº de municipios con contribuciones.
{num_indicadores} Nº de indicadores únicos aportados.
{num_mediciones} Total de mediciones.
{lista_municipios} Lista separada por comas (máx. 20).
{url_perfil} URL al perfil público.
{url_verificacion} URL al landing QR.
{dni} DNI/NIE del colaborador (confidencial).

Otros plugins pueden añadir placeholders vía el filtro odslocal_profiles_letter_vars (ejemplo: ODSLocal News añade {num_articulos}, ODSLocal Events añade {num_eventos_organizados} y {num_eventos_asistidos}).

13. Hooks y filtros para desarrolladores

Hook Tipo Propósito
odslocal_profile_after_body action Inyectar HTML después del cuerpo del perfil público. Recibe $user_id.
odslocal_hub_tabs filter Añadir/quitar pestañas del Hub. Recibe $tabs, $user.
odslocal_profiles_letter_vars filter Placeholders extra para la carta. Recibe $vars, $user_id.

14. Seguridad y privacidad

  • Todas las acciones AJAX validan check_ajax_referer + autenticación.
  • Subida de avatar: capability upload_files o ods_manage_settings, límite 2 MB, MIME whitelisted.
  • URLs sociales solo aceptan https:// (cliente + servidor).
  • Tokens de 40 chars hex con random_bytes(20), únicos por usuario.
  • Endpoints REST devuelven 404 si el perfil es privado.
  • El DNI/NIE no se registra en register_meta, por tanto wp/v2/users de WP core no lo expone. Solo lectura directa desde el código del plugin, en superficies restringidas al dueño/admin.

15. Traducciones (i18n)

  • Text domain: odslocal-profiles.
  • languages/odslocal-profiles.pot — plantilla con ~206 entradas.
  • odslocal-profiles-gl_ES.po/.mo — galego, traducción completa.
  • Para añadir un idioma: copia el POT como odslocal-profiles-{locale}.po, traduce los msgstr y compila con wp i18n make-mo languages/ o Poedit.

16. Solución de problemas

El enlace «Mi carta» no aparece

Sólo se muestra cuando el colaborador tiene al menos una medición validada. Crea una medición de prueba en Mis contribuciones y aprueba desde otro usuario con ods_validate.

El QR no decodifica

El QR apunta a la URL /verificar-colaborador/?token=…. Comprueba que la página existe (ID en Ajustes) y que las permalinks amigables están activas.

La carta sale sin datos

  • ¿Hay plantilla en Ajustes → Carta → Cuerpo? Si está vacía, la carta aparece sin cuerpo.
  • ¿Los placeholders están bien escritos? Respetan mayúsculas y llaves.

No aparece la pestaña Eventos / Publicar en el Hub

Instala y activa ODSLocal Events o ODSLocal News. Las pestañas se registran vía el filtro odslocal_hub_tabs.

El avatar no se sube

  • El usuario debe tener upload_files.
  • El fichero > 2 MB se rechaza.
  • Solo se aceptan image/jpeg|png|gif|webp.
Saltar al contenido principal