FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 16-10-2013 18:20:15

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

[Résolu] Récupération users fluxbb pour wordpress

Bonjour,

Une nouvelle version d'un de mes sites a été faite sur wordpress (ancien code perso qui intégrait le forum fluxbb).
Je prévois de supprimer l'ancien forum fluxbb qui malheureusement n'était pas super actif. Les posts n'apportent rien au site.
Par contre j'avais beaucoup d'inscrits, puisque l'inscription était obligatoire pour télécharger le contenu du site.
J'aimerais donc migrer mes 8000 inscrits dans la base de donnée de wordpress.

Savez-vous si il existe un tutoriel, un pluggin... ou quoi que ce soit qui puisse m'aider à comprendre la procédure ?
Je pense pouvoir assez facilement convertir la table users de la bdd fluxbb en un tableau compatible pour wordpress, bien que je rencontrerai surement des problèmes. Par exemple pour les mots de passe. Comment peut-on migrer des mots de passe dans une autre bdd ? dois-je migrer les pass chiffrés de fluxbb et laisser les utilisateurs générer un nouveau mdp quand ils s'apercevront que le pass ne fonctionne pas ?

Merci !

Dernière modification par Doubrovski (17-10-2013 09:56:32)

Hors ligne

#2 16-10-2013 19:26:10

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Bonsoir,

Pas le temps ce soir*, j'essaierais de faire une réponse détaillée demain.

* Même les « anciens » sont débordés.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#3 17-10-2013 09:57:49

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Ok merci beaucoup !

Hors ligne

#4 17-10-2013 11:16:43

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Bonjour,

Avec FluxBB 1.5, les mots de passe sont cryptés par la fonction PHP sha1(), ce qui donne en base de données pour fluxbb_users.password des chaines de 40 caractères comme 211ca8fec2f55109d67d34947d0f7fc7f1842340 qui est le cryptage sha1 du mot de passe "testeur". Vous remarquerez, au passage, qu'il s'agit d'un codage hexadécimal puisqu'il n'y a que les caractères [0-9] et [a-f].
Si la fonction de comparaison des mots de passe de Wordpress utilise aussi le cryptage sha1, il n'y aura pas obligation pour les membres de choisir un nouveau mot de passe et dans ce cas, le transfert du champ fluxbb_users.password pourra se faire tel quel.

