Dataflow et Ibexa Dataflow 7 : dates en UTC, suivi des jobs enrichi, sécurité renforcée

Depuis notre dernier article sur Dataflow (logs externalisés et nettoyage de l'historique), Ibexa Dataflow est passé de la version 6.1.2 à la 7.0.0. Suivi des jobs plus complet, comparaison des attributs produit d'Ibexa Commerce, correctifs de sécurité et, avec la 7.0, des dates stockées en UTC : voici le détail.

Un suivi des jobs plus complet

  • Supprimer un job en attente directement depuis l'interface (6.2).
  • Télécharger le fichier de log d'un job (6.4), et meilleure gestion des exceptions dans la sortie de log diffusée en continu (6.3).
  • Filtre par type, compteur sur le tableau de bord, temps moyen d'exécution sur l'onglet des dataflows planifiés et affichage des options amélioré (6.5).
  • Fenêtre de job avec onglets « Information » et « Log » (6.6). Le paramètre ?job=<id> ouvre directement le détail d'un job, par exemple depuis une notification Ibexa.
  • Des fenêtres de formulaire plus agréables : focus sur le premier champ, champs et erreurs réinitialisés à la fermeture, bouton d'envoi désactivé pendant le traitement (6.6).

Ibexa Commerce : comparaison des attributs produit

Le filtre NotModifiedProductFilter compare désormais les attributs produit, type par type (6.7). Il ne saute plus la mise à jour d'un produit dont un attribut a changé ou a été vidé, par exemple une case à cocher passée à null .

  • Deux interfaces permettent de personnaliser la comparaison : ProductAttributesComparatorInterface et ProductAttributeValueComparatorInterface .
  • Un comparateur pour le champ ibexa_seo (6.5) et la correction du BillingAddressComparator (6.1.2).

Sécurité : passez au moins en 6.5.1

La version 6.5.1 corrige quatre points :

  • un contrôle de permission manquant lors de la modification d'un dataflow planifié (contrôle d'accès défaillant) ;
  • une faille XSS dans la sortie de log diffusée en continu ;
  • l'activation et la désactivation d'un dataflow planifié exigent maintenant une requête POST ;
  • une erreur 404, et non plus 500, lorsqu'un identifiant de job ou de dataflow planifié n'existe pas.

Version 7 : les dates passent en UTC

C'est un changement non rétrocompatible. Les dates des dataflows planifiés et des jobs sont désormais lues et enregistrées en UTC, quel que soit le fuseau horaire de PHP, et affichées dans le fuseau de l'utilisateur. Les formulaires qui dépendaient à la fois du fuseau de PHP et de celui de l'utilisateur sont corrigés.

  • Ibexa Dataflow 7 demande Dataflow 7 et PHP 8.4.
  • Les types de formulaire UserTimezoneAwareDateTimeType et UserTimezoneAwareDateTimeTransformer disparaissent : les formulaires utilisent le sélecteur de date et d'heure d'Ibexa.
  • Une nouvelle commande convertit en UTC les dates saisies dans les formulaires.

Mettre à jour vos dates existantes

Sauvegardez vos tables avant de commencer : les commandes de conversion ne sont pas idempotentes, lancez chacune une seule fois. Lancez-les d'abord avec --dry-run , puis sans cette option quand le résultat vous convient, et déployez la nouvelle version.

Les dates écrites par PHP (start_time et end_time ) étaient stockées dans le fuseau de PHP. Celles saisies dans les formulaires (next et requested_date ) dépendent de la version du bundle qui a créé la ligne.

1. Les dates écrites par PHP. Elles sont toujours converties par la commande du bundle Dataflow :

   

php bin/console code-rhapsodie:dataflow:convert-dates-to-utc [--timezone=Europe/Paris] --dry-run 
   

2. Les dates saisies dans les formulaires. Le traitement dépend de l'origine des lignes :

  • Lignes créées avec Ibexa 3 (ezdataflow-bundle 3.x) : la valeur stockée dans le fuseau de PHP est correcte. Ajoutez simplement les options --next et --requested-date à la commande précédente.
  • Lignes créées avec Ibexa 4 ou plus : les anciens formulaires stockaient l'heure UTC décalée de la différence entre le fuseau de PHP et celui de l'utilisateur. La date d'origine n'est retrouvable que si vous indiquez le fuseau de vos utilisateurs (le même pour tous) et celui de PHP. N'utilisez pas les options --next et --requested-date sur ces lignes.
   

php bin/console code-rhapsodie:ibexa-dataflow:convert-dates --user-timezone=Europe/Paris [--php-timezone=UTC] --dry-run 
   

L'option --php-timezone vaut par défaut le fuseau de PHP configuré.

Attention aux tables qui mélangent les deux origines, par exemple des lignes migrées depuis Ibexa 3 et d'autres créées ensuite avec Ibexa 4 ou plus. Les lignes ne sont pas marquées selon leur origine et les commandes convertissent toutes les lignes : une partie d'entre elles serait décalée. Vérifiez le résultat avec --dry-run et corrigez séparément les lignes de l'autre origine, par exemple avec une requête SQL sur une plage d'identifiants. Le détail est dans le fichier UPGRADE.md du dépôt.

Et Dataflow ?

Il est nécessaire de passer de la version 5 à la version 6, Dataflow ajoute des colonnes à la table des jobs (les exceptions et leur nombre). Mettez à jour le schéma de base de données :

   

php bin/console code-rhapsodie:dataflow:database-schema --update 
   

Vous souhaitez aller plus loin et essayer Dataflow : https://github.com/code-rhapsodie/dataflow-bundle/#installation

Essayer Ibexa Dataflow