// 2007/07/30 21:27 / 90.1.187.152
// 2007/08/04 01:37 / 86.220.199.82
Cette fonction permet d'afficher les modifications entre deux révisions d'une page.
On peut ainsi voir rapidement ce qui a changé. L'idée est d'avoir un fonctionnement acceptable en gardant la légèreté de TigerWiki

'''Une beta est disponible la [2.19+4b|sources/?file=2.19_4b/index.php]'''
Cette fonction va sans doute être intégrée à une prochaine version de TigerWiki (voir le [thread|http://chabel.org/forum/comments.php?DiscussionID=28&page=1] sur le forum officiel)

!Accessible depuis :
* la page d'historique pour voir les modifs entre deux révisions arbitraires
* la page des [Changements récents|?action=recent] pour voir le diff entre les deux dernières versions

!Affichage :
* en rouge les lignes effacées entre la plus ancienne et la plus récente
* en vert les lignes ajoutées entre la plus ancienne et la plus récente
* en noir les lignes non modifiées
* les lignes modifiées apparaissent en rouge et en vert

!Démo / test :
Voir la page [TestDiff] pour une démo de la fonction :
* Le [jeu de test|?action=diff&page=TestDiff&f1=20070729-1757.bak&f2=20070729-1754.bak] qui va bien
* [Historique|?page=TestDiff&action=history]
* [Changements récents|?action=recent] et les nouveaux liens diff
* Ce wiki fonctionne avec la version concernée donc toutes les pages bénéficient du diff

!Algo
L'algo est simple et se base sur la fonction standard [array_diff|http://www.php.net/manual/fr/function.array-diff.php] de PHP
* Cela permet d'avoir un code compact et sans dépendance
* la gestion du diff est faite au niveau ligne
* Il peut relativement facilement être pris en défaut
''Note:'' Tant qu'a y être j'ai changé l'ordre d'affichage de l'historique : plus récent en 1er

!Problèmes :
* une ligne peut être vue supprimée/ajoutée à cause des ajouts/suppressions des lignes autour
* les modifs concaténées dans un seul fichier (même minute) posent un peu problème voir [par exemple|?page=UploadFichiers&action=diff&f1=20070729-1725.bak&f2=20070729-1703.bak]
* si on supprime plusieurs lignes identiques en en laissant une elles ne sont pas vues ! voir [diff|?action=diff&page=TestDiff&f1=20070729-2209.bak&f2=20070729-2208.bak] entre [2208|?page=TestDiff&action=history&time=20070729-2208.bak] et [2209|?page=TestDiff&action=history&time=20070729-2209.bak]

!Liste des changements :
* #ligne : explication du code
* 192 : on empêche le remplacement de ''HISTORY''
* 204 : tri inverse de l'historique et ajout des radio buttons
* 312 : action diff entre deux fichiers puis entre les deux plus récents
* 351 : ajout du lien diff dans l'action ''recent''

!Plus loin :
Des méthodes plus robustes existent mais au prix d'un plus gros code :
* [PHPDiff|http://www.holomind.de/phpnet/diff2.src.php] 79 lignes pour le diff sous forme GNU
* [PHP inline diff|http://software.zuavra.net/inline-diff/] basé sur PEAR Text_Diff
* [PHP inline diff|http://software.zuavra.net/inline-diff/] basé sur PEAR Text_Diff

TOC