Il s'agit de ne récupérer que les membres, c'est-à-dire la table fluxbb_users.
Ce que je préconise est :
- export au format SQL de la table fluxbb_users
- import du fichier SQL dans la base de données wordpress ce qui va créer une table wordpress.fluxbb_users (Si wordpress est le nom de la base de données)
- création d'un script PHP qui va lire les champs nécessaires de la table wordpress_fluxbb_users puis effectue éventuellement un traitement sur ces champs et va les écrire, avec les bons noms de champs, dans la table idoine de wordpress.
(J'ai déjà effectué cette manipulation, non pas pour fluxbb->wordpress, mais pour le transfert d'un livre d'or entre Signatux et @lex Guestbook)
D'une part, le script ci-dessous est uniquement un exemple et ne tient pas compte du nombre, des noms et des types des champs de la base Wordpress. D'autre part, avec 8000 enregistrements, il faudra sans doute scinder en plusieurs parties.

    <?php
    //Procédure d'extraction des membres FluxBB puis d'insertion dans Wordpress
    //On s'assure que MySQL est supporté
    if (!function_exists('mysql_connect')) exit('Cet environnement ne supporte pas MySQL qui est requis');

    $db_host = "serveur_sql"; //Nom du serveur SQL
    $db_username = "utilisateur"; //Nom utilisateur
    $db_password = "mot_de_passe"; //Mot de Passe SQL
    $db_name = "nom_base"; //Nom de la base de données

    //---- Noms des tables origine et destination
    $table_ori = "fluxbb_users"; //Table d'origine FluxBB
    $table_dest = "users"; //nom de la table utilisateurs wordpress

    $link = mysql_connect($db_host,$db_username,$db_password) or die('Connexion MySQL impossible :'.mysql_error());
    if($link !== false) echo "<p>Connexion MySQL effectuée</p>\n";
     
    $db_connect = mysql_select_db($db_name, $link) or die('Impossible de se connecter à la base :'.mysql_error());
    if($db_connect !== false) echo"<p>Connexion à la base de données ".$db_name." effectué</p>\n";

    $sql = "SELECT id FROM ".$table_ori;
    $result = mysql_query($sql);
    $nb_ori = mysql_num_rows($result);
    echo "<p>".$nb_ori." membres dans FluxBB</p>\n";

    //Extraction des champs FluxBB
    $sql = "SELECT username, password, email, title, realname, location FROM ".$table_ori." ORDER BY username";
    $result = mysql_query($sql);
    $row_dest = array();
    $i = 0;
    // **** « MOULINETTE » de transformation des champs d'origine en champs destinataires ****
    //Les noms des champs destinataires sont les index littéraux de $row_dest[$i]['nom_du_champ']
    //Il faut tenir compte des types de champ originaux et destinataires et si NULL ou autre par défaut 
    while($row_ori = mysql_fetch_assoc($result)) {
       $row_dest[$i]['nom'] = mysql_real_escape_string($row_ori['username']);
       $row_dest[$i]['password'] = mysql_real_escape_string($row_ori['password']);
       $row_dest[$i]['email'] = mysql_real_escape_string($row_ori['email']);
       $row_dest[$i]['titre'] = mysql_real_escape_string((!is_null($row_ori['title']) ? $row_ori['title'] : ''));
       $row_dest[$i]['nom_reel'] = mysql_real_escape_string((!is_null($row_ori['realname']) ? $row_ori['realname'] : NULL));
       $row_dest[$i]['pays'] = mysql_real_escape_string((!is_null($row_ori['location']) ? $row_ori['location'] : NULL));
       $i++;
    }

    //Génération de la requête d'insertion des messages dans la base wordpress
    $sql = "INSERT INTO ".$table_dest." (nom, password, email, titre, nom_reel, pays)
    VALUES ";
    for($i=0;$i < $nb_ori;$i++) {
     $sql .= "('".$row_dest[$i]['nom']."', '".$row_dest[$i]['password']."', '".$row_dest[$i]['email']."', '".$row_dest[$i]['titre']."', '".$row_dest[$i]['nom_reel']."', '".$row_dest[$i]['pays']."'),";
    }
    //Suppression de la virgule finale surnuméraire
    $sql = substr($sql,0 ,-1);
    //Insertion des messages dans Wordpress
    $result = mysql_query($sql);
    if($result !== false) echo "<p>".mysql_affected_rows()." messages ajoutés dans ".$table_dest."</p>\n";
    else echo "<p>Aucun message ajouté</p>\n";

    mysql_close($link);
    ?>

Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#5 17-10-2013 14:41:18

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Merci pour ces conseils !
Je crois que wordpress utilise l’algorithme MD5... Donc la conversion est impossible.
Dans ce cas je peux transférer les chaines de 40 caractères dans la nouvelle base et laisser les utilisateurs régénérer leurs mots de passe ? Ou vaut-il mieux mettre un même nouveau mot de passe en MD5 que je choisis (assez complexe pour ne pas exister dans une rainbow-table) pour tout le monde ? Ca permet de sécuriser un peu plus les comptes "morts". Sans le communiquer bien sûr... afin qu'ils régénèrent les mdp.

Ou peut-être que je peux régler wordpress en sha1...
Mais je me demande si il ne vaut miuex pas choisir un algo plus puissant que sha1 ou md5.

Dernière modification par Doubrovski (17-10-2013 14:54:34)

Hors ligne

#6 17-10-2013 14:52:02

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Bonjour,

Il faut voir s'il n'y a pas une valeur par défaut dans Wordpress. Si oui, la laisser pour tout le monde, sinon ne rien mettre.
Dans les deux cas, mettre un petit message d'annonce pour prévenir qu'il faudra demander un nouveau mot de passe.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#7 18-10-2013 11:40:15

Askelon
Membre
Inscription : 09-06-2010
Messages : 27
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

J'ai déjà fait ça pour mon site/forum, avec l'ajout d'un bouton dans le profil utilisateur FluxBB pour créer automatiquement un compte sur le site WordPress.

J'ai fait ça rapidement, j'ai donc récupérer les fonctions WordPress qui permettent de générer un mot de passe aléatoire, collé tout ça dans un fichier qui est appelé via AJAX quand l'utilisateur clique sur le bouton. Le script utilise les infos de l'utilisateur (mail, pseudo, url, date d'inscription…) pour créer un utilisateur WordPress et envoie le nouveau mot de passe par mail.

Je copierais le code ici si besoin pour adaptation smile

Hors ligne

#8 21-10-2013 11:12:46

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Merci pour ces conseils !
Askelon -> Sympa comme technique, même si je préférerais peut-être gérer le transfert moi même, étant donné que le forum sera supprimé.

Je vais préparer la nouvelle base de donnée en local et essayer de changer MD5 pour sha1 sur wordpress. Le top serait de vérifier si le pass contenu dans la bdd est chiffré en sha1, et si oui le remplacer avec un nouveau pass chiffré en MD5.

Si ça ne fonctionne pas, je ne sais pas trop comment faire avec le transfert des pass. Dur de trouver une réponse sur la commu wordpress FR à ce sujet.

En tous cas c'est sûr, vous me confirmez que fluxbb utilise sha1 ?

Dernière modification par Doubrovski (21-10-2013 15:45:04)

Hors ligne

#9 01-11-2013 14:48:15

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Bonjour !

Toujours en pleine migration de la base... Cette fois je cherche à élaguer ma table users pour ne garder que les utilisateurs "vérifiés", car j'ai un grand nombre d'utilisateurs non vérifiés...
Je n'ai pas trouvé la colonne qui indique le statut vérifié/non vérifié dans la base de donnée. Savez-vous de quelle colonne s'agit-il ?

Il me semble que c'est la colonne "group_id"
0 = non vérifié
4 = membre

Je cherche également à convertir la date d'inscription en "datetime" classique. Hors, fluxbb semble utiliser un format de date étrange du type :
1383307858 que je veux convertir en ---> 2013-11-01 00:00:00

Merci

Dernière modification par Doubrovski (01-11-2013 15:36:30)

Hors ligne

#10 01-11-2013 15:54:11

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Bonjour,

Exact ! group_id = 0 pour non vérifié.
Le format de datetime comme “1383307858”est un timestamp Unix


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#11 01-11-2013 16:27:54

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Merci ! Bon je pense que mon script est bientôt terminé... je posterai la solution finale.

Pour convertir le timestamp Unix en datetime j'ai fait une méthode :

function dtime($var1) {
		$var2 = date("Y-m-d H:i:s", $var1);
		return $var2; 
}

Hors ligne

#12 01-11-2013 20:53:15

Doubrovski
Membre
Inscription : 29-03-2011
Messages : 58
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

C'est bon ! Transfert des 9000 membres réussi. Merci à vous. smile

Otomatic > Ton script m'a bien aidé. Par contre mes adaptations sont moins propres...

0. Autoriser les pass chiffrés en sha1 dans la base de donnée wordpress
Quand un ancien membre se connectera sur wordpress, son pass chiffré en sha1 sera converti en MD5.
http://www.maxrice.com/allow-wordpress- … word-hash/

1. Importer la table "fluxbb_users" dans la base de donnée où sont stockées les tables de wordpress
- export au format SQL de la table fluxbb_users
- import du fichier SQL dans la base de données où sont stockées les tables de wordpress

2. Isoler les membres vérifiés
J'ai fait ça directement dans phpmyadmin :

DELETE FROM `baseDonnees`.`fluxbb_users` WHERE `fluxbb_users`.`group_id` != 4;

3. Convertir les membres fluxbb en membres wordpress
J'ai appliqué ce script deux fois, par tranche de 5000 membres sinon le script plante.
Pour le deuxième passage il faut donner la valeur 5000 à la variable $point.

J'ai également utilisé deux méthodes (fonctions) dont le script a besoin pour fonctionner :
nice(); //pour enlever les accents et espaces des pseudos
et dtime(); //pour convertir les timestamp en datetime (cf post ci dessus).

Ce script ne prend en compte que le pseudo, le mail, la date d'inscription et le password qui reste chiffré en sha1.

<?php
    //Procédure d'extraction des membres FluxBB puis d'insertion dans Wordpress
    //On s'assure que MySQL est supporté
    if (!function_exists('mysql_connect')) exit('Cet environnement ne supporte pas MySQL qui est requis');

    $db_host = "localhost"; //Nom du serveur SQL
    $db_username = "root"; //Nom utilisateur
    $db_password = ""; //Mot de Passe SQL
    $db_name = "baseDonnees"; //Nom de la base de données

    //---- Noms des tables origine et destination
    $table_ori = "for_users"; //Table d'origine FluxBB
    $table_dest = "wp_users"; //nom de la table utilisateurs wordpress
	
    $point = 0; //le script commence à la première ligne de la table fluxbb_users
    $tranche = 5000; //le script continue pour les 5000 lignes suivantes

    $link = mysql_connect($db_host,$db_username,$db_password) or die('Connexion MySQL impossible :'.mysql_error());
    if($link !== false) echo "<p>Connexion MySQL effectuée</p>\n";
     
    $db_connect = mysql_select_db($db_name, $link) or die('Impossible de se connecter à la base :'.mysql_error());
    if($db_connect !== false) echo"<p>Connexion à la base de données ".$db_name." effectué</p>\n";

    $sql = "SELECT id FROM ".$table_ori." LIMIT ".$point.",".$tranche."";
    $result = mysql_query($sql);
    $nb_ori = mysql_num_rows($result);
    echo "<p>".$nb_ori." membres dans FluxBB</p>\n";
	
    //Extraction des champs FluxBB
    $sql = "SELECT username, password, email, registered FROM ".$table_ori." ORDER BY id LIMIT ".$point.",".$tranche."";
    $result = mysql_query($sql);
    $row_dest = array();
    $i = 0;
    // **** « MOULINETTE » de transformation des champs d'origine en champs destinataires ****
    //Les noms des champs destinataires sont les index littéraux de $row_dest[$i]['nom_du_champ']
    //Il faut tenir compte des types de champ originaux et destinataires et si NULL ou autre par défaut 
    while($row_ori = mysql_fetch_assoc($result)) {
       $row_dest[$i]['username'] = mysql_real_escape_string($row_ori['username']);
       $row_dest[$i]['password'] = mysql_real_escape_string($row_ori['password']);
       $row_dest[$i]['nicename'] = mysql_real_escape_string(nice($row_ori['username']));
       $row_dest[$i]['mail'] = mysql_real_escape_string($row_ori['email']);
       $row_dest[$i]['registered'] = mysql_real_escape_string(dtime($row_ori['registered']));
       $row_dest[$i]['displayname'] = mysql_real_escape_string($row_ori['username']);
       $i++;
    }

    //Génération de la requête d'insertion des messages dans la base wordpress
    $sql = "INSERT INTO ".$table_dest." (user_login, user_pass, user_nicename, user_email, user_registered, display_name)
    VALUES ";
    for($i=0;$i < $nb_ori;$i++) {
     $sql .= "('".$row_dest[$i]['username']."', '".$row_dest[$i]['password']."', '".$row_dest[$i]['nicename']."', '".$row_dest[$i]['mail']."', '".$row_dest[$i]['registered']."', '".$row_dest[$i]['displayname']."'),";
    }
    //Suppression de la virgule finale surnuméraire
    $sql = substr($sql,0 ,-1);
    //Insertion des messages dans Wordpress
    $result = mysql_query($sql);
    if($result !== false) echo "<p>".mysql_affected_rows()." messages ajoutés dans ".$table_dest."</p>\n";
    else echo "<p>Aucun message ajouté</p>\n";

    mysql_close($link);
    ?>

4. Donner un rôle aux membres
Pour chaque membre, il faut ajouter deux lignes dans la table wp_usermeta pour qu'ils deviennent des "abonnés" et puissent accéder aux profils. Attention à ne pas prendre en compte l'id de l'admin et des autres utilisateurs créés sur wordpress.

<?php

    //Ce script récupère l'id des membres de la table wp_users et ajoute deux lignes dans la table wp_usermeta pour en faire des "abonnés"
    //On s'assure que MySQL est supporté
    if (!function_exists('mysql_connect')) exit('Cet environnement ne supporte pas MySQL qui est requis');

    $db_host = "localhost"; //Nom du serveur SQL
    $db_username = "root"; //Nom utilisateur
    $db_password = ""; //Mot de Passe SQL
    $db_name = "baseDonnees"; //Nom de la base de données

    //---- Noms des tables origine et destination
    $table_ori = "wp_users"; //Table d'origine wordpress users
    $table_dest = "wp_usermeta"; //Table destination wordpress usermeta
    
    $point = 0; //le script commence à la première ligne de la table d'origine
    $tranche = 5000; //le script continue sur 5000 lignes

    $link = mysql_connect($db_host,$db_username,$db_password) or die('Connexion MySQL impossible :'.mysql_error());
    if($link !== false) echo "<p>Connexion MySQL effectuée</p>\n";
     
    $db_connect = mysql_select_db($db_name, $link) or die('Impossible de se connecter à la base :'.mysql_error());
    if($db_connect !== false) echo"<p>Connexion à la base de données ".$db_name." effectué</p>\n";

    $sql = "SELECT id FROM ".$table_ori." LIMIT ".$point.",".$tranche."";
    $result = mysql_query($sql);
    $nb_ori = mysql_num_rows($result);
    echo "<p>".$nb_ori." membres dans wp_users</p>\n";
    
    //Extraction des champs id de wp_users
    $sql = "SELECT id FROM ".$table_ori." ORDER BY id LIMIT ".$point.",".$tranche."";
    $result = mysql_query($sql);
    $row_dest = array();
    $i = 0;
    // **** « MOULINETTE » de transformation des champs d'origine en champs destinataires ****
    while($row_ori = mysql_fetch_assoc($result)) {
       $row_dest[$i]['iduser'] = mysql_real_escape_string($row_ori['id']);
       $row_dest[$i]['metakey1'] = 'wp_capabilities';
       $row_dest[$i]['metakey2'] = 'wp_user_level';
       $row_dest[$i]['metavalue1'] = 'a:1:{s:10:"subscriber";b:1;}';
       $row_dest[$i]['metavalue2'] = '0';
       $i++;
    }

    //Génération de la requête d'insertion de la première usermeta
    $sql = "INSERT INTO ".$table_dest." (user_id, meta_key, meta_value)
    VALUES ";
    for($i=0;$i < $nb_ori;$i++) {
     $sql .= "('".$row_dest[$i]['iduser']."', '".$row_dest[$i]['metakey1']."', '".$row_dest[$i]['metavalue1']."'),";
    }
    //Suppression de la virgule finale surnuméraire
    $sql = substr($sql,0 ,-1);
    //Insertion des messages dans Wordpress
    $result = mysql_query($sql);
    if($result !== false) echo "<p>".mysql_affected_rows()." usermeta ajoutées dans ".$table_dest."</p>\n";
    else echo "<p>Aucun message ajouté</p>\n";
    
    //Génération de la requête d'insertion de la deuxièle usermeta
    $sql = "INSERT INTO ".$table_dest." (user_id, meta_key, meta_value)
    VALUES ";
    for($i=0;$i < $nb_ori;$i++) {
     $sql .= "('".$row_dest[$i]['iduser']."', '".$row_dest[$i]['metakey2']."', '".$row_dest[$i]['metavalue2']."'),";
    }
    //Suppression de la virgule finale surnuméraire
    $sql = substr($sql,0 ,-1);
    //Insertion des messages dans Wordpress
    $result = mysql_query($sql);
    if($result !== false) echo "<p>".mysql_affected_rows()." usermeta ajoutées dans ".$table_dest."</p>\n";
    else echo "<p>Aucun message ajouté</p>\n";

    mysql_close($link);
    ?>

Voilà. Les scripts pourraient être plus propres c'est sûr...
A+

Dernière modification par Doubrovski (01-11-2013 21:23:53)

Hors ligne

#13 02-11-2013 10:50:09

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : [Résolu] Récupération users fluxbb pour wordpress

Bonjour,

Tout est bien qui finit bien wink


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

Pied de page des forums