Migrare un forum phpBB3 a Discourse

Anche Markdown dovrebbe funzionare, ma immagino che usare <strong> possa aggirare ancora più casi limite. Tieni presente che mescolare HTML e Markdown presenta anche delle insidie… Ecco una semplice soluzione Markdown:

**testo\\\n\\\nmultilinea**

Sono curioso, da quale versione di phpBB stai importando? La conversione da BBCode a Markdown è molto migliore per la 3.2 rispetto alle versioni precedenti. Idealmente, non dovresti più vedere [b] nei post importati.

2 Mi Piace

Immagino che tu abbia ragione, non so perché non ci abbia pensato prima…

Sto migrando da phpBB 3.0.7-PL1.

2 Mi Piace

Ti farai un grande favore se aggiornerai alla versione 3.2 prima dell’importazione. :wink:

Assicurati che i BBCodes in tutti i post vengano migrati al nuovo formato di archiviazione eseguendo il reparser di phpBB: https://www.phpbb.com/support/docs/en/3.3/kb/article/phpbb-32%2B-text-reparser/

3 Mi Piace

Ci ho pensato all’inizio, ma… odio le cose informatiche :sweat_smile:
Non conosco bene phpBB e non volevo dover gestire eventuali errori che potessero verificarsi durante un aggiornamento da una versione così vecchia.

Dato che lo script di migrazione di Discourse è compatibile con phpBB 3.0, ho scelto di non aggiornare phpBB…
Forse alcuni problemi di bbcode che ho riscontrato sarebbero stati evitati con un aggiornamento di phpBB. Cose come elenchi annidati, [b] con nuove righe, ecc… :man_shrugging:

Ma dato che ho iniziato a lavorare all’importazione a dicembre, sono vicino ad avere un’importazione che funzioni bene (idealmente, il nuovo forum sarebbe online tra circa due settimane…) e non sono sicuro di voler sperimentare ora un aggiornamento di phpBB, soprattutto se devo rivedere tutte le correzioni di importazione personalizzate che ho fatto per vedere se l’importatore phpBB 3.2 gestisce meglio queste cose :sweat_smile:. Sarebbe dispendioso in termini di tempo.

Detto questo… potrei sperimentare delle cose questo fine settimana pomeriggio se mi annoio abbastanza!


modifica: Ci ho provato; spostarsi su un nuovo server e poi aggiornare a pbpBB 3.2 è un problema. Problemi HTTPS. Problemi di cache. Altri problemi. Procedure contorte e frustranti. Il tutorial ufficiale consiglia di utilizzare strumenti che richiedono versioni PHP obsolete (ehi, PHP 5, è da tanto che non ti vedevo…). A quanto pare, a volte mi annoio ma non sono pazzo, almeno non abbastanza da fare questo tipo di cose.

Gerhard! Mi stai ingannando! Aggiornare alla 3.2 non è un grande favore! :laughing:

Ma basta parlare di phpBB stesso… E lodate l’aggiornamento con un clic di Discourse.

1 Mi Piace

Ciao,

Sto cercando di migrare gli utenti di WordPress a Discourse. Sono riuscito a seguire le istruzioni per connettermi al nostro database WP e importare gli utenti nel container Docker. Volevo assicurarmi che nessuna email venga inviata durante o dopo la migrazione perché stiamo utilizzando il plugin SSO di WordPress.

Ho aggiunto il prefisso “import_” alle email in modo che non le ricevano nel caso in cui ci siano attività in background che inviano conferme via email dopo il completamento della migrazione.

Vedo che dopo la migrazione viene impostata la colonna last_emailed_at:

So che viene impostata da opts[:last_emailed_at] = opts.fetch(:last_emailed_at, Time.now) in ImportScripts::Base::create_user()

Esiste una funzione simile a admin.email_tokens.update_all(confirmed: true) utilizzata in ImportScripts::Base::create_admin dove viene confermata l’email?

Non vedo alcun log che mostri le email inviate. Sono state effettivamente inviate delle email? Discourse tenterà di inviare email dopo che avrò modificato le email in quelle valide?

1 Mi Piace

Questo è fuori tema, dato che questo argomento riguarda la migrazione di phpBB3… :wink:

Consiglio di utilizzare un dominio .invalid se si desidera assicurarsi che alcuni utenti non ricevano mai email (ad esempio, foo@mywpimport.invalid). Ma, se si desidera semplicemente disabilitare le email in uscita finché non si è pronti, impostare l’impostazione del sito disable_emails su “yes” o “non-staff” è la vostra migliore opzione!

