Skip to content

MelisSmallBusiness

Extension pour équipe éditoriale du CMS — rôles utilisateurs, workflow de validation, versionnage de pages, commentaires et verrouillage de page, plus une médiathèque TinyMCE, le tout exposé dans le back-office React. Package melisplatform/melis-small-business.

Présentation

MelisSmallBusiness ajoute des outils de collaboration pour petites équipes par-dessus l'éditeur de pages du CMS. Il conserve des versions des pages publiées (restaurer ou prévisualiser un état antérieur), pilote un workflow de contenu où un éditeur demande une validation et un relecteur valide ou refuse, attache des commentaires aux pages, empêche deux utilisateurs d'éditer la même page simultanément via un verrou de page, gère un outil de rôles utilisateurs dédié et fournit une médiathèque basée sur TinyMCE (MoxieManager). La logique métier reste côté serveur (services Laminas, événements de l'éditeur CMS) ; en v6 toute la surface visible par l'utilisateur est un ensemble de bricks React et de contributions modulaires.

Activation

C'est un module Laminas standard. Ajoutez-le à config/melis.module.load.php :

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

Il dépend de melis-core, melis-engine, melis-front et melis-cms, et ses tables sont créées via dbdeploy (extra.dbdeploy = true). Chaque surface React ci-dessous n'apparaît que lorsque le module est actif (découverte des bricks via GET /melis/react-api/react-modules).

Surfaces React

Dans le back-office React (/melis-react), le module fournit deux bricks et deux contributions modulaires qui n'ont pas de route propre.

SurfaceTypeRoute / hôte
Rôles utilisateurs (smallbusiness)brick full-React native (bascule Nouveau/Ancien)/melis-core/user-roles
Médiathèque (smallbusiness-medialib)brick iframe (MoxieManager)/melis-cms/media-library
Modale workflowmodale partagée (window.__melisWorkflowModal)rendue par News / Blog / éditeur de page CMS / Newsletter + widget de dashboard
Versionnage / Commentaires / Verrouonglets + bandeau dans l'éditeur de page CMScontribués au nœud de capacité meliscms_page
Rôle dans Utilisateurscolonne/filtre/sélecteur Rôleoutil Utilisateurs hôte, conditionné par useModuleActive('MelisSmallBusiness')

public/ui-react/brick.manifest.json déclare les deux bricks ; ui-react/src/brick.tsx les enregistre et publie la modale workflow comme variable globale de la fenêtre afin que les autres bricks puissent rendre une seule implémentation partagée.

Outil Rôles utilisateurs

Où : barre latérale → MelisCore → User Roles (/melis-core/user-roles).

Un rôle est un profil de droits nommé, stocké une seule fois (melis_core_user_role) et affecté à plusieurs utilisateurs. La liste affiche chaque rôle avec des cartes KPI (Rôles / Affectés), une recherche, un gestionnaire de colonnes, un export et une bascule Nouveau / Ancien (Ancien = l'outil classique dans une iframe). Chaque ligne (ID, Nom, Créé le, Nombre d'utilisateurs) propose des actions éditer/supprimer ; un rôle affecté à des utilisateurs ne peut pas être supprimé.

Liste des rôles dans le back-office React

L'édition d'un rôle ouvre un sous-onglet avec un champ Nom du rôle et un arbre des Droits d'accès qui reflète l'arbre des droits des Utilisateurs (OUTILS groupés par section, List/Create/Edit/Delete/Export par outil, plus les sections Pages et Plugins de dashboard). Enregistrer persiste le nom et le XML urole_rights.

Éditeur de rôle et son arbre de droits

WARNING

Écrire le XML des droits d'un rôle requiert un administrateur de la plateforme (usr_admin) ; un non-administrateur qui édite un rôle obtient un 403 sur l'écriture des droits. Cela bloque une voie d'escalade de privilèges (forger un rôle tous droits, puis se l'affecter). Le nom du rôle peut être modifié par toute personne disposant du droit edit de l'outil.

Rôle dans l'outil Utilisateurs

Lorsque le module est actif, l'outil Utilisateurs de MelisCore gagne une colonne + un filtre Rôle dans la liste et un sélecteur Rôle dans le formulaire utilisateur (aux côtés de Statut et Droits). Le menu déroulant est alimenté par GET /melis/react-api/roles (la liste de sélection de MelisCore) ; à l'enregistrement, un listener réinjecte les capacités du rôle afin qu'elles ne soient pas perdues.

Formulaire utilisateur avec le sélecteur Rôle

Médiathèque

Où : barre latérale → MelisCms → Media library (/melis-cms/media-library).

Le navigateur de fichiers avancé TinyMCE / MoxieManager : dossiers à gauche, fichiers à droite (nom, taille, type, date), avec Créer, Téléverser, vue liste/grille, Trier, Filtrer et les raccourcis Favoris/Historique/Téléversés. La page React est une fine enveloppe qui rend une iframe pleine page vers le moxiemanager historique (/melis/MelisSmallBusiness/js/tinyMCE/moxiemanager/index.php?lang=xx), si bien que le comportement est identique à l'outil classique — pas de react-api propre.

Médiathèque — navigateur MoxieManager dans un onglet React

Workflow (validation de page)

Le workflow permet à un éditeur de demander une validation et à un validateur de répondre. La même modale s'ouvre depuis l'éditeur de page CMS (bouton Workflow), les éditeurs News et Blog, et le widget de dashboard. Elle est générique sur le type d'élément — PAGE, NEWS, BLOG.

Sous Demander une validation, choisissez un Rôle pour notifier toutes les personnes ayant ce rôle, ou « 1 personne seulement » pour révéler un menu déroulant Utilisateur et cibler une seule personne, puis Envoyer la demande.

Modale workflow — demander à une seule personne

L'Historique de la modale liste chaque demande et réponse (Date, Statut, À/Rôle, De, Action). Le destinataire d'une demande ouverte obtient des boutons Valider / Refuser et peut joindre une note.

Modale workflow — historique avec Valider/Refuser

Le Dashboard du back-office affiche un widget Workflow listant les demandes, réparties entre Demandes des utilisateurs / Mes demandes avec des sous-onglets PAGE / NEWS ; chaque ligne montre une pastille de statut (VALIDATED / REFUSED / Demand) et propose des actions en ligne de validation (✓) / refus (✗) et de prévisualisation sur les demandes qui vous sont adressées.

Widget Workflow du dashboard

Versionnage & Commentaires (éditeur de page CMS)

Ouvrir une page dans l'éditeur CMS ajoute deux onglets SmallBusiness après les onglets natifs :

  • Versionnage — une liste paginée des instantanés de la page (N°, Nom, Modifié le, Par) avec, par ligne, Visualiser / Restaurer / Renommer. Un instantané est pris à chaque publication.

    Éditeur de page — onglet Versionnage

  • Commentaires — le fil d'activité de la page mêlant commentaires d'utilisateurs et événements de workflow (les plus récents en premier), avec une zone « Ajouter un commentaire ».

    Éditeur de page — onglet Commentaires

Un bandeau de verrou de page + un bouton Déverrouiller apparaissent lorsqu'un autre utilisateur détient le verrou sur la page.

Endpoints react-api

Tous sous /melis/react-api/…, contrat { success, data, error }. Les contrôleurs vivent dans ce module (config/react-api.php + src/Controller/MelisReactApi*Controller.php).

