Découvrez les nouveautés de Sulu 2.6, le CMS propulsé avec Symfony

Le CMS Sulu, basé sur le framework Symfony, a récemment été mis à jour en version majeure 2.6.

Cet article présente un tour d'horizon des nouveautés de cette version.

Un nouveau bundle : Reference

Depuis la version 2.6, le bundle est intégré au référentiel central de Sulu. Son objectif est de conserver automatiquement les informations sur l'utilisation des entités dans Sulu, comme l'endroit et la manière dont elles sont utilisées.

Ce bundle permet notamment de visualiser les liens entre les pages et les médias, ce qui est très pratique pour identifier où un média est utilisé sur le site.

Actuellement, le bundle suit l'utilisation des Snippets et des Media.

Les médias et les entités Snippet disposent désormais d'un nouvel onglet "Références" dans leur vue détaillée. Pour éviter de surcharger la barre d'onglets existante, les références et les activités sont regroupées dans l'onglet "Perspectives".

Les références sont présentées dans une table arborescente, permettant aux utilisateurs de naviguer facilement vers l'entité référencée, comme une page par exemple.

Reference Bundle de Sulu

La version 2.6 de Sulu inclut une nouvelle commande de la console qui permet d'analyser initialement votre projet pour les références, ou de les rafraîchir en cas de désynchronisation.

Pour le contexte de l'admin :

bin/adminconsole sulu:reference:refresh

Pour le contexte frontend :

bin/websiteconsole sulu:reference:refresh

Il est à noter que ce comportement peut être adapté sur des bundles personnalisés, la documentation en parle ici.

Intégration OIDC / OpenId

Cette fonctionnalité sera particulièrement utile pour les agences qui gèrent plusieurs instances Sulu.

Avec l'intégration d'OpenID dans l'administration de Sulu, vous pouvez désormais utiliser des fournisseurs d'authentification unique tels que Google Business, Azure AD, AWS Identity ou même un Keycloak auto-hébergé.

Pour activer cette fonctionnalité, vous pouvez utiliser la configuration suivante :

# config/packages/security.yaml
security:
    firewalls:
        # ...
        admin:
            # ...
            access_token:
                token_handler: sulu_security.single_sign_on_token_handler
                token_extractors: sulu_security.single_sign_on_token_extractor

# config/packages/sulu_security.yaml
sulu_security:
    single_sign_on:
        providers:
            'example.org':
                dsn: 'openid://CLIENT_ID:[email protected]/realms/master/.well-known/openid-configuration?no-tls=true' # no-tls = http instead of https
                default_role_key: User

Dans l'exemple précédent, tous les utilisateurs dont l'adresse e-mail se termine par @example.org seront automatiquement redirigés vers le fournisseur OpenID configuré.

Vous pouvez également définir le rôle que ces utilisateurs obtiendront lors de leur première connexion en utilisant les paramètres defaultrolekey.

Cette fonctionnalité est vivement recommandée pour les agences et les entreprises possédant de multiples sites Sulu, car elle permet de centraliser la gestion des utilisateurs via un fournisseur central de Single Sign-On, évitant ainsi la gestion individuelle des utilisateurs pour chaque installation.

Blocs globaux

Les blocs globaux définissent un ensemble de propriétés pouvant être utilisées comme type à l'intérieur d'un bloc ou d'une autre propriété. Cela est pratique lorsque vous souhaitez réutiliser un type de bloc dans plusieurs modèles.

Pour créer un bloc global, vous devez créer un nouveau fichier XML dans le répertoire config/templates/blocks. Voici un exemple de fichier définissant un bloc global nommé "text_block" :

<?xml version="1.0" ?>
<template xmlns="http://schemas.sulu.io/template/template"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.0.xsd">
   <key>text_block</key>
   <meta>
       <title lang="en">Text Block</title>
       <title lang="fr">Bloc texte</title>
   </meta>
   <properties>
       <property name="title" type="text_line" mandatory="true">
           <meta>
               <title lang="en">Title</title>
               <title lang="fr">Titre</title>
           </meta>
       </property>
       <property name="description" type="text_editor">
           <meta>
               <title lang="en">Description</title>
               <title lang="fr">Description</title>
           </meta>
       </property>
   </properties>
