ODSLocal Contributor Profiles
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).
- Subir
odslocal-contributor-profiles/awp-content/plugins/. - Activar. El plugin crea automáticamente 6 páginas (ver sección 3) con sus shortcodes.
- Visitar Ajustes → Contributor Profiles y configurar: logo, nombre de la organización, dirección, firma y plantilla de la carta.
- 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/ |
|
Perfil público (recibe ?user=ID). |
/mis-contribuciones/ |
|
Panel personal del colaborador logueado. |
/verificar-colaborador/ |
|
Landing al escanear un QR (recibe ?token=…). |
/editar-perfil/ |
|
Formulario AJAX de edición de perfil. |
/odslocal-acceso/ |
|
Login personalizado con branding. |
/odslocal-hub/ |
|
Dashboard con pestañas tras iniciar sesión. |
4. Shortcodes
| Shortcode | Atributos | Quién lo ve |
|---|---|---|
|
(usa ?user=ID en la URL) |
Público si el perfil es público. |
|
— | El propio colaborador. |
|
— | Usuario autenticado. |
|
(usa ?token=…) |
Público. Sólo carga datos de perfiles públicos. |
|
— | Visitantes no autenticados. |
|
— | 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:
→ campo «🔒 DNI / NIE».Inicia sesión para editar tu perfil. - 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.
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.Debes iniciar sesión para introducir datos.
- 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
- En Mis contribuciones o en el Hub, el colaborador pulsa «Mi carta».
- Se abre
?odslocal_report=letter&user=IDen una pestaña nueva. - 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_filesoods_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 tantowp/v2/usersde 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 losmsgstry compila conwp 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.