Script migration News de Xoops 2.2 vers Joomla

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Script migration News de Xoops 2.2 vers Joomla

    Voilà, après de nombreuses recherches, je n'ai jamais trouvé de script pour migrer mes news de xoops vers joomla. Voici donc mon script pour la communauté. Je sais qu'il est clairement améliorable mais ça fait une base de départ au moins. Je pense que ce serait pas mal de faire des scripts pour faciliter la migration depuis les autres CMS parce qu'on galère sinon.

    Le plus gros problème persistant dans ce script c'est la gestion des caractères spéciaux du Français. J'ai choisi la solution de facilité pour le titre mais ça serait clairement améliorable. M'enfin, enjoy.

    De même, le case pour les catégories doit pouvoir être remplacé par un tableau qui serait déclaré avec les autres variables en début de script.

    Code PHP:
    <?php

    // Les variables utiles
    $host "localhost";
    $user "";
    $pass "";
    $db1 "";
    $db2 "";
    $tbXoops "mv_";
    $tbJoomla "jos";

    // on se connecte à la BDD
    $link mysql_connect($host$user$pass);
    if (!
    $link) {
        die(
    'Connexion impossible : ' mysql_error());
    }
    echo 
    '--- Connecté correctement --- <br />';

    // on choisit la BDD xoops
    $db_selected mysql_select_db($db1$link);
    if (!
    $db_selected) {
       die (
    'Impossible de sélectionner la base de données : ' mysql_error());
    }

    // on récupère les news
    $result mysql_query("select * from ".$tbXoops."_stories ORDER BY created");
    $i=1;
    while (
    $row mysql_fetch_array($result)) {
        
    //$joom[$i]["id"]=$row[storyid];
        
    $joom[$i]["id"]=$i;
        if(
    $row[uid] == 1)
            
    $joom[$i]["created_by"]=62;
        else
            
    $joom[$i]["created_by"]=$row[uid];
        
    $title str_ireplace("'","\'",$row[title]);
        
    $title str_ireplace('"','',$title);
        
    $joom[$i]["title"]=$title;
        
    $alias strtr($title'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        
    $alias substr(ereg_replace("[^[:alnum:]+]","-",$alias),0,254);
        
    $joom[$i]["alias"]=$alias;
        
    $joom[$i]["title_alias"]=$alias;
        
    $joom[$i]["created"]=date('Y-m-d H:m:s',$row[created]);;
        
    $joom[$i]["publish_up"]=date('Y-m-d H:m:s',$row[published]);;
        
    $home str_ireplace("'","\'",$row[hometext]);
        
    $home str_ireplace('"','\"',$home);    
        
    $joom[$i]["introtext"]=$home;
        
    $body str_ireplace("'","\'",$row[bodytext]);
        
    $body str_ireplace('"','\"',$body);    
        
    $joom[$i]["fulltext"]=$body;
        
    $joom[$i]["hits"]=$row[counter];
        switch(
    $row[topicid]){
            case 
    2:
                
    $cat=10;
                break;
            case 
    8:
                
    $cat=9;
                break;
            case 
    11:
                
    $cat=6;
                break;
            case 
    1:
                
    $cat=3;
                break;
            case 
    9:
                
    $cat=2;
                break;
            case 
    6:
                
    $cat=1;
                break;
            case 
    17:
                
    $cat=8;
                break;
            case 
    3:
                
    $cat=4;
                break;
            case 
    5:
                
    $cat=5;
                break;
            case 
    4:
                
    $cat=7;
                break;
            case 
    16:
                
    $cat=3;
                break;
        }
        
    $joom[$i]["catid"]=$cat;
        
    $joom[$i]["sectionid"]=1;
        
    $joom[$i]["attribs"]="show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=";
        
    $joom[$i]["version"]=1;
        
    $joom[$i]["parentid"]=0;
        
    $joom[$i]["ordering"]=1;
        
    $joom[$i]["access"]=0;
        
    $joom[$i]["metakey"]=strip_tags(str_ireplace('-',' ',$alias));
        
    $joom[$i]["metadesc"]=strip_tags($home);
        
    $joom[$i]["metadata"]="\"robots= \nauthor=\"";
        
    $joom[$i]["state"]=1;
        
    $joom[$i]["mask"]=0;
        
        
    $i++;
    }
    echo 
    '--- Toutes les news récupérées ('.mysql_num_rows($result).') --- <br />';
    mysql_free_result($result);

    // on choisit la BDD joomla
    $db_selected mysql_select_db($db2$link);
    if (!
    $db_selected) {
       die (
    'Impossible de sélectionner la base de données : ' mysql_error());
    }


    // Insertion des news dans Joomla
    foreach($joom as $news){
        
    $requete "INSERT INTO ".$tbJoomla."_content SET";
        
    $requete.= " `id` =".$news["id"];
        
    $requete.= ", `created_by` =".$news["created_by"];
        
    $requete.= ", `title` =\"".$news["title"];
        
    $requete.= "\", `alias` =\"".$news["alias"];
        
    $requete.= "\", `title_alias` =\"".$news["title_alias"];
        
    $requete.= "\", `created` ='".$news["created"];
        
    $requete.= "', `publish_up` ='".$news["publish_up"];
        
    $requete.= "', `publish_down` ='".$news["publish_down"];
        
    $requete.= "', `introtext` =\"".$news["introtext"];
        
    $requete.= "\", `fulltext` =\"".$news["fulltext"];
        
    $requete.= "\", `metakey` =\"".$news["metakey"];
        
    $requete.= "\", `metadesc` =\"".$news["metadesc"];
        
    $requete.= "\", `hits` =".$news["hits"];
        
    $requete.= ", `catid` =".$news["catid"];
        
    $requete.= ", `sectionid` =".$news["sectionid"];
        
    $requete.= ", `attribs` =\"".$news["attribs"];
        
    $requete.= "\", `version` =".$news["version"];
        
    $requete.= ", `parentid` =".$news["parentid"];
        
    $requete.= ", `ordering` =".$news["ordering"];
        
    $requete.= ", `access` =".$news["access"];
        
    $requete.= ", `metadata` =\"".htmlentities($news["metadata"]);
        
    $requete.= "\", `state` =".$news["state"];
        
    $requete.= ", `mask` =".$news["mask"];
        
    $requete.= ";";
        
        if(!
    mysql_query($requete)){
            die (
    'Requete Impossible : <br />----------<br />'.$requete.'<br />----------<br /><br />'.mysql_error());
        }
    }
    echo 
    '--- Toutes les news ajoutées --- <br />';

    mysql_close($link);
    ?>

  • #2
    Voici maintenant une version mise à jour (et débuggée... à peu près) du script d'ajout des utilisateurs xoops vers joomla !

    Vos commentaires sont les bienvenus.

    Code PHP:
    <?php
    // Les variables utiles
    $host "localhost";
    $user "";
    $pass "";
    $db1 "";
    $db2 "";
    $tbXoops "";
    $tbJoomla "";

    // on se connecte à la BDD
    $link mysql_connect($host$user$pass);
    if (!
    $link) {
        die(
    'Connexion impossible : ' mysql_error());
    }
    echo 
    '--- Connecté correctement --- <br />';

    // on choisit la BDD xoops
    $db_selected mysql_select_db($db1$link);
    if (!
    $db_selected) {
       die (
    'Impossible de sélectionner la base de données : ' mysql_error());
    }

    // Export XOOPS login information to Joomla

    $sql "SELECT * FROM ".$tbXoops."_users WHERE uid > 1";
    $result mysql_query($sql);
    $id 62;
    echo 
    '--- Users Xoops récupérés --- <br />';

    // on choisit la BDD joomla
    $db_selected mysql_select_db($db2$link);
    if (!
    $db_selected) {
       die (
    'Impossible de sélectionner la base de données : ' mysql_error());
    }

    $ok=0;

    while (
    $row mysql_fetch_object($result)) {
        
    // convert XOOPS rank to Joomla usertype
        // $gid is group_id from jos_core_acl_aro_groups (18: registered, 25: super admin)
        
    if ($row->rank == 7) {
            
    $type "Super Administrator";
            
    $gid 25;
        }
        else {
            
    $type "Registered";
            
    $gid 18;
        }

        
    $date date("Y-m-d H:i:s");

        
    $id++;

        
    // Joomla block field: 1: unconfirmed email, 0: confirmed email
        // XOOPS level field : 0: unconfirmed email, 1: confirmed email

        // insert into main Joomla user table
        
    $sql "INSERT INTO ".$tbJoomla."_users (id, name, username, email, password, usertype, block, sendEmail, gid, registerDate) VALUES ($id, '$row->uname', '$row->loginname', '$row->email', '$row->pass', '$type', 0, 1, $gid, '$date')";
        if(!
    mysql_query($sql)){
            die (
    'Requete Impossible : <br />----------<br />'.$sql.'<br />----------<br /><br />'.mysql_error());
        }    
    //$id = mysql_insert_id();

        // insert into lookup tables
        
    $sql "INSERT INTO ".$tbJoomla."_core_acl_aro (section_value, value, order_value, name, hidden) VALUES ('users', '$id', 0, '$row->uname', 0)";
        if(!
    mysql_query($sql)){
            die (
    'Requete Impossible : <br />----------<br />'.$sql.'<br />----------<br /><br />'.mysql_error());
        }    
    //$id = mysql_insert_id();
        
    $id2 mysql_insert_id();

        
    $sql "INSERT INTO ".$tbJoomla."_core_acl_groups_aro_map (group_id, aro_id) VALUES ($gid$id2)";
        if(!
    mysql_query($sql)){
            die (
    'Requete Impossible : <br />----------<br />'.$sql.'<br />----------<br /><br />'.mysql_error());
        }    
    //$id = mysql_insert_id();
        
    $ok 1;
    }

    if(
    $ok ==1){
        echo 
    '--- Import Joomla déroulé correctement --- <br />';
    }
    ?>

    Commentaire


    • #3
      Comment utiles-t-on ces scripts?

      Bonjour et merci pour ces 2 scripts que je vais m'empresser de tester, mais comment faire pour les utiliser?
      d'abord installer joomla et ensuite on upload ces 2 scripts en php sur le site pour faire la conversion?
      Merci en tout cas du partage

      Commentaire


      • #4
        migration réussie

        Et voilà qui est fait! Félicitations

        Ces 2 scripts sont vraiment parfaits!
        Juste une chose que j'ai dû modifier dans le 1er: remplacer la commande str_ireplace par la commande str_replace...
        Je ne m'y connait pas assez pour comprendre le pourquoi, mais ça marche

        PS: à mon avis il faudrait les mettre un peu plus en valeur ou dans la FAQ du site ça peut vraiment servir, mais c'est dur à trouver...

        Commentaire


        • #5
          Merci pour ces scripts. J'ai peut-être loopé un trucs, mais ca m'écrit ca lorsque j'execute le fichier php:

          --- Connecté correctement ---
          --- Users Xoops récupérés ---
          Impossible de sélectionner la base de données : Access denied for user 'bd_sous_xoops'@'localhost' to database 'bd_sous_joomla'

          Voilà, si quelqu'un pourrait m'aider ce serait énormément apprécié.

          Commentaire


          • #6
            certainement une erreur d'identification de connexion à la BDD de joomla?

            Commentaire


            • #7
              Re : Script migration News de Xoops 2.2 vers Joomla

              Bonjour,

              Je suis en train de basculer un site de xoops 2.2.3 vers joomla 1.7.

              Dans le but de récupérer mes utilisateurs j'ai testé le second script en essayant de récupérer les utilisateurs sur une base joomla 1.5.

              J'ai l'erreur suivante qui s'inscrit :

              - Connecté correctement ---
              --- Users Xoops récupérés ---
              Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\transfert-user.php on line 39

              Pouvez vous m'aidez à résoudre ce problème ?

              Merci

              Commentaire

              Annonce

              Réduire
              1 sur 2 < >

              C'est [Réglé] et on n'en parle plus ?

              A quoi ça sert ?
              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
              Comment ajouter la mention [Réglé] à votre discussion ?
              1 - Aller sur votre discussion et éditer votre premier message :


              2 - Cliquer sur la liste déroulante Préfixe.

              3 - Choisir le préfixe [Réglé].


              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

              2 sur 2 < >

              Assistance au forum - Outil de publication d'infos de votre site

              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

              UTILISER À VOS PROPRES RISQUES :
              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

              Problèmes connus :
              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

              Installation :

              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

              Archive zip : https://github.com/AFUJ/FPA/zipball/master

              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
              et remplacer www. votresite .com par votre nom de domaine


              Exemples:
              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
              Télécharger le script fpa-fr.php dans: /public_html/
              Pour executer le script: http://www..com/fpa-fr.php

              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
              Télécharger le script fpa-fr.php dans: /public_html/cms/
              Pour executer le script: http://www..com/cms/fpa-fr.php

              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
              Voir plus
              Voir moins
              Travaille ...
              X