</template>

Ce bloc peut être utilisé dans n'importe quel autre modèle en utilisant l'élément <block> ou <property> comme sur l'exemple ci-dessous :

<block name="blocks" default-type="text_block" minOccurs="0">
   <types>
       <!-- en utilisant des blocs globaux et en ne faisant référence qu'au bloc -->
       <type ref="text_block" />

       <!-- définition par défaut d'un type de bloc sans utiliser de blocs globaux -->
       <type name="editor">
           <meta>
               <title lang="en">Editor</title>
               <title lang="fr">Editeur</title>
           </meta>
           <properties>
               <property name="text_editor" type="text_editor">
                   <meta>
                       <title lang="en">Text Editor</title>
                       <title lang="de">Editeur texte</title>
                   </meta>
               </property>
           </properties>
       </type>
   </types>
</block>

Commande de nettoyage PHPCR

La commande PHPCR Cleanup, initialement proposée par mamazu sur GitHub, est spécifiquement conçue pour optimiser le référentiel de contenu de Sulu.

Elle fonctionne en identifiant et en supprimant les propriétés obsolètes qui peuvent subsister dans le référentiel en raison de modifications, de refactoring ou de changements dans les modèles et les types de blocs.

Pour exécuter cette commande, vous pouvez utiliser la commande suivante :

bin/console sulu:document:phpcr-cleanup

Il est important de noter que la commande PHPCR Cleanup est un outil puissant d'optimisation qui doit être utilisé avec précaution. Voici quelques points à prendre en considération :

- Optimisation : La commande identifie et supprime les propriétés obsolètes résultant des modifications apportées aux modèles et aux types de blocs, permettant ainsi de maintenir un référentiel de contenu optimisé et à jour.

- Gestion des risques : Comme la commande supprime des propriétés, il est essentiel de sauvegarder le référentiel avant de l'utiliser pour éviter toute perte de données.

- Temps d'exécution : La commande peut être longue en fonction de l'ampleur des modifications et de la taille du référentiel.

Autres nouveautés

Invalidation par défaut du cache de la zone des snippets

Avant la version 2.6 de Sulu, l'invalidation du cache n'était pas correctement déclenchée lorsque l'extrait utilisé comme extrait par défaut pour une zone était modifié. Cela obligeait souvent les utilisateurs à republier manuellement le site concerné ou à vider complètement le cache. Pour résoudre ce problème, Sulu 2.6 introduit un mécanisme amélioré d'invalidation du cache pour les zones de snippets lorsqu'ils sont modifiés.

De plus, une nouvelle propriété a été ajoutée à la configuration des zones d'extraits. Par défaut, l'invalidation du cache est activée pour toutes les zones de snippets explicitement configurées. Cependant, les zones de snippets générées automatiquement par Sulu ne sont pas invalidées par défaut.

Afficher la commande Debug pour SuluAdmin

La commande View Debug a été ajoutée par le contributeur TheCadien pour améliorer l'expérience de développement dans Sulu.

Cette commande permet de déboguer les vues de l'administration de Sulu.

bin/console sulu:admin:debug-view

PHP 8.2 et Symfony 6.4

Sulu 2.6 est entièrement compatible avec PHP 8.2 et la dernière version LTS de Symfony, la 6.4.

Pour conclure

Cette version 2.6 de Sulu a intégré plus d'une centaine de pull requests provenant de 22 contributeurs différents.

Un grand merci à tous ces contributeurs pour leur contribution visant à améliorer ce CMS !

Le bundle Reference est une amélioration bienvenue qui fournit aux utilisateurs de ce CMS des informations utiles.

Un article est en cours de préparation pour présenter ce CMS, mais je n'ai pas de délai précis quant à sa finalisation.