Skip to content

MelisSmallBusiness

Complemento para equipos editoriales del CMS — roles de usuario, un flujo de trabajo de validación, versionado de páginas, comentarios y bloqueo de páginas, además de una biblioteca multimedia TinyMCE, todo expuesto a través del back-office en React. Paquete melisplatform/melis-small-business.

Propósito

MelisSmallBusiness añade herramientas de colaboración para equipos pequeños sobre el editor de páginas del CMS. Conserva versiones de las páginas publicadas (restaura o previsualiza un estado anterior), impulsa un flujo de trabajo de contenido en el que un editor solicita la validación y un revisor la valida o la rechaza, adjunta comentarios a las páginas, impide que dos usuarios editen la misma página a la vez mediante un bloqueo de página, gestiona una herramienta personalizada de roles de usuario y ofrece una biblioteca multimedia basada en TinyMCE (MoxieManager). La lógica de negocio permanece en el servidor (servicios Laminas, eventos del editor del CMS); en la v6 toda la superficie orientada al usuario es un conjunto de bricks de React y contribuciones modulares.

Activarlo

Es un módulo estándar de Laminas. Añádelo a config/melis.module.load.php:

php
return [
    // …
    'MelisSmallBusiness',
];

Depende de melis-core, melis-engine, melis-front y melis-cms, y sus tablas se crean mediante dbdeploy (extra.dbdeploy = true). Cada superficie React que se describe a continuación aparece solo cuando el módulo está activo (descubrimiento de bricks vía GET /melis/react-api/react-modules).

Superficies React

En el back-office en React (/melis-react) el módulo aporta dos bricks y dos contribuciones modulares que no tienen ruta propia.

SuperficieTipoRuta / host
User Roles (smallbusiness)React nativo completo (conmutador New/Old)/melis-core/user-roles
Media library (smallbusiness-medialib)brick iframe (MoxieManager)/melis-cms/media-library
Modal de flujo de trabajomodal compartido (window.__melisWorkflowModal)renderizado por el editor de páginas de News / Blog / CMS / Newsletter + widget del panel
Versionado / Comentarios / Bloqueopestañas + banner en el editor de páginas del CMScontribuido al nodo de capacidad meliscms_page
Rol en Usuarioscolumna/filtro/selector de Rolherramienta de Usuarios host, condicionada por useModuleActive('MelisSmallBusiness')

public/ui-react/brick.manifest.json declara ambos bricks; ui-react/src/brick.tsx los registra y publica el modal de flujo de trabajo como una variable global de window para que otros bricks puedan renderizar una única implementación compartida.

Herramienta de roles de usuario

Dónde: barra lateral → MelisCore → User Roles (/melis-core/user-roles).

Un rol es un perfil de derechos con nombre almacenado una sola vez (melis_core_user_role) y asignado a muchos usuarios. La lista muestra todos los roles con tarjetas KPI (Roles / Asignados), búsqueda, un gestor de columnas, exportación y un conmutador New / Old (Old = la herramienta clásica en un iframe). Cada fila (ID, Nombre, Creado, Número de usuarios) dispone de acciones de edición/eliminación; un rol asignado a usuarios no puede eliminarse.

Lista de roles en el back-office React

Al editar un rol se abre una subpestaña con un campo Role name y un árbol de Access rights que refleja el árbol de derechos de Usuarios (TOOLS agrupados por sección, con List/Create/Edit/Delete/Export por herramienta, además de las secciones Pages y Dashboard-plugins). Save persiste el nombre y el XML de urole_rights.

Editor de roles y su árbol de derechos

WARNING

Escribir el XML de derechos de un rol requiere un administrador de la plataforma (usr_admin); un usuario no administrador que edite un rol recibe un 403 al escribir los derechos. Esto bloquea una vía de escalada de privilegios (crear un rol con todos los derechos y luego autoasignárselo). El nombre del rol puede cambiarlo cualquiera que tenga el derecho edit de la herramienta.

Rol en la herramienta de Usuarios

Cuando el módulo está activo, la herramienta Users de MelisCore obtiene una columna + filtro Role en la lista y un selector Role en el formulario de usuario (junto a Status y Rights). El desplegable se alimenta de GET /melis/react-api/roles (la lista de selección de MelisCore); al guardar, un listener reinyecta las capacidades del rol para que no se pierdan.

Formulario de usuario con el selector de Rol

Biblioteca multimedia

Dónde: barra lateral → MelisCms → Media library (/melis-cms/media-library).

El navegador de archivos avanzado de TinyMCE / MoxieManager: carpetas a la izquierda, archivos a la derecha (nombre, tamaño, tipo, fecha), con Create, Upload, vista de lista/cuadrícula, Sort, Filter y accesos directos Favorites/History/ Uploaded. La página React es un envoltorio ligero que renderiza un iframe a pantalla completa hacia el moxiemanager heredado (/melis/MelisSmallBusiness/js/tinyMCE/moxiemanager/index.php?lang=xx), por lo que su comportamiento es idéntico al de la herramienta clásica — sin react-api propio.

Biblioteca multimedia — navegador MoxieManager en una pestaña React

Flujo de trabajo (validación de páginas)

El flujo de trabajo permite que un editor solicite la validación y que un validador responda. El mismo modal se abre desde el editor de páginas del CMS (botón Workflow), los editores de News y Blog, y el widget del panel. Es genérico respecto al tipo de elemento — PAGE, NEWS, BLOG.

En Ask for validation, elige un Role para notificar a todos los que tengan ese rol, o "1 person only" para mostrar un desplegable User y dirigirte a una única persona, y luego Send request.

Modal de flujo de trabajo — solicitar a una sola persona

