CsForum est de ces scripts qui dépannes quand on cherche quelque chose de simple, rapide à installer mais également à décortiquer afin de l'adapter au mieux à ses besoins. Il est réalisé en PHP4 mais il marche très bien sous PHP5, à condition que short_open_tag[1] soit à true dans php.ini, sinon il faudra éditer tous les fichiers à la main... mais rassurez-vous, il n'y en a que 9 :-)

Vous trouverez CsForum sur le site de comscripts.com, c'est d'ailleurs eux qui l'ont fait, et ils l'utilisent sur leur site.

L'installation se fait très rapidement, il suffit de :

  1. copier les fichiers sur votre serveur
  2. créer une nouvelle base de donnée (BDD) à l'aide du fichier csforum.sql
  3. éditer les premières lignes du fichier csforum.conf.php avec vos propres valeurs
  4. le forum est fonctionnel !!!

Maintenant que votre forum est installé, après quelques jours vous allez voir le principal défaut de se script, ou pour le dire autrement, la fonctionnalité qu'il est vraiment temps qu'ils ajoutent pour la prochaine version :-)

Je parle de la suppression des posts indésirables, et oui... comme il n'y a pas d'authentification, n'importe qui post sur le forum, y compris les bots en tout genre. Or il n'est pas simple de supprimer les posts... car ce n'est pas prévu !

Il faut donc se diriger vers phpMyAdmin par exemple, la BDD étant ultra simple car elle se limite à une table unique :

  • 1 enregistrement = 1 post

Mais bon, je vous comprend si vous n'avez pas vraiment envi d'aller tous les jours supprimer des tonnes de posts, et ce même quand une solution pour supprimer les posts plus simplement sera ajoutée pour les moins hardis[2].

Donc il faut placer/intégrer un anti-bot, et je vous propose tout naturellement PAB !!!

Dans notre cas, seul le fichier ajouter.php nous intéresse. Mais comme nous aimons faire les choses proprement[3], nous allons nous amuser et nous assurer que cette intégration respecte et suive le multilingue prévu par les auteurs depuis la 0.8

Pour faire simple, on va copier PAB dans le répertoire de CsForum directement, comme ça on aura un package complet.

Ensuite nous travaillons dans ajouter.php et on commence par inclure l'appel à la classe de PABdès le début du fichier :

<?
require 'PAB/pab.php';
unset($msg_result);

Puis pour faire les choses dans l'ordre on intègre l'affichage de l'image dans le formulaire, juste au dessus du bouton. Vous remarquerez que pour indiquer à PAB avec quelle url on peut l'atteindre on uilise les variables $UrlSite et $folderForum que vous aurez préalablement renseigné correctement dans le fichier csforum.conf.php lors de l'install de CsForum (voir au début de l'article).

AVANT (lignes 150 à 157 à peu près...) :

    <input class="form" type="checkbox" name="email_reply"><?=LG_ME_PREVENIR_PAR_MAIL?>
  </td>
 </tr>
 <? } ?>
 <tr>
  <td align="center" colspan="2">
   <input type="hidden" name="addmsg" value="1">
   <input type="submit" value="<?=LG_VALIDER?>" name="envoi" class="button">

APRÈS :

    <input class="form" type="checkbox" name="email_reply"><?=LG_ME_PREVENIR_PAR_MAIL?>
  </td>
 </tr>
 <? } ?>
<!-- Insertion de l'image et du champ de saisie -->
 <tr>
  <td align="center" colspan="2">
     <?php
      echo PAB::getInstance()->getImgFormHtml("$UrlSite/$folderForum/PAB/");
    ?> 
  </td>
 </tr>
 <tr>
  <td align="center" colspan="2">
	<?=LG_ENTRER_CODE_CONFIRMATION?><br />
	<input name="PrivateKey"/>
  </td>
 </tr>
<!-- Fin de l'insertion -->
 <tr>
  <td align="center" colspan="2">
   <input type="hidden" name="addmsg" value="1">
   <input type="submit" value="<?=LG_VALIDER?>" name="envoi" class="button">

Ensuite, et c'est presque finit, il faut tester la validité du code saisi par le visiteur avant d'aller plus loin dans l'enregistrement du message. Donc il faut ajouter une simple condition autour de la ligne 29.

AVANT (lignes 29 à 80 à peu près..) :

<?php
# [...]
  /* -------------- Requête SQL -------------------------------- */
  if((!empty($titre)) && (!empty($nom)) && (!empty($message))) {
    if (preg_match("/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$/i", $email)) {
 
     # [...]
 
    } else $msg_result = '<img src="images/note.gif" width="16" height="16"><b>'.LG_ADRESSE_INVALIDE.'</b><br><br>';
   } else $msg_result = '<img src="images/note.gif" width="16" height="16"><b>'.LG_FORMULAIRE_INCOMPLET.'</b><br><br>';
# [...]
?>

APRÈS :

<?php
# [...]
  /* -------------- Requête SQL -------------------------------- */
  if(PAB::getInstance()->testKeys()){
   if((!empty($titre)) && (!empty($nom)) && (!empty($message))) {
    if (preg_match("/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$/i", $email)) {
 
     # [...]
 
    } else $msg_result = '<img src="images/note.gif" width="16" height="16"><b>'.LG_ADRESSE_INVALIDE.'</b><br><br>';
   } else $msg_result = '<img src="images/note.gif" width="16" height="16"><b>'.LG_FORMULAIRE_INCOMPLET.'</b><br><br>';
  } else $msg_result = '<img src="images/note.gif" width="16" height="16"><b>'.LG_CODE_CONFIRMATION_SAISI_FAUX.'</b><br><br>';
# [...]
?>

Voilà, maintenant, avant même de vérifier si le nom et autres sont renseigné on test déjà si le code est bon. Si c'est le cas on laisse faire ce qui est prévu, sinon on affiche un message informant que le code saisi est faux.

On n'a rien de plus à faire dans cette page. Si le code est faux un nouveau sera proposé dans la page et si il était bon, et bien le script suit son cours, quitte la page ajouter.php et on n'a alors plus besoin de PAB ;-)

Dernière touche pour finir en beauté, ne pas oublier de traduire les deux petites phrases qu'on a ajouter dans le code : LG_ENTRER_CODE_CONFIRMATION et LG_CODE_CONFIRMATION_SAISI_FAUX. Il faut pour ce faire modifier le fichier langues/fr_csforum.inc et je vous propose de le faire à partir de la ligne 38, à la fin du paragraphe Ajouter et juste avant celui Lecture :

<?php
[...]
DEFINE("LG_ENTRER_CODE_CONFIRMATION", "Entrez le code de confirmation :");
DEFINE("LG_CODE_CONFIRMATION_SAISI_FAUX", "Le code de confirmation saisi est faux !");
 
/* Lecture */
[...]
?>

Et bien voilà qui est terminé. Maintenant nous avons un forum tout simple mais protégé par PAB ;-)

Comme je suis généreux, je vous laisse l'ensemble de l'intégration dans un tar.gz, ça vous permettra de tester ça chez vous ou de l'installer directement sur votre site si CsForum n'est pas encore installé.

Pour ceux qui ont déjà CsForum, et bien vous savez maintenant comment y intégrer PAB.

Notes

[1] Le tag <?...?> n'est plus activé par défaut depuis php5, au profit de <?php...?>

[2] ou les plus fainéant :-)

[3] mais si, mais si ;-)