Problema di importazione phpBB

Non è raro che esistano nomi di file duplicati nei caricamenti; ogni bacheca deve tenerne conto. Ma in phpBB è possibile caricare due allegati di immagini diverse, entrambi con lo stesso nome, nello stesso post. phpBB gestisce questo memorizzando il nome effettivo del file come “real_filename” nella tabella degli allegati, ma il nome con hash che genera come “physical_filename”.

Ho 46 post convertiti dal mio forum phpBB che contengono immagini duplicate, poiché i nomi dei file sono gli stessi. In alcuni casi, è perché l’utente ha involontariamente pubblicato lo stesso file due volte. Ma in molti casi, non è così. Non sono sicuro di come l’utente ci sia riuscito, ma ho un esempio in cui ha caricato 11 immagini diverse in phpBB, ognuna chiamata “image.jpg” (un nome di file predefinito quando si trascina un’immagine da un’email sul desktop). La stessa immagine appare 11 volte in Discourse. Sembra che il convertitore identifichi un allegato phpBB da caricare tramite real_filename - aperto ai duplicati - piuttosto che physical_filename.

Fortunatamente, ho uno script ruby che identifica i post in postgres che contengono due volte lo stesso nome di file Discourse. Sarà doloroso (in particolare con il post con 11 duplicati!), ma posso risolverlo manualmente poiché la mia bacheca phpBB è ancora esistente. Ma solo per annotarlo come correzione importante, poiché prevedo che molti amministratori di bacheche phpBB passeranno a Discourse, come ho intenzione di fare io.

Grazie
Dan

1 Mi Piace

Per quanto ne so, Claude afferma che il problema è alla riga 24 in
/var/www/discourse/script/import_scripts/phpbb3/importers/attachment_importer.rb.

Il bug: Quando più allegati phpBB hanno lo stesso real_filename (ad esempio, “IMG_1234.jpg”), l’uploader vede che il nome del file esiste già e restituisce l’allegato esistente invece di crearne uno nuovo, anche se il physical_filename (file effettivo) è diverso.

La correzione sarebbe: Usare physical_filename come nome del file, oppure aggiungere attach_id per renderlo univoco.

Invece di
filename = CGI.unescapeHTML(row[:real_filename])

Usare:
filename = “#{row[:attach_id]}_#{CGI.unescapeHTML(row[:real_filename])}”

Non sembra una cattiva idea.