Importa script vbulletin5.rb

Sto utilizzando lo script di importazione ufficiale per vBulletin v5 e ho riscontrato un problema.

La struttura del mio forum vBulletin è la seguente:

/forum/
/forum/sub-category1/
/forum/sub-category1/thread1/
/forum/sub-category1/thread2/
/forum/sub-category2/
/forum/sub-category2/thread1/
/forum/sub-category2/thread2/

Quando eseguo lo script di importazione, questo si traduce in due categorie in Discourse senza alcun thread:

/c/sub-category1
/c/sub-category2

Ho esaminato un altro forum vBulletin e ho notato che non nidificano i loro URL. Ora ipotizzo che questo sia il cambiamento che devo apportare al mio forum prima di poter utilizzare lo script:

/forum/
/forum/sub-category1/
/forum/sub-category2/
/forum/thread1a/
/forum/thread2a/
/forum/thread1b/
/forum/thread2b/

In seguito, dovrei assegnare manualmente le categorie a ogni thread.

Qualcuno ha esperienza con l’uso di questo script?

Forse c’è qualcosa che salta all’occhio nello script che può essere modificato per gestire una struttura più nidificata? Potrei essere completamente sulla strada sbagliata.

Per “thread” intendi un argomento di Discourse? Gli argomenti vengono creati ma non nelle categorie corrette?

Ciao Jay,

grazie per la tua risposta.

Ah sì - mi riferisco ai Topics di Discourse. Non c’è nulla lì, solo quelle categorie vuote. E tutti gli utenti sono stati importati con successo.

Mike

C’è qualcosa che impedisce l’importazione di argomenti e post. Dovresti aver visto degli errori durante l’esecuzione. Gli argomenti e i post vengono creati dopo gli utenti. Credo che siano gestiti da funzioni separate. Il programma di importazione dovrebbe mostrarti l’avanzamento per questi elementi, proprio come ha fatto per gli utenti.

Non ci sono messaggi di errore durante l’importazione, solo alcuni avvisi relativi a indirizzi email utente non validi quando viene eseguita la funzione create_users. Tuttavia, l’importazione degli utenti ha successo alla fine. Ecco il log (ho rimosso gli avvisi perché contenevano indirizzi email dei clienti):

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

Penso che qui il sistema veda solo le mie cinque categorie come post e le importi, senza sapere cosa fare con tutti gli allegati relativi ai veri argomenti che non sono stati importati.

Disclaimer:

Inizialmente, l’importazione non è riuscita perché il database vBulletin che mi è stato fornito non conteneva la tabella customprofilepic. Ho aggiunto una tabella vuota.

Non c’erano avatar personalizzati, quindi la cartella AVATAR_DIR, a cui fa riferimento lo script di importazione, è semplicemente una cartella vuota che ho creato. Ho commentato le seguenti righe nello script di importazione che facevano riferimento a tali risorse:

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

Ma, a mio avviso, queste modifiche influenzano solo la creazione degli utenti. E gli utenti vengono creati correttamente.

Questo è lo script di importazione completo che sto utilizzando:

Lo script raccoglie tutti gli argomenti dalla tabella node nel database vBulletin, che è presente e contiene circa 34.000 post. I nomi delle colonne sono identici a quelli a cui fa riferimento lo script:

Sembra che dovrebbe funzionare senza problemi :roll_eyes:

Lo script di importazione cerca contenttypeid=23 e contenttypeid=22 per creare i post.

Dall’analisi della tabella node, posso affermare che 23 rappresenta un post con allegato, mentre 22 dovrebbe essere l’allegato stesso.

La maggior parte dei post ha contenttypeid=21 – post senza allegati. Non vedo un’importazione specifica per questi. O forse è coperto da:

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"]

Questo elabora tutto ciò che rimane dopo che l’importazione ha gestito i casi 23/22. Tuttavia, esistono altri ID di tipo di contenuto oltre a 23/22/21, quindi questo li includerebbe tutti.


Le categorie vengono importate in relazione a un ROOT_NODE impostato di default su 2. Potrebbe essere necessario impostarlo su 3 per supportare URL con “3 livelli di nidificazione”?

AGGIORNAMENTO: Ho appena rieseguito l’importazione con ROOT_NODE=3, ma non ha apportato alcuna modifica.

Sembra che il tuo vBulletin sia diverso da quanto previsto dallo script. Prima di poter importare i post, dovrai capire perché nessuno dei topic è stato creato.

Ok. È il contenttypeid a causare il problema:

def import_categories
    puts "", "importazione delle categorie di primo livello..."

    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

Ad esempio, la funzione import_categories utilizza contenttypeid = 23, che è lo stesso ID usato dallo script per i post. L’ID per le categorie è 20. Modificando questo valore nello script, sono finalmente riuscito a vedere le mie sottocategorie / argomenti :raised_hands:

Ora manca solo il recupero dei thread / post

Ho inviato una pull request con alcuni aggiornamenti per l’importatore VBulletin5. Una delle modifiche più importanti è l’eliminazione di questi ID hardcoded.

È inoltre presente un migliore supporto per i caricamenti e l’importatore ora importa i tag e crea permalink per i topic e le (sotto)categorie.