SPIP-Contrib

SPIP-Contrib

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

288 Plugins, 197 contribs sur SPIP-Zone, 184 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 ?

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

  • Champs Extras 3

    16 janvier 2012 – 600 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Optimiser les URLS pour google actus

    19 juin 2012 – 28 commentaires

    Les sites publiant de l’information de type « nouvelles » peuvent prétendre à être indexés par le site google actualités. Pour cela il faut qu’ils répondent à quelques caractéristiques précises qui sont énoncées ici par google. L’une de ces caractéristiques (...)

  • ScolaSPIP 4

    19 janvier 2016 – 256 commentaires

    ScolaSPIP est plugin-squelette responsive personnalisable pour sites Web d’établissements scolaires basé sur SPIPr Présentation de ScolaSPIP Ce plugin pour SPIP 3 est développé par la Dane de l’académie de Versailles pour les webmestres de cette (...)

  • Utilisez le framework Foundation dans vos squelettes !

    13 août 2013 – 94 commentaires

    Foundation est un framework CSS et Javascript très complet pour réaliser des sites sur une grille propre et homogène. Mais surtout, il permet de rendre un site responsive très facilement ! Ce plugin ajoute le framework Foundation sur l’espace (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 116 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)