Suite à ma réflexion ainsi que l’avale des ambassadeurs francophones du projet Fedora, je viens de commencer le script de migration de Xoops vers punBB. Pour le moment, seul les groupes sont convertis (oui je sais, c’est le plus facile), mais cette migration ma permis de construire le script et sa logique.
Quel est la logique de ce script ?
Des requêtes SELECT alimentent un tableau de correspondance des données de Xoops vers celles de punBB. Ensuite, ce tableau est passé à la fonction buildInsert qui va construire la requête d’insertion.
function convGroupe () {
//$this->emptyTable( "punbb_groups" );
$query = $this->query( "SELECT * FROM xoops_groups ORDER BY groupid" );
while ( $groupe = $this->fetch_array($query) ) {
// Convertie les groupid
$groupe['groupid'] = $this->convertGroupeId($groupe['groupid']);
if ( $groupe['groupid'] > 4 ) {
$tab = array( 'g_id' => $groupe['groupid'],
'g_title' => $groupe['name'],
'g_user_title' => $groupe['name'],
'g_read_board' => 1,
'g_post_replies' => 1,
'g_post_topics' => 1,
'g_post_polls' => 1,
'g_edit_posts' => 1,
'g_delete_posts' => 1,
'g_delete_topics' => 1,
'g_set_title' => 0,
'g_search_users' => 1,
'g_edit_subjects_interval' => 300,
'g_post_flood' => 60,
'g_search_flood' => 30,
);
$this->buidInsert( 'punbb_groups', $tab);
}
}
}
/**
* Construction de requêtes d'insertion.
* @author Guillaume Kulakowski
* @since 0.1
* @TODO Code lourd à optimisé.
* @param array $tab Paramêtres.
*/
function buidInsert( $table, $tab ) {
$_key;
$_value;
foreach ( $tab as $key => $value ) {
$_key[] = $key;
$_value[] = $value;
}
$SQL = "INSERT INTO ".$table." (" . implode(", ", $_key) . ") VALUES ('" . implode("', '", $_value) . "')";
$this->query($SQL);
}
Le layer de base est minimaliste car le script reste quand même dans un esprit one-shoot mais pourra être repris par toutes personnes voulant réaliser la même opération.
Pré requis du script, lorsqu’il sera fini
php4 ou supérieur, par contre la base de données de Fedora-France étant assez conséquente, je compte lancer le script en ligne de commande. Il sera donc optimisé pour les gros forums/sites mais pourra ne pas marcher avec un simple appel via un navigateur.
Un roadmap ?
Non, le script sera prêt quand il sera prêt et sera sous licence GNU/GPL.
Version finale disponible sur GitHub.
De TitaX le 9 septembre 2006
Bravo pour ton travail !!! Nom seulement ca servira pour fedora-fr mais je suis certain que bcp d'autres l'utiliseront !