Migration de phpBB vers SPIP

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Script de migration de forums phpBB vers SPIP selon les conventions du chantier SPIP vs phpBB.

La souplesse de SPIP permet de concevoir des sites dont l’architecture est assez éloignée du magazine en ligne. Notamment, il est possible de construire des sites « portail » regroupant des services comme des galeries photos, des forums, des annuaires de sites, etc

Le travail présenté ici a été réalisé dans le cadre de la migration de Modelisme.com, actuellement constitué de la juxtaposition de plusieurs outils (phpBB, Gallery, phpNuke, ...) vers un site entièrement en SPIP avec l’avantage d’une gestion intégrée des membres et des services. Le point dur est, bien entendu, les forums (tellement dur que finalement nous sommes passés à PunBB mais c’est une autre histoire). Si je connais SPIP depuis plus d’un an, je n’avais jamais examiné de prêt le fonctionnement des forums.

L’excellent travail de Nikau, BoOz, James et Miss Mopi sur spip-contrib m’a permis de découvir les possibilités de SPIP en matière de forums.

Malgré tout, il restait le problème de la migration. Les forums de Modelisme.com comptaient environ 170000 messages et 6000 membres et il faut donc écrire un script qui va convertir la base de données de phpBB en une base de données SPIP (l’existant de la base de données SPIP cible n’est pas effacé, pas de panique ;-)).

Utilisation

Décompressez le fichier joint dans un répertoire de votre arborescence web. Le résultat de la décompression consiste en un seul fichier : phpBB2SPIP.php. Faites pointer votre navigateur sur ce script. La première page demande les identifiant de connexion à la base MySQL (notez que les deux bases doivent être sur la machine où tourne le script, par contre, on peut utiliser des identifiants différents pour la base SPIP et phpBB). Les répertoires sites sont aussi demandés pour le transfert des avatars (à ce sujet un traitement d’image personnel est appliqué).

La seconde page permet de choisir les mots-clés pour les sujets de type « annonces », « épinglés » et fermés, la rubrique où les forums seront implantés (il est nécessaire que ce soit une rubrique racine) et le statut des abonné (visiteur des forums ou rédacteur).

Le traitement des erreurs est très rustique.

La structure cible

Du côté de SPIP, j’ai repris la structure proposée dans spipBB 0.9 CSS. À savoir :
-  Une rubrique SPIP est la racine des forums ;
-  Les catégories phpBB sont des sous rubriques de la rubrique racine des forums ;
-  Les forums eux-même sont des articles dans les catégories.

correspondance SPIP phpBB

Toutes les tables de la base de données de phpBB ne vont pas forcément avoir un équivalent en SPIP. Le plus important est de récupérer :
-  les catégories ;
-  les forums ;
-  les membres (et parmi eux les modérateurs) ;
-  les sujets ;
-  les messages.

Par ailleurs, la plus grande partie du bbcode est converti en raccourcis SPIP. Les codes suivants du bbcode ne sont pas convertis :
-  le nom de la personne que l’on site
-  les couleurs
-  les tailles de caractères

Le soulignement bbcode, qui n’existe pas en SPIP est converti en raccourcis typographiques : {_ et _}. L’exploitation de ce raccourcis nécessite l’ajout d’une fonction avant_typo et apres_typo dans ecrire/mes_options.php3.

Code à placer dans avant_typo

    $texte = str_replace('{_','__SPIP_souligne_debut__',$texte);
    $texte = str_replace('_}','__SPIP_souligne_fin__',$texte);

Code à placer dans apres_typo

    $texte = str_replace('__SPIP_souligne_debut__','<span style="text-decoration: underline">',$texte);
    $texte = str_replace('__SPIP_souligne_fin__','</span>',$texte);

Les catégories

La table des catégories de phpBB est simple et regroupe les informations suivantes :
l’identifiant (cat_id), le titre (cat_title) et le numéro d’ordre (cat_order). le numéro d’ordre n’existe pas en SPIP mais il suffit de préfixer le titre par ce numéro puis, dans les squelettes, de classer par num_titre et d’utiliser le filtre supprimer_numero.

Pour chaque catégorie une sous-rubrique de la rubrique racine est créée. une table est employée pour conserver la correspondance entre cat_id et l’identifiant de la sous-rubrique créée.

Les forums

Ici tout n’est pas exploité. Seuls forum_id, cat_id, forum_order (même rôle que cat_order), forum_name et forum_desc servent

Pour chaque forum, un article est créé dans la rubrique correspondant au cat_id. Comme pour les catégories, le titre est formé en concaténant forum_order et forum_name. Le descriptif reçoit forum_desc. une table de correspondance entre l’identifiant de l’article et forum_id est construite.

Les membres

Je ne vais pas lister tout ce qui est présent dans la table users de phpBB, seules les informations suivantes ont été exploitées :
-  user_regdate n’est utilisé que pour nettoyer au passage les utilisateur inscrits depuis plus de 6 mois mais jamais connectés (J’ai constaté au passage que le formulaire d’inscription à phpBB de Modelisme.com est spammé par des sites pornographiques) ;
-  user_lastvisit est converti vers le champ en_ligne de SPIP ;
-  user_level set à calculer le statut de l’auteur SPIP. Si il est à 0, il s’agira d’un rédacteur ou d’un utilisateur de forum. Sinon, il s’agit d’un modérateur ;
-  username, user_email, user_password et user_website on une correspondance directe. A noter que l’encodage du mot de passe est le même ;
-  user_occ, user_from, user_interests, user_icq, user_aim, user_yim, user_msnm sont concaténés dans une liste pour former la biographie de l’auteur.

les modérateurs deviennent des administrateurs restreints à la rubrique d’implantation des forums.

ici aussi, une table de correspondance entre les identifiants phpBB et SPIP est construite.

l’avatar est aussi copié dans le logo de l’auteur. Actuellement, un traitement qui consiste à mettre le logo en niveau de gris et le logo pour survol en couleur est appliqué.

Les topics et les posts

phpBB possède une table pour regrouper les messages (posts) par sujet (topic). Du côté de SPIP, on va, comme dans spipBB 0.9 CSS, considérer qu’un message qui répond directement à un article est un sujet et que les messages qui répondent à un message sont des messages dans le sujet.

La traduction est assez directe.

Les sujets « annonces », les sujets « épinglés » et les sujets fermés

Ces trois types de sujets sont pris en compte via des mots-clés. Lors de la configuration de la traduction, les mots-clés pouvant être affectés par les visiteurs sont lus de la base de données SPIP et proposé (il est donc nécessaire de les définir avant la traduction).

En conclusion

Le script a été testé pour traduire les forums phpBB de Modelisme.com.

Note : je ne peux être tenu pour responsable des pertes de données qui pourraient résulter de l’exécution de ce script.

Pensez à augmenter le time-out de PHP selon la taille de la base phpBB. Pour 170000 messages et 5000 auteurs, la traduction prend 6 minutes sur un PowerBook G4 1GHz.

En chantier pour la prochaine version :
-  conversion vers l’UTF-8 pour les sites utilisant cet encodage

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom