Script de migration de Xoops vers punBB

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.

[php]
 	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 <guillaume AT llaumgui DOT com>
	 * @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, vous pouvez déjà télécharger la version en cours de développement attachée à ce billet. Version finale disponible attachée à ce billet

Annexes

3 réactions

  • De TitaX De TitaX - 09/09/2006, 20:23 #1

    Bravo pour ton travail !!! Nom seulement ca servira pour fedora-fr mais je suis certain que bcp d'autres l'utiliseront !

  • De Prolag De Prolag - 11/09/2006, 15:52 #2

    Salut ! Je ne connais pas la taille de votre forum Xoops mais pour la table des posts tu a prévu de réaliser comment ? encore une boucle ? ou si les 2 structures de table se ressemble juste modifier les champs ? et leur nom ?

  • De LLaumgui De LLaumgui - 11/09/2006, 17:58 #3

    Elle fait dans les 100Mo. Je doit y faire des traitements donc je vais faire mes test avec un SELECT limité puiis un SELECT * massif :).

Attribution - Partage dans les Mêmes Conditions 4.0 International