Aller au contenu principal
Version: Current 🚀

cms-server

Module isotope-cms (Spring Boot/Kotlin)​

Cette brique fournit :

  • Modèles d’entitĂ©s CMS (CmsEntityModel) et dĂ©clinaisons : Page, Form, ArticleModel + Article et 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 : IsotopeCmsConfiguration dĂ©clare les beans (services/validators) et charge application-isotope-cms.properties.
  • PropriĂ©tĂ©s : CmsProperties (langue par dĂ©faut, domaine, chemin CSS, listes de champs activĂ©s, etc.) et CmsConfigurationController pour exposer un light-bean au front.
  • EntitĂ©s et JPA :
    • CmsEntityModel (table is_cms_entity_model) : champs communs, contributeurs associĂ©s (is_cms_contributor).
    • Pages : Page, PageUrl (tables is_cms_page, is_cms_page_url).
    • Formulaires : Form, FormField, FormFieldAttribute, rĂ©sultats FormResult, 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)
  • Articles et modèles (/api/admin/cms/articles*, autoritĂ©s access_cms_articles_model et access_cms_articles) :
    • CRUD articles-model, CRUD champs de modèle
    • CRUD articles, preview rendu public /api/admin/cms/articles/{shortcut}/view
  • CSS (/api/admin/css, autoritĂ© access_css) : CRUD + stockage FS via StorageCssServiceImpl.
  • Config CMS : /api/admin/cms/config retourne CmsPropertiesLightBean.
  • Rendu HTML cĂ´tĂ© serveur :
    • Public : GET /view/{shortcut}
    • BO sĂ©curisé : GET /secured-view/{shortcut} (nĂ©cessite access_cms_page)

Sécurité​

  • BasĂ©e sur Spring Security/Authorities (ex. access_cms_page, access_cms_forms, etc.).
  • Menu et fonctions disponibles dans docs/data.sql et docs/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-language
  • isotope.cms.domain-url
  • isotope.cms.css-upload-path
  • isotope.cms.days-before-result-form-deletion
  • isotope.cms.enabled-article-field-list
  • isotope.cms.enabled-form-field-list
  • isotope.cms.article-number-step-tolerance
  • isotope.cms.enable-contributors
  • isotope.cms.use-native-required
  • isotope.cms.mail-from

Rendu et templating​

  • ViewEngineController fournit deux endpoints de rendu.
  • ViewEngineService assemble 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 shortcut et initialiser le modèle (variables Freemarker, serverUrl, i18n, contributeurs, …).
  • DĂ©tecter dans content les marqueurs via CmsRegexPatterns :
    • @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 via MediaProperties).
    • Appliquer les contributeurs si activĂ©s.
    • Rendre le fragment avec Freemarker (templates forms/*.ftl ou articles/*.ftl).
    • Remplacer le marqueur dans le content parent par le HTML rendu.
  • Une fois toutes les inclusions rendues et remplacĂ©es, appliquer le template pages/page.ftl pour le rendu final.

Schéma fonctionnel (flow) :

Schéma séquentiel (rendu ordonné) :

Contributeurs​

  • Interface : IContributor (mĂ©thode contribute(model) + meta getName/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 selon isotope.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-*.