TUTORIEL PHP 
Construire un Wiki (2)
Ajout à notre wiki de trois fonctionnalités : l'historique, l'affichage d'anciennes versions et celui de l'ensemble des pages. (09/06/2004)

  1. Historique | 2. Version Précédente| 3. ToutesLesPages

Le wiki que nous avions développé dans notre article "PHP : Construire un Wiki" était des plus basiques : il n'avait en définitive du nom de wiki que l'utilisation du CamelCase, et le fait que tout un chacun puisse en modifier le contenu.

Nous allons donc revenir ici sur notre Wiki et lui ajouter trois aspects nécessaires ou fort utiles : la possibilité de visualiser l'historique des modifications d'une page, la possibilité de lire une version précédente d'une page, et une page spécifique listant l'ensemble des pages existantes.

Historique
C'est probablement la fonctionnalité la plus simple à implémenter : lorsqu'on lit une page, un clic sur un lien nous donne la liste des versions précédentes de cette page, de la plus récente à la toute première.
La transcription d'une telle requête est facilement traduite en SQL :

SELECT * FROM $this->tabl WHERE titre='$page' ORDER BY date DESC;

Nous créons donc une fonction afficheHist() dédiée à cette fonctionnalité :

function afficheHist($page)
  {
  echo "<br /><br /><fieldset><legend>Historique de la page '<a href=\"$page\">?titre=$page</a>'<br></legend><br />";

  $sql = "SELECT * FROM $this->tabl WHERE titre='$page' ORDER BY date DESC;";
  $rsql = mysql_query($sql);

  if (mysql_num_rows($rsql) == 0)
    {
    $this->date = -1;
    }
  else
    {
    $version = mysql_affected_rows();
    while ($row = mysql_fetch_object($rsql))
      {
      $txt = "Version $version datant du ";
      $txt .= date("d/m/y à H:i:s", $row->date);
      $txt .= " par <i>$row->auteur</i>";
      $txt .= "<br/>\n";
      echo $txt;
      $version--;
      }
    }
  echo "<br /></fieldset>";
  }

On voit qu'il s'agit ici d'une version légèrement remaniée de la fonction chargePage() : nous n'avons fait qu'en changer la requête SQL et y insérer du HTML.

Après avoir mis en place le champ et sa légende (nous permettant en un clic de revenir à la dernière version de la page), nous lançons la requête SQL.
S'il n'y a pas de problème, nous affichons les différentes versions. Pour pouvoir construire une pseudo-version de la page et mieux s'y retrouver, nous récupérons le nombre de lignes affectées par la requêtes SQL, et décrémentons son contenu à chaque ligne affichée. Au final, la dernière ligne (donc la première version) obtient bien le numéro de version "1".

Il reste à permettre son bon fonctionnement : nous allons tout d'abord ajouter un lien "voir l'historique" dans la fonction affichePage(). Nous modifions la ligne

<i>(Dernière modification le <?=date("d/m/y à H:i:s", $this->date);?> par <?=$this->auteur;?>)</i>

pour obtenir

<i>(Dernière modification le <?=date("d/m/y à H:i:s", $this->date);?> par <?=$this->auteur;?> - voir <a href="?hist=<?=$this->titre;?>">l'historique des modifications</a> de <?=$this->titre;?>)</i>

  Forum

Réagissez dans les forums de JDN Développeurs

Enfin, il nous prendre en compte l'argument hist= dans notre fonction maîtresse affichage(), qui se charge de répartir les tâches. Nous ajoutons donc un petit elseif supplémentaire...

elseif (isset($_REQUEST['hist']) && !empty($_REQUEST['hist']) )
  {
  $this->afficheHist($_REQUEST['hist']);
  }


Notre historique est ainsi fonctionnel.

  1. Historique | 2. Version Précédente| 3. ToutesLesPages
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page