Skip to content

v1.1.5 — Historique des révisions WordPress + restauration

Choose a tag to compare

@georgyfr georgyfr released this 25 Jun 12:27
· 14 commits to main since this release

🎯 v1.1.5 — Historique des révisions WordPress + restauration

Cette version ajoute la gestion historique des révisions WordPress au Builder. Chaque sauvegarde crée désormais une révision du CPT wtm_menu, capturant à la fois les champs du post ET les 6 métadonnées WTM (_wtm_config, _wtm_menu_type, _wtm_location, _wtm_header_config, _wtm_footer_config, _wtm_version).

L'utilisateur peut lister, prévisualiser et restaurer n'importe quelle révision passée depuis un nouveau modal « Historique » dans le Builder.

✨ Nouveautés

  • 3 nouvelles routes REST : GET /wtm/v1/menus/{id}/revisions, GET .../{revision_id}, POST .../{revision_id}/restore
  • Filtre wtm_max_revisions (défaut 10, spec §7.6) via wp_revisions_to_keep
  • 6 méta WTM versionnées dans les révisions (revisions_enabled => true + filtre _wp_post_revision_meta_keys)
  • Modal Historique (HistoryPanel.js) avec overlay, liste scrollable, avatars Gravatar, dates relatives, compteur d'items
  • Prévisualisation de révision dans l'iframe de preview (pill jaune « Révision #N »)
  • Restauration avec confirmation inline (bannière jaune « Restaurer cette révision ? »)
  • Hook wp_restore_post_revision pour restaurer les méta WTM après une restauration WP core

🐛 Bugs corrigés pendant le développement

3 bugs bloquants ont été découverts et corrigés avant la release :

  1. Meta_Boxes seulement instancié en adminregister_post_meta() et le filtre _wp_post_revision_meta_keys n'étaient pas actifs en contexte REST. Les révisions étaient créées mais leur méta était vide. Fix : Bootstrap.php instancie Meta_Boxes sur toutes les requêtes.

  2. sanitize_json wp_slashait sa valeur de retour → double-wp_slashing au stockage, json_decode échouait à la lecture. Ce bug était silencieux en v1.1.4 (parce que le Bug 1 empêchait le sanitize_callback de s'exécuter en REST). Fix : retirer wp_slash du retour de sanitize_json().

  3. Route args avec default causaient un wipe silencieux du config → un PUT avec {"title":"..."} (pas de config) resetait silencieusement le config à la valeur par défaut {"version":1,"items":[]}. Fix : utiliser $request->get_json_params() + isset() pour vérifier le body JSON brut, au lieu de get_param()/has_param() qui incluent les defaults.

🔧 Modifications techniques

  • Menu_Controller::update_menu() écrit une signature dérivée du config dans post_content pour garantir qu'une révision est créée à chaque save (WP ne crée pas de révision sur changements meta-only)
  • Les meta sont mises à jour avant wp_update_post pour que la révision capture le nouvel état (pas l'ancien)
  • Bump Requires at least 6.3 → 6.4 (nécessaire pour revisions_enabled arg de register_post_meta, aligné avec spec §7.6)
  • Bump version 1.1.4 → 1.1.5

📊 Métriques

Métrique v1.1.4 v1.1.5 Delta
Bundle JS (compressé) 87,2 Ko 95,2 Ko +8,0 Ko
Bundle CSS 15,1 Ko 20,4 Ko +5,3 Ko
Routes REST 8 11 +3
Composants React 7 8 +1
Fichiers PHP 14 15 +1
Hooks WordPress 18 22 +4

✅ Tests

  • 22/22 tests PASS (4 backend + 8 UI v1.1.5 + 10 non-régression)
  • 8 captures d'écran : /home/z/my-project/download/dnd-tests/
  • Rapport détaillé : Rapport-Tests-v1.1.5.md

📦 Installation

Téléchargez le ZIP ci-dessous et uploadez-le via WordPress admin → Extensions → Ajouter → Téléverser une extension.

Requires WordPress 6.4+ (changement par rapport à v1.1.4 qui nécessitait 6.3).