phorum2spip : convertir des forums sous « Phorum » en forums spip - commentaires pour PHORUM5 2007-09-20T22:20:00Z https://contrib.spip.net/phorum2spip-convertir-des-forums#comment398216 2007-09-20T22:20:00Z <p>Attention, le script fourni plus haut ne fonctionne pas pour PHORUM5.</p> <p>J'ai réalisé une version pour PHORUM5 que j'ai testé avec succès sur mon site. Je ne garantis rien et ne me poser pas (trop de) de questions car je suis nul en PHP/MySql</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><?php /* * Phorum2Spip * Convertit un forum de "Phorum" sous MySQL en forum SPIP * (injecte les données d'un forum sous phorum dans le forum d'un article spip) * * Fonctionnalités: * - tranfert de toutes données (titres, messages, auteurs, date, statut des messages,...) * - respect de la structure des forums (mais renumérotation des entrées) * - traduction en utf-8 (vers spip) si nécessaire * * Restrictions: * - ne fonctionne que depuis une base de données "phorum" sous MySQL codée en iso-latin * * Utilisation: * Après avoir configuré le script, placez-le en ligne et appelez-le (une seule * fois!) avec un navigateur/ Retirez-le immédiatement après. * * Script diffusé sous licence GNU/GPL * Auteur: François Schreuer <francois <at> schreuer.org> * http://francois.schreuer.org/ * * Mise à jour pour Phorum5 : Bruno CAILLARD * */ /************************************************************************************ Configuration *************************************************************************************/ // Numéro de l'article dans le forum duquel on va injecter les données // Attention: vous devez avoir créé cet article préalablement $id_article = 285; // Nom du forum phorum (le nom de la table contenant les entêtes de ce forum) $phorum = "phorum"; // Coordonnées de la base de données spip $spip_host = "sql.free.fr"; $spip_user = "login"; $spip_pass = "mot de passe"; $spip_base = "base SQL de spip"; $spip_table = "spip_forum"; // Ne changer cette valeur que si vous avez modifié le préfixe des tables $spip_charset = "utf-8"; // Le type de codage de votre site spip // valeurs possibles: utf8 / iso-latin // Coordonnées de la base de données phorum $phorum_host = "sql.free.fr"; $phorum_user = "votre login"; $phorum_pass = "votre mot de passe"; $phorum_base = "nom de la base SQL de phorum"; /************************************************************************************ Fin de la config *************************************************************************************/ print("<html> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$spip_charset."\"> <title>Convertisseur phorum2spip</title> </head> <body>"); // // Connexion aux deux bases de données // $connexion_phorum = mysql_pconnect($phorum_host, $phorum_user, $phorum_pass); $db_phorum = mysql_select_db($phorum_base, $connexion_phorum) or die("erreur SQL: ". mysql_error()); // On récupère le corps de tous les messages et on stocke ça dans un tableau // (pour éviter une requête mysql à chaque message) $phorum_bodies = $phorum."_messages"; $r_bodies = mysql_query("SELECT message_id,body FROM $phorum_bodies", $connexion_phorum); while($a_bodies = mysql_fetch_array($r_bodies)) { if($spip_charset == "utf-8") $a_bodies['body'] = utf8_encode($a_bodies['body']); // Il est éventuellement possible d'ajouter un traitement typographique du texte ici $bodies[$a_bodies['message_id']] = $a_bodies['body']; } $r_main = mysql_query("SELECT * FROM $phorum_bodies ORDER BY parent_id",$connexion_phorum); mysql_close($connexion_phorum); // Maintenant, on se connecte à SPIP $connexion_spip = mysql_pconnect($spip_host, $spip_user, $spip_pass); $db_spip = mysql_select_db($spip_base, $connexion_spip) or die("erreur SQL-FEhler: ". mysql_error()); while($a = mysql_fetch_array($r_main)) { // On traduit le statut du message (on récupère aussi bien les messages publics que les autres) if($a['status'] == 2) $statut = "publie"; else $statut = "off"; // Quelques petits nettoyages if($spip_charset == "utf-8") $a['subject'] = utf8_encode($a['subject']); $titre = trim(addslashes($a['subject'])); if($spip_charset = "utf-8") $a['author'] = utf8_encode($a['author']); $auteur = trim(addslashes($a['author'])); // Gestion des citations et suppression des signatures à la barbare // Il faudra remplacer les lignes préfixées par de jolis "<quote>" $corps = trim(addslashes(str_replace("\n> ","\n_ > ",str_replace("[%sig%]","",$bodies[$a['message_id']])))); $date = Date("Y-m-d H:i:s", $a['datestamp']); $courriel = $a['email']; $lastmod = Date("Y-m-d H:i:s", $a['modifystamp']); // On traduit id_parent dans la nouvelle numérotation if($a['parent_id'] == 0) $id_parent = 0; else $id_parent = $trad_id[$a['parent_id']]; // Ce tableau contient la correspondance entre les anciens identifiants et les nouveaux // Et on injecte le tout dans la base de données de SPIP mysql_query("INSERT INTO $spip_table(id_parent,id_rubrique,id_article,id_breve,date_heure,titre,texte,auteur,email_auteur,statut,maj) VALUES('$id_parent','0','$id_article','0','$date','$titre','$corps','$auteur','$courriel','$statut','$lastmod')", $connexion_spip); // On récupère id_forum de l'entrée qu'on vient d'ajouter et on stocke cette valeur dans le tableau de "traduction" $retro = mysql_query("SELECT id_forum FROM $spip_table ORDER BY id_forum DESC LIMIT 1",$connexion_spip); $id_forum_array = mysql_fetch_array($retro); $id_forum = $id_forum_array['id_forum']; $trad_id[$a['message_id']] = $id_forum; // On calcule id_thread et on l'ajoute dans la table if($a['message_id'] == $a['thread']) $id_thread = $id_forum; else $id_thread = $trad_id[$a['thread']]; mysql_query("UPDATE $spip_table SET id_thread='$id_thread' WHERE id_forum='$id_forum' LIMIT 1", $connexion_spip); // On envoie un message de confirmation print("\nLe message \"".$titre."\" a &eacute;t&eacute; transf&eacute;r&eacute;<br />"); } mysql_close($connexion_spip); // Fini print("<p><b>Fini</b></p> </body> </html>"); ?></code></pre></div>