cms-server
Module isotope-cms (Spring Boot/Kotlin)​
Cette brique fournit :
- Modèles d’entités CMS (
CmsEntityModel) et déclinaisons :Page,Form,ArticleModel+Articleet résultats de champs. - API d’administration sécurisée (Spring Security, autorités
access_cms_*). - Rendu côté serveur via Freemarker pour pages/articles.
- Système de contributeurs (injection de variables dans les templates).
Architecture et composants clés​
- Configuration Spring :
IsotopeCmsConfigurationdéclare les beans (services/validators) et chargeapplication-isotope-cms.properties. - Propriétés :
CmsProperties(langue par défaut, domaine, chemin CSS, listes de champs activés, etc.) etCmsConfigurationControllerpour exposer un light-bean au front. - Entités et JPA :
CmsEntityModel(tableis_cms_entity_model) : champs communs, contributeurs associés (is_cms_contributor).- Pages :
Page,PageUrl(tablesis_cms_page,is_cms_page_url). - Formulaires :
Form,FormField,FormFieldAttribute, résultatsFormResult,FormFieldResult. - Articles :
ArticleModel,ArticleModelField,ArticleModelFieldAttribute,Article,ArticleFieldResult.
- Templates Freemarker :
src/main/resources/templates(pages, forms, articles) surchargeables par projet. - View Engine :
ViewEngineServiceImpl(non listé ici) pour le rendu de contenu (pages/articles) via Freemarker.
Schéma d’architecture (Pages / Articles / Forms / Inputs)​
Endpoints principaux​
- Pages (
/api/admin/cms/pages, autoritéaccess_cms_page) :- GET liste paginée avec filtres (search, statut de publication, catégorie)
- GET
/{id}, POST, PUT/{id}, DELETE/{id}
- Formulaires (
/api/admin/cms/forms, autoritéaccess_cms_forms) :- CRUD formulaire + CRUD champs (
/forms/{id}/fields) - Rendu public des soumissions :
/api/public/forms-results/{shortcut}(POST) - BO résultats :
/api/admin/cms/forms-results(liste, suppression, export CSV)
- CRUD formulaire + CRUD champs (
- Articles et modèles (
/api/admin/cms/articles*, autoritésaccess_cms_articles_modeletaccess_cms_articles) :- CRUD
articles-model, CRUD champs de modèle - CRUD
articles, preview rendu publicÂ/api/admin/cms/articles/{shortcut}/view
- CRUD
- CSS (
/api/admin/css, autoritéaccess_css) : CRUD + stockage FS viaStorageCssServiceImpl. - Config CMS :
/api/admin/cms/configretourneCmsPropertiesLightBean. - Rendu HTML côté serveur :
- Public :
GET /view/{shortcut} - BO sécurisé :
GET /secured-view/{shortcut}(nécessiteaccess_cms_page)
- Public :
Sécurité​
- Basée sur Spring Security/Authorities (ex.
access_cms_page,access_cms_forms, etc.). - Menu et fonctions disponibles dans
docs/data.sqletdocs/menu.sql(exemples d’initialisation).
Base de données​
- Modèle MySQL dans
docs/mysql.sql(tables CMS + contributeurs). - Scripts additionnels
docs/scripts/3.4.4.sql(ex. colonnes mail soumission formulaire).
Propriétés (application-isotope-cms.properties)​
Extraits gérés par CmsProperties :
isotope.cms.default-languageisotope.cms.domain-urlisotope.cms.css-upload-pathisotope.cms.days-before-result-form-deletionisotope.cms.enabled-article-field-listisotope.cms.enabled-form-field-listisotope.cms.article-number-step-toleranceisotope.cms.enable-contributorsisotope.cms.use-native-requiredisotope.cms.mail-from
Rendu et templating​
ViewEngineControllerfournit deux endpoints de rendu.ViewEngineServiceassemble le modèle : entités + variables (ex. contributeurs) + ressources médias (isotope-media) + messages i18n.
Rendu ordonné récursif (ViewEngineServiceImpl)​
Principe : à partir d’une Page (shortcut, locale), le service rend le contenu en remplaçant dans l’ordre d’apparition les inclusions dynamiques (Formulaires, Articles) par leur HTML rendu, puis applique le template de page. Le processus est récursif et ordonné pour garantir un DOM final cohérent.
Étapes clés (simplifiées) :
- Charger la Page par
shortcutet initialiser le modèle (variables Freemarker,serverUrl, i18n, contributeurs, …). - Détecter dans
contentles marqueurs viaCmsRegexPatterns :@form(<shortcut>)@article(<shortcut>)
- Pour chaque inclusion détectée, dans l’ordre d’apparition :
- Récupérer l’entité (Form / Article) et ses champs.
- Résoudre les valeurs par locale (labels, listes de valeurs via
ValueListService, médias viaMediaProperties). - Appliquer les contributeurs si activés.
- Rendre le fragment avec Freemarker (templates
forms/*.ftlouarticles/*.ftl). - Remplacer le marqueur dans le
contentparent par le HTML rendu.
- Une fois toutes les inclusions rendues et remplacées, appliquer le template
pages/page.ftlpour le rendu final.
Schéma fonctionnel (flow) :
Schéma séquentiel (rendu ordonné) :
Contributeurs​
- Interface :
IContributor(méthodecontribute(model)+ metagetName/getDescription). - Exemples :
TodayContributor,UserAgentContributor,FrenchRegionsContributor. - Affectation par entité via
/api/admin/cms/contributors/{id}.
Validation​
- Nombreux validateurs pour assurer cohérence des modèles et données :
FormValidator,FormFieldValidator,ArticleModelValidator,ArticleModelFieldValidator,ArticleValidator,PageValidator,FormResultValidator.
Jobs​
ClearFormResults : purge des résultats de formulaires selonisotope.cms.days-before-result-form-deletion. Planification via propriétés (voir README cms).
Points d’extension​
- Surcharger les templates Freemarker dans votre application.
- Ajouter des contributeurs via Spring (@Component) : ils seront détectés automatiquement.
- Restreindre/ouvrir les types de champs avec
enabled-*.