Skip to content

MelisSmallBusiness

Estensione per il team editoriale del CMS — ruoli utente, un workflow di validazione, il versionamento delle pagine, i commenti e il blocco delle pagine, oltre a una libreria multimediale TinyMCE, esposti tramite il back-office React. Pacchetto melisplatform/melis-small-business.

Scopo

MelisSmallBusiness aggiunge strumenti di collaborazione per piccoli team sopra l'editor di pagine del CMS. Conserva le versioni delle pagine pubblicate (ripristino/anteprima di uno stato precedente), gestisce un workflow dei contenuti in cui un redattore richiede la validazione e un revisore la convalida o la rifiuta, allega commenti alle pagine, impedisce a due utenti di modificare la stessa pagina contemporaneamente tramite un blocco pagina, gestisce uno strumento di ruoli utente personalizzato e include una libreria multimediale basata su TinyMCE (MoxieManager). La logica di business resta lato server (servizi Laminas, eventi dell'editor CMS); in v6 l'intera superficie rivolta all'utente è un insieme di brick React e contributi modulari.

Come attivarlo

Si tratta di un modulo Laminas standard. Aggiungilo a config/melis.module.load.php:

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

Dipende da melis-core, melis-engine, melis-front e melis-cms, e le sue tabelle vengono create tramite dbdeploy (extra.dbdeploy = true). Ciascuna superficie React elencata di seguito compare solo quando il modulo è attivo (individuazione dei brick tramite GET /melis/react-api/react-modules).

Superfici React

Nel back-office React (/melis-react) il modulo fornisce due brick e due contributi modulari privi di una route propria.

SuperficieTipoRoute / host
User Roles (smallbusiness)full-React nativo (interruttore New/Old)/melis-core/user-roles
Media library (smallbusiness-medialib)brick iframe (MoxieManager)/melis-cms/media-library
Modale Workflowmodale condivisa (window.__melisWorkflowModal)renderizzata da News / Blog / editor di pagine CMS / Newsletter + widget della Dashboard
Versionamento / Commenti / Bloccoschede + banner nell'editor di pagine CMScontribuito al nodo di capacità meliscms_page
Ruolo in Userscolonna/filtro/selettore Ruolostrumento host Users, condizionato da useModuleActive('MelisSmallBusiness')

public/ui-react/brick.manifest.json dichiara entrambi i brick; ui-react/src/brick.tsx li registra e pubblica la modale Workflow come variabile globale della window in modo che altri brick possano renderizzare un'unica implementazione condivisa.

Strumento User Roles

Dove: barra laterale → MelisCore → User Roles (/melis-core/user-roles).

Un ruolo è un profilo di diritti denominato, memorizzato una sola volta (melis_core_user_role) e assegnato a molti utenti. L'elenco mostra ogni ruolo con schede KPI (Roles / Assigned), la ricerca, un gestore Columns, l'Export e un interruttore New / Old (Old = lo strumento classico in un iframe). Ogni riga (ID, Name, Created, numero di Users) dispone di azioni di modifica/eliminazione; un ruolo assegnato a degli utenti non può essere eliminato.

Elenco dei ruoli nel back-office React

La modifica di un ruolo apre una sotto-scheda con un campo Role name e un albero Access rights che rispecchia l'albero dei diritti di Users (TOOLS raggruppati per sezione, List/Create/Edit/Delete/Export per ogni strumento, oltre alle sezioni Pages e Dashboard-plugins). Save rende persistenti il nome e l'XML urole_rights.

Editor dei ruoli e il relativo albero dei diritti

WARNING

La scrittura dell'XML dei diritti di un ruolo richiede un amministratore della piattaforma (usr_admin); un non amministratore che modifica un ruolo riceve un 403 sulla scrittura dei diritti. Questo blocca un percorso di escalation dei privilegi (creare un ruolo con tutti i diritti, per poi auto-assegnarselo). Il nome del ruolo può essere modificato da chiunque disponga del diritto edit dello strumento.

Ruolo nello strumento Users

Quando il modulo è attivo, lo strumento Users di MelisCore acquisisce una colonna Role + filtro nell'elenco e un selettore Role nel form utente (accanto a Status e Rights). Il menu a tendina è alimentato da GET /melis/react-api/roles (l'elenco di selezione di MelisCore); al salvataggio, un listener re-inietta le capacità del ruolo in modo che non vadano perse.

Form utente con il selettore Role

Libreria multimediale

Dove: barra laterale → MelisCms → Media library (/melis-cms/media-library).

Il file browser avanzato TinyMCE / MoxieManager: le cartelle a sinistra, i file a destra (nome, dimensione, tipo, data), con Create, Upload, vista a elenco/griglia, Sort, Filter e le scorciatoie Favorites/History/ Uploaded. La pagina React è un sottile wrapper che renderizza un iframe a scheda intera verso il moxiemanager legacy (/melis/MelisSmallBusiness/js/tinyMCE/moxiemanager/index.php?lang=xx), quindi il comportamento è identico a quello dello strumento classico — senza react-api proprie.

Libreria multimediale — browser MoxieManager in una scheda React

Workflow (validazione delle pagine)

Il Workflow consente a un redattore di richiedere la validazione e a un validatore di rispondere. La stessa modale si apre dall'editor di pagine CMS (pulsante Workflow), dagli editor di News e Blog e dal widget della Dashboard. È generica rispetto al tipo di elemento — PAGE, NEWS, BLOG.

In Ask for validation, scegli un Role per notificare tutti coloro che hanno quel ruolo, oppure "1 person only" per rivelare un menu a tendina User e indirizzare una singola persona, quindi Send request.

Modale Workflow — richiesta a una singola persona

