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.
|