SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

290 Plugins, 198 contribs sur SPIP-Zone, 114 visiteurs en ce moment

Accueil > Interactivité, échanges > Forums > phorum2spip : convertir des forums sous « Phorum » en forums spip

phorum2spip : convertir des forums sous « Phorum » en forums spip

13 avril 2005 – par François Schreuer – commentaire

1 vote

Un petit script rapidement écrit mais fonctionnel permettant de convertir en forums spip des forums existants sous le script Phorum v3 et stockés dans une base MySQL.

L’essentiel des données sont conservées (titre, message, auteur, date, mail de l’auteur, dernière modification, statut (publié ou non),...). Les entrées sont renumérotées [1] mais la structure des forums est respectée (les liens id_parent et id_thread sont calculés en fonction de la renumérotation pour conserver l’arborescence des messages).

En outre, la conversion éventuelle des données de iso-latin en utf-8 est intégrée (un paramètre de la configuration définit le codage de la base de données cible).

La configuration du script se fait directement en éditant une dizaine de variables dans le fichier selon les indications qui y sont données.

On active simplement ce script en l’appelant (une seule fois !!!) depuis un navigateur (ne pas oublier de le retirer après). Si quelqu’un a envie de l’améliorer, il serait notamment utile d’écrire une petite interface web.

Il n’est possible de convertir qu’un seul forum à la fois (il faut relancer le script autant de fois que vous avez de forums à convertir, en ayant bien sûr pris soin de modifier la config avant chaque nouvelle conversion) et vous devez avoir créé préalablement l’article dans le forum duquel vont être injectées les nouvelles entrées.


Remarques importantes

  • Ce script n’est compatible qu’avec spip 1.8 : il faut en effet que le champ id_thread soit présent dans la table spip_forum.
  • Il est bien évident que ce genre de manipulation comporte des risques de pertes de données (et que le présent script ne prévoit aucument tous les cas particuliers qui pourraient se présenter). Vous veillerez donc à effectuer une sauvergarde des DES DEUX bases de données impliquées dans le processus avant de faire quoi que ce soit.

Améliorations possibles

  • Permettre au script de gérer d’autres SGBD que MySQL (Phorum n’étant pas limité à MySQL).
  • Exploiter le module d’authentification de SPIP pour limiter l’accès au script.
  • Ecrire une petite interface web pour rendre l’utilisation plus conviviale.

Notes

[1Ceci est inévitable : outre l’éventuel conflit avec des données déjà présentes dans la base spip, phorum stocke chaque forum dans une table différente (et même dans deux en fait) tandis que spip centralise tous les forums publics dans une seule table.

Dernière modification de cette page le 28 janvier 2007

Retour en haut de la page

Vos commentaires

  • Le 21 septembre 2007 à 00:20, par Bubu En réponse à : pour PHORUM5

    Attention, le script fourni plus haut ne fonctionne pas pour PHORUM5.

    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

    <?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>");

    ?>

    Répondre à ce message

Répondre à cet article

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Passer un site SPIP sous https://

    23 février 2017 – 41 commentaires

    Comment migrer simplement votre site SPIP de http:// vers https:// Le protocole https:// devient de plus en plus courant : C’est mieux pour la vie privée de tous La plupart des grands sites l’a déjà adopté Certains navigateurs commencent à afficher (...)

  • SPIP 3.2, Agenda et FullCalendar

    6 juin – 17 commentaires

    Nous avions publié un article sur la manière d’utiliser FullCalendar avec SPIP 3.0 afin d’afficher des évènements sous forme d’Agenda. La version de FullCalendar a changé avec SPIP 3.2. Le présent article est donc un tutoriel adapté à SPIP 3.2. Pour (...)

  • PHANTOM (HTML5UP)

    18 juillet – commentaires

    Squelette SPIP pour intégrer le modèle Phantom de HTML5UP. https://html5up.net/phantom Installation A l’activation, le plugin installe aussi les plugins suivants : crayons, favicon, metasplus+, Couleur d’objet, champs extras, SPIP reset centre (...)

  • Cycle2

    7 août 2014 – 119 commentaires

    La seconde version de la librairie Javascript « jQuery Cycle », qui permet de produire des diaporamas, se nomme « Cycle2 » : http://jquery.malsup.com/cycle2/. Voici cette nouvelle librairie mise en plugin pour SPIP. Si vous utilisez déjà « jQuery (...)

  • Galleria (fr)

    16 novembre 2011 – 193 commentaires

    Une galerie d’image qui utilise la librairie javascript Galleria. Description Ce plugin vous permet d’ajouter des galeries d’images à vos articles. La galerie créée utilise la librairie javascript Galleria. Le plugin propose un modèle nommé (...)