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 ) {
                       
                                $tabarray(  '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