Importer les scripts vbulletin5.rb

J’utilise le script d’importation officiel pour vBulletin v5 et j’ai rencontré un problème.

Ma structure de forum vBulletin ressemble à ceci :

/forum/
/forum/sous-catégorie1/
/forum/sous-catégorie1/sujet1/
/forum/sous-catégorie1/sujet2/
/forum/sous-catégorie2/
/forum/sous-catégorie2/sujet1/
/forum/sous-catégorie2/sujet2/

Lorsque j’exécute le script d’importation, cela se traduit par deux catégories dans Discourse sans aucun sujet :

/c/sous-catégorie1
/c/sous-catégorie2

J’ai consulté un autre forum vBulletin et j’ai remarqué qu’ils n’imbriquaient pas leurs URL. J’en déduis maintenant que c’est le changement que je dois apporter à mon forum avant de pouvoir utiliser le script :

/forum/
/forum/sous-catégorie1/
/forum/sous-catégorie2/
/forum/sujet1a/
/forum/sujet2a/
/forum/sujet1b/
/forum/sujet2b/

Ensuite, je devrai réattribuer manuellement les catégories à chaque sujet.

Quelqu’un a-t-il de l’expérience avec ce script ?

Y a-t-il peut-être quelque chose qui attire votre attention dans le script, qui pourrait être modifié pour qu’il puisse gérer une structure plus imbriquée ? Il est possible que je me trompe complètement de voie.

Par « thread », voulez-vous dire un sujet de discussion ? Les sujets sont-ils créés mais pas dans les bonnes catégories ?

Salut Jay,

Merci pour ta réponse.

Ah oui — je veux dire les sujets Discourse. Il n’y a rien d’autre que ces catégories vides. Et tous les utilisateurs ont été importés avec succès.

Mike

Quelque chose empêche l’importation des sujets et des messages. Je penserais que vous devriez voir des erreurs lors de l’exécution. Les sujets et les messages sont créés après les utilisateurs. Je crois que les sujets et les messages sont gérés dans des fonctions séparées. L’importateur devrait vous afficher la progression pour ces éléments, tout comme il l’a fait pour les utilisateurs.

Aucun message d’erreur n’apparaît lors de l’importation, seulement quelques avertissements concernant des adresses e-mail d’utilisateurs invalides lorsque la fonction create_users s’exécute. Cependant, l’importation des utilisateurs se termine avec succès. Voici le journal (j’ai supprimé les avertissements car ils contenaient des adresses e-mail de clients) :

importing posts...
5 / 5 (100.0%)  [290527 items/min]                                                            
importing attachments...   
20182 / 5 (403640.0%)

Je pense que c’est ici qu’il ne voit que mes cinq catégories comme des publications et les importe. Et il ne sait pas quoi faire de toutes les pièces jointes des sujets réels qui n’ont pas été importés ?

Avertissement :

Au départ, l’importation a échoué car la base de données vBulletin que l’on m’a fournie ne contenait pas de table customprofilepic - j’ai ajouté une table vide ici.

Il n’y avait également aucun avatar personnalisé - le répertoire AVATAR_DIR, référencé dans le script d’importation, est donc simplement un dossier vide que j’ai créé. J’ai commenté les lignes suivantes dans le script d’importation qui faisaient référence à ces ressources :

create_users(users, total: user_count, offset: offset) do |user|
        username = @htmlentities.decode(user["username"]).strip
        {
          id: user["userid"],
          name: username,
          username: username,
          email: user["email"].presence || fake_email,
          admin: user['admin'] == 1,
          password: user["password"],
          website: user["homepage"].strip,
          title: @htmlentities.decode(user["usertitle"]).strip,
          primary_group_id: group_id_from_imported_group_id(user["usergroupid"]),
          created_at: parse_timestamp(user["joindate"])
          # post_create_action: proc do |u|
          #   @old_username_to_new_usernames[user["username"]] = u.username
          #   import_profile_picture(user, u)
          #   import_profile_background(user, u)
          # end
        }
      end

Mais à ma connaissance, ces modifications n’affectent que la création des utilisateurs. Et les utilisateurs sont créés avec succès.

Voici le script d’importation complet que j’utilise :

Le script récupère tous les sujets depuis la table node de la base de données vBulletin, qui est présente et contient environ 34 000 publications. Les noms des colonnes sont identiques à ceux référencés par le script :

Cela devrait fonctionner sans problème :roll_eyes:

Le script d’importation recherche contenttypeid=23 et contenttypeid=22 pour créer des publications.

En parcourant rapidement la table node, je peux affirmer que le 23 correspond à une publication avec une pièce jointe, et le 22 devrait correspondre à la pièce jointe elle-même.

La majorité des publications ont contenttypeid=21 — des publications sans pièces jointes. Je ne vois pas d’importation pour celles-ci. Ou cela est-il couvert par :

post_count = mysql_query("SELECT COUNT(nodeid) cnt FROM #{DBPREFIX}node WHERE parentid NOT IN (
SELECT nodeid FROM #{DBPREFIX}node WHERE contenttypeid=23 ) AND contenttypeid=22;").first["cnt"]

Cela parcourt tout ce qui reste une fois l’importation des types 23/22 terminée. Mais il existe d’autres identifiants de type de contenu en plus de 23/22/21 — donc cela les inclurait également.


Les catégories sont importées par rapport à un ROOT_NODE préconfiguré à 2. Je devrai peut-être le définir sur 3 pour prendre en charge mes URL imbriquées sur « 3 niveaux » ?

MISE À JOUR : Je viens de relancer l’importation avec ROOT_NODE=3, mais cela n’a rien changé.

Il semble que votre vBulletin soit différent de ce que le script attend. Avant de pouvoir importer les publications, vous devrez déterminer pourquoi aucun des sujets n’a été créé.

D’accord. C’est contenttypeid qui pose problème :

def import_categories
    puts "", "importation des catégories de premier niveau..."

    categories = mysql_query("SELECT nodeid AS forumid, title, description, displayorder, parentid
	      FROM #{DBPREFIX}node
          WHERE parentid=#{ROOT_NODE}
        UNION
          SELECT nodeid, title, description, displayorder, parentid
          FROM #{DBPREFIX}node
          WHERE contenttypeid = 20
            AND parentid IN (SELECT nodeid FROM #{DBPREFIX}node WHERE parentid=#{ROOT_NODE})").to_a

Par exemple, la fonction import_categories utilise contenttypeid = 23, qui est le même identifiant que le script utilise pour les publications. L’identifiant des catégories est 20. En modifiant cela dans le script, je parviens enfin à voir mes sous-catégories / sujets :raised_hands:

Il ne manque plus que les fils de discussion / publications.

J’ai soumis une demande de tirage (pull request) avec plusieurs mises à jour pour l’importateur VBulletin5. L’une des modifications les plus importantes est la suppression de ces identifiants codés en dur.

Il y a également une meilleure prise en charge des fichiers joints, et l’importateur importe désormais les étiquettes et crée des permaliens pour les sujets et les (sous-)catégories.