La sezione History della modale elenca ogni richiesta e risposta (Date, Status, To/Role, From, Action). Un destinatario di una richiesta aperta ottiene i pulsanti Validate / Refuse e può allegare una nota.

Modale Workflow — cronologia con Validate/Refuse

La Dashboard del back-office mostra un widget Workflow che elenca le richieste, suddiviso in Users' demands / My demands con sotto-schede PAGE / NEWS; ogni riga mostra una pill di stato (VALIDATED / REFUSED / Demand) e offre azioni inline di validazione (✓) / rifiuto (✗) e di anteprima sulle richieste a te indirizzate.

Widget Workflow della Dashboard

Versionamento e Commenti (editor di pagine CMS)

L'apertura di una pagina nell'editor CMS aggiunge due schede SmallBusiness dopo quelle native:

  • Versioning — un elenco paginato delle istantanee della pagina (No., Name, Modified on, By) con View / Restore / Rename per ogni riga. Un'istantanea viene creata a ogni pubblicazione.

    Editor di pagine — scheda Versioning

  • Comments — la timeline delle attività della pagina che mescola i commenti degli utenti e gli eventi di workflow (dal più recente), con una casella "Add a comment".

    Editor di pagine — scheda Comments

Un banner di blocco pagina + un pulsante Unlock compaiono quando un altro utente detiene il blocco sulla pagina.

Endpoint react-api

Tutti sotto /melis/react-api/…, contratto { success, data, error }. I controller risiedono in questo modulo (config/react-api.php + src/Controller/MelisReactApi*Controller.php).

ControllerRoute di baseGuard
MelisReactApiRoleControllerGET /user-roles, /user-roles/stats, /user-roles/:id; POST /user-roles/save; DELETE /user-roles/delete/:idaccesso melissb_tool_userrole + capacità (scrittura XML dei diritti = solo admin)
MelisReactApiWorkflowControllerGET /workflow/roles, /workflow/users, /workflow/history; POST /workflow/asksolo autenticato
MelisReactApiPageVersioningControllerGET /cms-page/versioningsolo autenticato
MelisReactApiPageCommentsControllerGET /cms-page/comments, /cms-page/timeline; POST /cms-page/comments/savesolo autenticato
MelisReactApiPageLockControllerGET /cms-page/lock; POST /cms-page/unlocksolo autenticato

Le mutazioni del Workflow riutilizzano i collaudati endpoint legacy anziché react-api: GET /melis/MelisSmallBusiness/MelisWorkflow/saveWorkflowActions (validate / refuse) e POST /melis/MelisSmallBusiness/MelisWorkflow/addWorkflowComments (aggiunta di una nota). Il testo dei commenti viene sanificato con HTMLPurifier al salvataggio.

Capacità

config/react.capabilities.php contribuisce il pulsante + le schede dell'editor di pagine sotto la chiave condivisa meliscms_page di proprietà di MelisCms (uniti, così MelisCms non deve conoscere SB):

TipoChiaveEtichetta
actionworkflowPulsante Workflow
actionunlockPulsante Unlock
tabmelissb_page_versioningScheda Versioning
tabmelissb_page_commentsScheda Comments

CmsPage.tsx filtra queste schede / nasconde questi pulsanti tramite useCaps('meliscms_page').can(cap). Lo strumento Roles stesso è associato alla chiave melissb_tool_userrole e la Media library a melissb_medialib.

Tabelle del database

Create da install/dbdeploy/126618_melis_sb_install.sql.

TabellaRuolo
melis_sb_page_versioningCopie archiviate delle pagine pubblicate (supporta la scheda Versioning).
melis_sb_workflowRecord di workflow per elemento.
melis_sb_workflow_eventsEventi di workflow (ask / validate / refuse).
melis_sb_page_commentCommenti allegati a una pagina (tipo di commento 1 = PAGE, 2 = WORKFLOW).
melis_sb_page_comment_typeTipi di commento.
melis_sb_page_lockedBlocchi pagina attivi (quale utente sta modificando quale pagina).
melis_core_user_roleRuoli denominati (urole_id, urole_name, urole_creation_date, XML urole_rights).

Servizi chiave

Alias del servizioRuolo
MelisEnginePageIl modulo sovrascrive il servizio di pagina del motore con MelisSBPageService; sulla route di anteprima di versione restituisce l'albero versionato da melis_sb_page_versioning, altrimenti si comporta come il parent.
MelisSBPageCommentServiceCommenti delle pagine: getPageComments() / setPageComments().

WARNING

Assegnando l'alias MelisEnginePage alla propria classe, questo modulo sostituisce il servizio di pagina core per l'intera applicazione mentre è abilitato. Tienilo presente nell'ordinamento dei moduli.

Il workflow invia tre email al back-office (app.emails.php): WF_DEMAND, WF_VALIDATED, WF_REFUSED (tag USER_TO, USER_FROM, TYPE, DETAILS).

File chiave

AspettoPercorso
Bootstrap del modulo e listenersrc/Module.php, src/Listener/
Route react-api + invokableconfig/react-api.php
Controller react-apisrc/Controller/MelisReactApi{Role,Workflow,PageVersioning,PageComments,PageLock}Controller.php
Contributo delle capacitàconfig/react.capabilities.php
Servizio di pagina (override del motore)src/Service/MelisSBPageService.php
Servizio dei commentisrc/Service/MelisSBPageCommentService.php
Brick React (sorgente)ui-react/src/ (brick.tsx, UserRolePage.tsx, MediaLibraryPage.tsx, WorkflowModal.tsx, RolesRightsTree.tsx)
Bundle compilatopublic/ui-react/brick.js + brick.manifest.json
SQL di installazioneinstall/dbdeploy/126618_melis_sb_install.sql