Script pour convertir un forum fluxBB en pages HTML statiques

Pour archiver un forum ou seulement des fils de discussion, un convertisseur HTML.

Ce script est utile si l'on ne veut plus maintenir un forum, et récupérer sa base de données ou simplement supprimer celle-ci. Un gestionnaire de contenu est toujours la cible de spammeurs qui essaient de trouver des failles dans le code pour accèder au site en tant qu'administrateurs. Si le forum est abandonné, le CMS ne sera plus mis à jour et il deviendra de plus en plus vulnérable avec le temps. Le convertir en HTML évitera tout risque.

Vous pouvez aussi vouloir inclure un thread dans une page du site.

Contenu de l'archive

Vous pouvez remplacer le contenu de template.php par le modèle de page de votre site. Mais attention il est chargé dans le script par la fonction PHP loadHTMLFile qui a des limitations.

De même le style par défaut qui représente les messages dans un phylactère peut être modifié.

Utilisation du programme fluxBB2HTML

De préférence le script et les autres fichiers de l'archive, dont template.php, seront placés à la racine du forum fluxBB. Cela permettra d'accèder aux fichiers de configuration dans changer leurs chemins.

Il est préférable de changer le nom du script s'il doit rester longtemps en place: sinon des visiteurs pourraient le lancer depuis leur navigateur...

Le programme dispose d'une interface qui permet d'entrer un numéro de topic, ou un intervalle entre deux numéros. Cliquer sur le bouton Convert pour lancer la convertion automatique des pages du forum en pages statiques. Celle-si seront stockées dans le même répertoire que le script donc normalement dans le répertoire du forum originel.

Leur URL est formée du mot "forum", suivi par les mot-clés dans le titre séparés par un tiret, suivis par le numéro du topic.

Les pages HTML étant générée, vous pouvez au choix

Lorsque la conversion est complète vous pouvez supprimer la base de données et effacer tous les fichiers du fluxBB.

Vous pouvez désactiver la conversion des balises BB en HTML dans les messages en mettant $TRANSLATE_BB à false au début du script.

Redirections

Les URL des pages dynamiques converties en HTML ne sont pas redirigées. Il faut ajouter une redirection dans le fichier .htaccess si besoin. Une redirection n'est utile que si la page a de nombreux backlinks.

Si un fil de discussion a été intégré à une page du site, il ne convient pas de redirigé l'URL dynamique, pour des questions de référencement.

Fonctionnement du programme

Le script inclut le fichier config.php qui contient les codes d'accès à la base de données et le préfixe des tables.

Il inclut aussi cache/cache_config.php qui contient le format de la date, défini éventuellement par l'administrateur du forum.

Les tables fluxBB utilisées par le script

Topics

id poster subject posted ... moved_to
No du fil   Titre du fil     null si non déplacé

Ce qui nous intéresse, c'est l'id qui sert à sélectionner le ou les topiques, le titre, donc le champ subject, et le champ moved_to qui doit être null si le sujet n'est pas déplacé, sans quoi il est ignoré.

Posts

id poster message posted ... topic_id
  Nom de l'auteur Contenu Date   No du fil

Dans le programme de base, on retient le message posté, le nom de l'auteur, la date. On pourra retenir d'autres informations si on le souhaite, dans ce cas il faudra étendre le programme.

Le topic_id est le numéro du fil de discussion qui est partagé par tous les billets dans le fil. l'ID du message n'a pas d'utilité pour nous.

Si l'on veut afficher des informations sur l'auteur tel que sa date d'inscription, comme le fait le logiciel fluxBB, il faut alors consulter une table supplémentaire, celle des utilisateurs, mais le script actuel ne le fait pas. Dans la version HTML le nom de l'auteur est un simple champ de texte et non un lien sur une fiche comme dans fluxBB.

Les commandes SQL

Pour sélectionner les fils dont les numéros on été donnés en paramètres:

if(intval($starting) == intval($ending))
$condition = "((id = '$starting') AND (moved_to IS NULL))";
else
$condition = "((id >= '$starting') AND (id <= '$ending') AND (moved_to IS NULL))"; $sql = "SELECT id, subject, posted, moved_to FROM $tabletopics WHERE $condition ORDER BY posted ASC";

Noter que l'on teste si le fil a été déplacé, auquel cas le champ moved_to est différent de null et et le fil est ignoré.

Pour sélectionner l'ensemble des messages dans un même fil de discussion:

$query = "SELECT poster, message, posted FROM $tableposts WHERE topic_id='$id'";

On reprend le même identifieur qui est ici stocké dans la colonne topic_id et on sélectionne les informations utiles: nom d'utilisateur, contenu du message, date.