ContrôleurRoutes de baseGarde
MelisReactApiRoleControllerGET /user-roles, /user-roles/stats, /user-roles/:id; POST /user-roles/save; DELETE /user-roles/delete/:idaccès melissb_tool_userrole + capacité (écriture du XML de droits = admin uniquement)
MelisReactApiWorkflowControllerGET /workflow/roles, /workflow/users, /workflow/history; POST /workflow/askauthentification uniquement
MelisReactApiPageVersioningControllerGET /cms-page/versioningauthentification uniquement
MelisReactApiPageCommentsControllerGET /cms-page/comments, /cms-page/timeline; POST /cms-page/comments/saveauthentification uniquement
MelisReactApiPageLockControllerGET /cms-page/lock; POST /cms-page/unlockauthentification uniquement

Les mutations de workflow réutilisent les endpoints historiques éprouvés plutôt que react-api : GET /melis/MelisSmallBusiness/MelisWorkflow/saveWorkflowActions (valider / refuser) et POST /melis/MelisSmallBusiness/MelisWorkflow/addWorkflowComments (ajouter une note). Le texte des commentaires est assaini par HTMLPurifier à l'enregistrement.

Capacités

config/react.capabilities.php contribue le bouton et les onglets de l'éditeur de page sous la clé partagée meliscms_page détenue par MelisCms (fusionnées, de sorte que MelisCms n'a pas besoin de connaître SB) :

TypeCléLibellé
actionworkflowBouton Workflow
actionunlockBouton Déverrouiller
tabmelissb_page_versioningOnglet Versionnage
tabmelissb_page_commentsOnglet Commentaires

CmsPage.tsx filtre ces onglets / masque ces boutons via useCaps('meliscms_page').can(cap). L'outil Rôles lui-même est référencé sous melissb_tool_userrole et la médiathèque sous melissb_medialib.

Tables de base de données

Créées par install/dbdeploy/126618_melis_sb_install.sql.

TableRôle
melis_sb_page_versioningCopies archivées des pages publiées (alimente l'onglet Versionnage).
melis_sb_workflowEnregistrements de workflow par élément.
melis_sb_workflow_eventsÉvénements de workflow (demande / validation / refus).
melis_sb_page_commentCommentaires attachés à une page (type de commentaire 1 = PAGE, 2 = WORKFLOW).
melis_sb_page_comment_typeTypes de commentaires.
melis_sb_page_lockedVerrous de page actifs (quel utilisateur édite quelle page).
melis_core_user_roleRôles nommés (urole_id, urole_name, urole_creation_date, XML urole_rights).

Services principaux

Alias de serviceRôle
MelisEnginePageLe module surcharge le service de page du moteur par MelisSBPageService ; sur la route de prévisualisation de version, il retourne l'arbre de page versionné depuis melis_sb_page_versioning, sinon il se comporte comme le parent.
MelisSBPageCommentServiceCommentaires de page : getPageComments() / setPageComments().

WARNING

En aliasant MelisEnginePage vers sa propre classe, ce module remplace le service de page du cœur pour toute l'application tant qu'il est activé. À garder en tête dans l'ordre des modules.

Le workflow envoie trois e-mails back-office (app.emails.php) : WF_DEMAND, WF_VALIDATED, WF_REFUSED (balises USER_TO, USER_FROM, TYPE, DETAILS).

Fichiers clés

ÉlémentChemin
Bootstrap du module & listenerssrc/Module.php, src/Listener/
Routes react-api + invokablesconfig/react-api.php
Contrôleurs react-apisrc/Controller/MelisReactApi{Role,Workflow,PageVersioning,PageComments,PageLock}Controller.php
Contribution de capacitésconfig/react.capabilities.php
Service de page (surcharge moteur)src/Service/MelisSBPageService.php
Service de commentairessrc/Service/MelisSBPageCommentService.php
Bricks React (source)ui-react/src/ (brick.tsx, UserRolePage.tsx, MediaLibraryPage.tsx, WorkflowModal.tsx, RolesRightsTree.tsx)
Bundle compilépublic/ui-react/brick.js + brick.manifest.json
SQL d'installationinstall/dbdeploy/126618_melis_sb_install.sql