El History del modal enumera cada solicitud y respuesta (Date, Status, To/Role, From, Action). Un destinatario de una solicitud abierta obtiene los botones Validate / Refuse y puede adjuntar una nota.

Modal de flujo de trabajo — historial con Validate/Refuse

El panel del back-office muestra un widget Workflow que enumera las solicitudes, dividido en Users' demands / My demands con subpestañas PAGE / NEWS; cada fila muestra una etiqueta de estado (VALIDATED / REFUSED / Demand) y ofrece acciones en línea de validar (✓) / rechazar (✗) y previsualizar sobre las solicitudes dirigidas a ti.

Widget Workflow del panel

Versionado y comentarios (editor de páginas del CMS)

Al abrir una página en el editor del CMS se añaden dos pestañas de SmallBusiness tras las nativas:

  • Versioning — una lista paginada de las instantáneas de la página (No., Name, Modified on, By) con View / Restore / Rename por fila. Se toma una instantánea en cada publicación.

    Editor de páginas — pestaña Versioning

  • Comments — la línea de tiempo de actividad de la página que combina comentarios de usuarios y eventos del flujo de trabajo (los más recientes primero), con un cuadro "Add a comment".

    Editor de páginas — pestaña Comments

Aparecen un banner de bloqueo de página + un botón Unlock cuando otro usuario mantiene el bloqueo sobre la página.

Endpoints react-api

Todos bajo /melis/react-api/…, contrato { success, data, error }. Los controladores residen en este módulo (config/react-api.php + src/Controller/MelisReactApi*Controller.php).

ControladorRutas baseGuarda
MelisReactApiRoleControllerGET /user-roles, /user-roles/stats, /user-roles/:id; POST /user-roles/save; DELETE /user-roles/delete/:idacceso a melissb_tool_userrole + capacidad (escritura del XML de derechos = solo administrador)
MelisReactApiWorkflowControllerGET /workflow/roles, /workflow/users, /workflow/history; POST /workflow/asksolo autenticación
MelisReactApiPageVersioningControllerGET /cms-page/versioningsolo autenticación
MelisReactApiPageCommentsControllerGET /cms-page/comments, /cms-page/timeline; POST /cms-page/comments/savesolo autenticación
MelisReactApiPageLockControllerGET /cms-page/lock; POST /cms-page/unlocksolo autenticación

Las mutaciones del flujo de trabajo reutilizan los endpoints heredados ya probados en lugar de react-api: GET /melis/MelisSmallBusiness/MelisWorkflow/saveWorkflowActions (validar / rechazar) y POST /melis/MelisSmallBusiness/MelisWorkflow/addWorkflowComments (añadir una nota). El texto del comentario se sanea con HTMLPurifier al guardar.

Capacidades

config/react.capabilities.php contribuye el botón + las pestañas del editor de páginas bajo la clave compartida meliscms_page propiedad de MelisCms (fusionada, de modo que MelisCms no necesita conocer SB):

TipoClaveEtiqueta
actionworkflowBotón Workflow
actionunlockBotón Unlock
tabmelissb_page_versioningPestaña Versioning
tabmelissb_page_commentsPestaña Comments

CmsPage.tsx filtra esas pestañas / oculta esos botones mediante useCaps('meliscms_page').can(cap). La propia herramienta de Roles se identifica con melissb_tool_userrole y la biblioteca multimedia con melissb_medialib.

Tablas de la base de datos

Creadas por install/dbdeploy/126618_melis_sb_install.sql.

TablaFunción
melis_sb_page_versioningCopias archivadas de las páginas publicadas (respalda la pestaña Versioning).
melis_sb_workflowRegistros del flujo de trabajo por elemento.
melis_sb_workflow_eventsEventos del flujo de trabajo (solicitar / validar / rechazar).
melis_sb_page_commentComentarios adjuntos a una página (tipo de comentario 1 = PAGE, 2 = WORKFLOW).
melis_sb_page_comment_typeTipos de comentario.
melis_sb_page_lockedBloqueos de página activos (qué usuario edita qué página).
melis_core_user_roleRoles con nombre (urole_id, urole_name, urole_creation_date, XML de urole_rights).

Servicios clave

Alias del servicioFunción
MelisEnginePageEl módulo sobrescribe el servicio de páginas del motor con MelisSBPageService; en la ruta de previsualización de versiones devuelve el árbol versionado de melis_sb_page_versioning, en caso contrario se comporta como el padre.
MelisSBPageCommentServiceComentarios de página: getPageComments() / setPageComments().

WARNING

Al asignar el alias MelisEnginePage a su propia clase, este módulo reemplaza el servicio de páginas del núcleo para toda la aplicación mientras está activado. Tenlo en cuenta al ordenar los módulos.

El flujo de trabajo envía tres correos electrónicos del back-office (app.emails.php): WF_DEMAND, WF_VALIDATED, WF_REFUSED (etiquetas USER_TO, USER_FROM, TYPE, DETAILS).

Archivos clave

AspectoRuta
Arranque del módulo y listenerssrc/Module.php, src/Listener/
Rutas react-api + invokablesconfig/react-api.php
Controladores react-apisrc/Controller/MelisReactApi{Role,Workflow,PageVersioning,PageComments,PageLock}Controller.php
Contribución de capacidadesconfig/react.capabilities.php
Servicio de páginas (sobrescritura del motor)src/Service/MelisSBPageService.php
Servicio de comentariossrc/Service/MelisSBPageCommentService.php
Bricks React (fuente)ui-react/src/ (brick.tsx, UserRolePage.tsx, MediaLibraryPage.tsx, WorkflowModal.tsx, RolesRightsTree.tsx)
Bundle compiladopublic/ui-react/brick.js + brick.manifest.json
SQL de instalacióninstall/dbdeploy/126618_melis_sb_install.sql