Le email in uscita sono automaticamente disabilitate durante un’importazione. I valori dell’attributo last_emailed_at provengono probabilmente da Discourse che tenta di inviare un’email, prima che scopra che non gli è permesso.

Discourse tenterà sicuramente di inviare email dopo la migrazione.

2 Mi Piace

Grazie, ho prima provato una stringa vuota per il campo email e la classe base ImportScript ha generato email false con il dominio non valido. Hanno anche l’attributo last_emailed_at impostato.

Quindi quello che stai dicendo è che non appena correggo l’email dal database, discourse tenterà di inviare l’email? Ma un normale accesso autenticato da WordPress non richiede la conferma via email. Non c’è modo di aggirare questo con ImportScript?

1 Mi Piace

La mia migrazione è completata e ha avuto successo.
Tuttavia, riscontro due problemi. Fatemi sapere se sono fuori tema.

  1. Alcuni contenuti dei post presentano questo tipo di contenuto:

    [url=https://www.casimages.com/i/1907271141431956116331631.jpg.html][
    [img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img][/url]
    

    Le immagini vengono visualizzate nell’anteprima, ma sono corrotte nel post stesso, anche dopo aver ricostruito l’HTML:

    L’HTML generato per ogni immagine è:

    <p><a href="https://www.casimages.com/i/1907271151181956116331666.jpg.html" data-bbcode="true"><span alt="" class="broken-image" title="Questa immagine è corrotta"><svg class="fa d-icon d-icon-unlink svg-icon" aria-hidden="true"><use href="#unlink"></use></svg></span></a></p>
    

    Incontro questo problema su molti post. Avete qualche idea per risolverlo globalmente?

  2. Come molti vecchi forum, i vecchi link di Imageshack sono interrotti da molto tempo e per sempre. Ma alcuni link ora visualizzano una bandiera ucraina invece di nulla:

    Come gestireste questo comportamento?
    Sono aperto a qualsiasi idea, ma un amministratore del forum ha un backup statico dell’intero forum su un vecchio disco rigido, dove la maggior parte delle vecchie immagini sono valide (poiché scaricate e archiviate localmente). Sto pensando che in futuro potrei creare uno script che sostituirebbe tutti i link “morti” di Imageshack con le immagini valide dalla versione statica. Sembra molto complicato da fare, ma per questo motivo, non sono sicuro di voler semplicemente rimuovere tutti i link di Imageshack dal forum sostituendoli con una stringa vuota o qualcosa di simile.

1 Mi Piace

È il ritorno a capo che causa il problema? Questa sarebbe la mia ipotesi. Dovrai rimappare quei BBCodes per rimuovere il ritorno a capo. Replace a string in all posts dovrebbe essere utile.

Forse per ora convertirli in commenti HTML? Potresti poi sostituirli con le immagini memorizzate.

2 Mi Piace

Non sembra che sia questo il problema:
Ho aggiunto interruzioni di riga in modo che il contenuto appaia così:

[url=https://www.casimages.com/i/1907271141431956116331631.jpg.html]

[img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img]

[/url]

E il risultato:

Esempi di post:

Sì, è una buona idea! :+1: Quindi, in pratica, sostituire le stringhe (dall’argomento che hai collegato) usando le espressioni regolari per puntare solo ai link di Imageshack, giusto?

2 Mi Piace

Quindi, questo non è il problema dopo aver sperimentato con nuove righe.

Ma se copio e incollo il contenuto del post in un nuovo post sullo stesso forum, il contenuto viene visualizzato correttamente :woozy_face: :question: :


(e anche le immagini collegate vengono scaricate con successo localmente)

Vs:

Ho provato a rielaborare il post con le immagini rotte (che vengono visualizzate correttamente nell’anteprima del messaggio, vedi il mio post precedente) ma non ha risolto nulla.

Per quanto ne so, il contenuto grezzo di entrambi i post è esattamente lo stesso.

Ma il contenuto elaborato dal primo post (seconda riga) porta a immagini rotte:

Sono perplesso.

1 Mi Piace

Odd thing:
If I try to rebuild the HTML of any post, I got an error 500:

Logs show a fatal error and a warning:

Screenshot of the log window:

Fatal error:

ArgumentError (wrong number of arguments (given 0, expected 1)) lib/guardian/ensure_magic.rb:11:in 'method_missing' app/controllers/posts_controller.rb:570:in 'rebake' app/controllers/application_cont

plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
lib/guardian/ensure_magic.rb:11:in `method_missing'
app/controllers/posts_controller.rb:570:in `rebake'
actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.4.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:358:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'
message_bus (4.2.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:202:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

It was in safe-mode with all theme and plugins disabled, but this code block mentions on the first line:
plugins/discourse-chat/lib/guardian_extensions.rb:71:in 'can_rebake?'

Warning:

Failed to handle exception in exception app middleware : ArgumentError : wrong number of arguments (given 0, expected 1)

/var/www/discourse/plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
/var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'
/var/www/discourse/app/controllers/posts_controller.rb:570:in `rebake'
actionpack-6.1.4.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:228:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n-1.10.0/lib/i18n.rb:328:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `block in instrument'
activesupport-6.1.4.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `instrument'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord-6.1.4.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:165:in `process'
actionview-6.1.4.1/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack-6.1.4.1/lib/action_controller/metal.rb:190:in `dispatch'
actionpack-6.1.4.1/lib/action_controller/metal.rb:254:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:842:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.3/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.3/lib/rack/head.rb:12:in `call'
actionpack-6.1.4.1/lib/action_dispatch/http/permissions_policy.rb:22:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:358:in `call'
rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster-2.10.1/lib/logster/middleware/reporter.rb:43:in `call'
railties-6.1.4.1/lib/rails/rack/logger.rb:37:in `call_app'
railties-6.1.4.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:23:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.3/lib/rack/method_override.rb:24:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiler.rb:249:in `call'
message_bus-4.2.0/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:202:in `call'
railties-6.1.4.1/lib/rails/engine.rb:539:in `call'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

Do this information help?
I’m doing what I can to try to repair these posts, but I’m starting to believe this has something to do with Discourse itself and not something on my side maybe? :person_shrugging:


edit: see the automatically linked post below.


Issue resolved:

Now I just have to rebake all my posts. :wink:


Another edit:

Could have worked for sure, and will for images that still have their old plain URL, but:

  • Since all the old Imageshack broken links were replaced by valid images displaying a Ukraine flag by Imageshack itself, they were automatically uploaded to Discourse, changing their URL to a markdown local image link.

  • Fortunately, all these flags were uploaded to Discourse with identical links (![](upload://sOlmOE8qRgLUJ8cCe6N1JNkDV3Y.jpeg) in my case - excellent Discourse behavior by the way :+1:), which means that they will be very easy to target and remove/replace with something else. :slight_smile:

I’m just writing this to inform people that would encounter the same issue as me after a migration.

4 Mi Piace

Sembra che il valore di poll_option_total sia a volte errato. Vedo più voti non anonimi per opzione rispetto al valore di poll_option_total. E tutti questi utenti esistono.

Usare GREATEST(..., 0) lo risolve. Almeno, non va in crash.

        SELECT o.poll_option_id, o.poll_option_text, o.poll_option_total AS total_votes,
          GREATEST(CAST(o.poll_option_total AS SIGNED) - (
            SELECT COUNT(DISTINCT v.vote_user_id)
              FROM #{@table_prefix}poll_votes v
                JOIN #{@table_prefix}users u ON (v.vote_user_id = u.user_id)
                JOIN #{@table_prefix}topics t ON (v.topic_id = t.topic_id)
              WHERE v.poll_option_id = o.poll_option_id AND v.topic_id = o.topic_id
          ),0) AS anonymous_votes
        FROM #{@table_prefix}poll_options o
        WHERE o.topic_id = #{topic_id}
        ORDER BY o.poll_option_id
3 Mi Piace

Voglio davvero migrare il forum phpbb 3.3 della mia azienda a Discourse. Qualcuno ha idea di quando sarà supportato?

1 Mi Piace
3 Mi Piace

Oh wow, fantastico! Grazie!

1 Mi Piace

Mi scuso in anticipo se dovessi iniziare una nuova discussione per questo.

Ho un forum phpBB in una sottocartella:

thedomain.com/forum/

Ho intenzione di utilizzare lo script di importazione per migrare da phpBB a Discourse in un sottodominio; cioè:

forum.thedomain.com

Quindi, sembra che tutto ciò che dovrò fare - per il dominio e i permalink - sarà impostare quanto segue in settings.yml utilizzando HTTPS sul nuovo sito:

site_prefix:
    # questo è necessario per riscrivere i link interni nei post
    original: thdomain.com/forum    # senza http(s)://
    new: https://forum.thedomain.com       # con http:// o https://

  # Abilita questo, se vuoi reindirizzare i vecchi link del forum alle nuove posizioni.
  permalinks:
    categories: true  # reindirizza   /viewforum.php?f=1            a  /c/category-name
    topics: true      # reindirizza   /viewtopic.php?f=6&t=43       a  /t/topic-name/81
    posts: true      # reindirizza   /viewtopic.php?p=2455#p2455   a  /t/topic-name/81/4
    # Aggiungi un prefisso a ciascun tipo di link, ad esempio 'forum' per reindirizzare /forum/viewtopic.php?f=6&t=43 a /t/topic-name/81
    # Lascialo vuoto se il tuo forum non è stato installato in una sottocartella.
    prefix: forum

E poi, sul server originale, che esegue Apache, in .htaccess con RewriteEngine già attivo, avrò bisogno di:

RewriteCond %{HTTP_HOST} ^thedomain.com
RewriteRule ^forum/(.*)$ https://forum.thedomain.com/$1 [L,R=301]

Se è davvero così facile, questo script è fantastico! :grinning:

Ho un paio di domande aggiuntive:

  1. I post sono impostati su “false” nelle impostazioni dei permalink. So che ci sono link in giro a post specifici, quindi vorrei che anche questi avessero i permalink. C’è qualche motivo per non impostarli su true; ad esempio, prestazioni o altro?
  2. Il prefisso va bene senza virgolette singole, o dovrebbe essere racchiuso tra virgolette come nel commento?
2 Mi Piace

Rallenterà leggermente l’importazione, ma non dovresti preoccupartene. È per lo più disabilitato per impostazione predefinita perché è raramente necessario.

Sì, va bene.

2 Mi Piace

Ho riscontrato un intoppo mentre mi preparo per questa importazione.

Il forum phpBB che ho intenzione di migrare utilizza un BBcode personalizzato che crea tag img HTML per le immagini archiviate in cartelle per anno in una directory esterna a phpBB, ma sullo stesso account utente sul server. Il BBcode ha il seguente formato:

[Gallery]{NUMBER1}|{NUMBER2}|{NUMBER3}|{SIMPLETEXT}[/Gallery]

Il {NUMBER1} e il {NUMBER2} sono interi per la larghezza e l’altezza dell’immagine, rispettivamente. Il {NUMBER3} è un intero per la cartella dell’anno in cui si trova l’immagine, e il {SIMPLETEXT} è il nome del file immagine. La sostituzione HTML per il BBcode è la seguente:

<img class="postimage gallery-image" src="/gallery/files/{NUMBER3}/{SIMPLETEXT}" width="{NUMBER1}" height="{NUMBER2}" />

Quello che devo capire è come gestire questo BBcode personalizzato con lo script di migrazione, sia per convertire il BBcode personalizzato in qualcosa che Discourse possa utilizzare, sia per capire dove inserire i file immagine nell’albero dei file per l’importazione.

Ho dato un’occhiata a Ruby-BBcode-to-MD, che afferma di “consentire di estendere facilmente questo set con tag personalizzati modificando tags.rb”. Ho dato un’occhiata a tags.rb, ma dato che è la prima volta che guardo codice Ruby, sono perso su come gestire il mio BBcode personalizzato poiché il suo formato separato da pipe differisce da qualsiasi BBcode ufficiale che il file tags.rb include e che avrei potuto usare come guida.

Non ho ancora caricato templates/import/phpbb3.template.yml, quindi immagino che questo aggiungerà il gem Ruby BBcode to MD?

Quindi ho delle domande:

  1. Qual è il modo migliore per gestire questo BBcode personalizzato per la migrazione? Modificare il file tags.rb è la strada giusta? (Se sì, farò qualche ricerca sulla programmazione Ruby e magari sulle regex, ma ogni suggerimento sarà benvenuto!)
  2. Qual è il posto migliore per inserire i file immagine per questa galleria nell’albero dei file di importazione in modo che vengano salvati in Discourse e visualizzati nei post importati?
1 Mi Piace

Quel gem non viene più utilizzato. Da quale versione di phpBB stai importando? Se è la v3.1 o inferiore, dovrai applicare un po’ di magia regex in discourse/script/import_scripts/phpbb3/support/text_processor.rb at ea2fd75d10e81687334f8d29e0d3e786dbdb4a53 · discourse/discourse · GitHub.

Per la v3.2 puoi aggiungere la gestione del BBCode in discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb at a71b219c9a18ad418e330282fde511bcb79ba7c4 · discourse/discourse · GitHub

2 Mi Piace