Changelog

Découvrez les dernières évolutions de la plateforme S-PASS Territoires

Correction du blocage de la synchronisation des publications numériques volumineuses

🐛 Correctifs

  • Synchronisation des carnets volumineux : la synchronisation entre la base publication et S-PASS échouait avec une erreur "argument list too long" pour les carnets de plus de 200 pages ; le contenu compressé dépassait la limite système ARG_MAX. Le worker transmet désormais le message via stdin (--pipe) au lieu de le passer en argument CLI.
  • Décodage supprimé en mode pipe : en mode --pipe, RabbitMQ envoie le corps brut du message directement dans stdin ; le décodage base64/gzip intermédiaire a été supprimé car il ne s'appliquait qu'aux arguments CLI.
  • Image de base Docker : l'image de base est désormais tirée depuis le registre OVH Harbor public S-PASS, supprimant la dépendance au registre GitLab.com du projet.

🔒 Sécurité

  • Authentification Docker : le token d'accès au registre est désormais transmis via --password-stdin, évitant son exposition dans les logs CI.

Pagination de l'import et refonte des autorisations

✨ Nouveautés

  • Pagination du dialogue d'import : la fenêtre d'import de carnets liste désormais 20 résultats par page, triés du plus récent au plus ancien, avec des boutons précédent/suivant. Plus besoin d'attendre le chargement de toutes les vignettes lors de la consultation des carnets publics.

🔧 Améliorations

  • Recherche au clavier dans l'import : la touche Entrée déclenche directement la recherche depuis le champ texte du dialogue d'import.
  • Import de carnets plus rapide : la copie du dossier média a été optimisée sur le stockage NFS (transfert via flux), et le déplacement final lors de la sauvegarde est désormais instantané (renommage plutôt que copie + suppression).
  • Refonte de la matrice d'autorisations sur les carnets : les règles d'édition, de partage, de lecture-pour-édition et de suppression ont été harmonisées et clarifiées.
    • Édition, partage, lecture-pour-édition : un administrateur peut tout faire ; le propriétaire peut intervenir sur son carnet quel que soit le niveau de partage ; un animateur ou expert peut intervenir sur un carnet de son groupe dont le niveau est au moins « groupe » ; un contributeur non-propriétaire est refusé.
    • Suppression : seul le propriétaire peut supprimer son carnet.
  • Support des emojis dans les blocs texte : la connexion à la base de données accepte désormais les caractères 4 octets (utf8mb4), ce qui autorise l'insertion d'emojis dans les blocs texte sans erreur d'enregistrement.

🐛 Correctifs

  • Boucle de réécriture sur favicon.ico et robots.txt : correction de la boucle de redirection nginx qui polluait les logs et provoquait des erreurs 499.

Robustesse de l'API et limites d'exécution PHP

🔧 Améliorations

  • Limites d'exécution PHP ajustées : ajout d'une limite globale de temps d'exécution dans la configuration PHP, et relèvement spécifique pour les requêtes longues (copie de carnets, uploads volumineux) afin d'éviter les coupures prématurées.

🐛 Correctifs

  • Gestion d'erreurs de l'API : remplacement d'une exception incorrecte qui masquait la véritable cause d'un échec, et ajout d'un message d'erreur explicite lorsque le dossier source d'une copie est invalide.

Correction du plantage lié au blocage de Matomo

🐛 Correctifs

  • Compatibilité avec les bloqueurs de pub : la publication numérique ne plante plus lorsque le script Piwik (Matomo) est bloqué par un bloqueur de publicité ou une extension de confidentialité. Les appels au traceur sont désormais protégés par des vérifications avant exécution.

Correction de l'affichage des champs de date partielle dans les formulaires d'édition

🐛 Correctifs

  • Champs de date partielle dans les formulaires de contribution : correction d'une régression introduite lors de la mise à jour des champs d'aide à la saisie — les champs de date partielle ne s'affichaient plus lors de l'édition de ressources.

Refactorisation interne et sécurisation des variables d'environnement

🔒 Sécurité

  • Suppression des credentials hardcodés : les identifiants sensibles (MariaDB, reCAPTCHA) ne sont plus intégrés en dur dans le code et sont désormais gérés via un fichier .env dédié.

⚠️ Breaking changes

  • Suppression de l'endpoint getGroupeConfigAction : cet endpoint précédemment déprécié a été retiré. Tout consommateur externe utilisant encore cette route doit mettre à jour son intégration.

Suppression du champ has_convention et refactorisation du traitement des termes

🔧 Améliorations

  • Restriction de champ consolidé pour les groupes : la modification du statut consolidé sur les groupes est désormais réservée aux administrateurs.
  • Pagination des ressources sur les portails de groupe : le nombre de ressources affichées par page est désormais fixé à 48 éléments.

🗑️ Suppressions

  • Retrait du champ has_convention : le champ has_convention est retiré des entités Groupe et Organisme. Toute intégration externe l'utilisant directement doit être mise à jour.

Réorganisation du bloc meta pour la génération des descriptions

🔧 Améliorations

  • Structuration des templates meta SEO : regroupement de l'ensemble des éléments liés aux meta SEO dans leur bloc dédié pour améliorer la lisibilité et la maintenabilité des templates.

Renforcement de la détection des spams, amélioration du SEO et de l'expérience de saisie

🔧 Améliorations

  • Détection des spams : enrichissement de la liste des termes sensibles pour améliorer le filtrage des contenus indésirables issus du formulaire de contact.
  • Meta SEO : le champ abstract est désormais priorisé pour la description, limité à 200 caractères avec ellipse conditionnelle si le contenu est tronqué.
  • Interface du mode enrichi : ajout d'une option de ratio « Original » pour les images dans le bloc juxtapose, et messages d'aide contextuels pour les champs de date dans le formulaire contributif de type image.

Ajout d'un endpoint public pour explorer le réseau des organismes

✨ Nouveautés

  • Endpoint réseau des organismes : le nouvel endpoint public /api/organismes/{id}/reseau.json permet d'explorer les relations entre organismes en identifiant ceux qui partagent des groupes communs (nombre de groupes partagés et liste détaillée). Aucune authentification requise.

🔧 Améliorations

  • Endpoint GeoJSON organismes : l'identifiant des organismes est désormais inclus dans les propriétés GeoJSON, améliorant l'interopérabilité des données cartographiques.