v1.1.5 — Historique des révisions WordPress + restauration
🎯 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) viawp_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_revisionpour 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 :
-
Meta_Boxesseulement instancié en admin →register_post_meta()et le filtre_wp_post_revision_meta_keysn'étaient pas actifs en contexte REST. Les révisions étaient créées mais leur méta était vide. Fix :Bootstrap.phpinstancieMeta_Boxessur toutes les requêtes. -
sanitize_jsonwp_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 lesanitize_callbackde s'exécuter en REST). Fix : retirerwp_slashdu retour desanitize_json(). -
Route args avec
defaultcausaient un wipe silencieux du config → un PUT avec{"title":"..."}(pas deconfig) 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 deget_param()/has_param()qui incluent les defaults.
🔧 Modifications techniques
Menu_Controller::update_menu()écrit une signature dérivée du config danspost_contentpour 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_postpour que la révision capture le nouvel état (pas l'ancien) - Bump
Requires at least6.3 → 6.4 (nécessaire pourrevisions_enabledarg deregister_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).