Migrer un forum phpBB3 vers Discourse

Le Markdown devrait également fonctionner, mais je suppose que l’utilisation de <strong> pourrait contourner encore plus de cas limites. Attention, le mélange de HTML et de Markdown présente également quelques pièges… Voici une solution Markdown simple :

**texte\\\n\\\nmultiligne**

Je suis curieux, à partir de quelle version de phpBB importez-vous ? La conversion de BBCode en Markdown est bien meilleure pour la version 3.2 que pour les versions précédentes. Idéalement, vous ne devriez même plus voir de [b] dans les messages importés.

2 « J'aime »

Je suppose que vous avez raison, je ne sais pas pourquoi je n’y ai pas pensé d’abord…

Je migre depuis phpBB 3.0.7-PL1.

2 « J'aime »

Vous vous rendrez un grand service en passant à la version 3.2 avant l’importation. :wink:

Assurez-vous que les BBCodes de tous les messages sont migrés vers le nouveau format de stockage en exécutant le reparseur phpBB : https://www.phpbb.com/support/docs/en/3.3/kb/article/phpbb-32%2B-text-reparser/

3 « J'aime »

J’y ai pensé au début, mais… je déteste les trucs informatiques :sweat_smile:
Je ne connais pas bien phpBB et je ne voulais pas avoir à gérer d’éventuelles erreurs qui pourraient survenir lors d’une mise à jour à partir d’une version aussi ancienne.

Comme le script de migration de Discourse est compatible avec phpBB 3.0, j’ai choisi de ne pas mettre à jour phpBB…
Peut-être que certains problèmes de bbcode que j’ai rencontrés auraient été évités avec une mise à jour de phpBB. Des choses comme les listes imbriquées, [b] avec des sauts de ligne, etc… :man_shrugging:

Mais comme j’ai commencé à travailler sur l’importation en décembre, je suis sur le point d’avoir une importation qui fonctionne bien (idéalement, le nouveau forum serait en ligne dans peut-être deux semaines…) et je ne suis pas sûr de vouloir expérimenter maintenant une mise à jour de phpBB, surtout si je dois revoir toutes les corrections d’importation personnalisées que j’ai faites pour voir si l’importateur phpBB 3.2 gère mieux ces choses :sweat_smile:. Ce serait chronophage.

Cela dit… je pourrais expérimenter des choses ce week-end après-midi si je m’ennuie assez !


edit : J’ai essayé ; déménager sur un nouveau serveur puis passer à pbpBB 3.2 est un casse-tête. Problèmes HTTPS. Problèmes de cache. Autres problèmes. Procédures alambiquées et frustrantes. Le tutoriel officiel conseille d’utiliser des outils nécessitant une version obsolète de PHP (salut, PHP 5, ça fait longtemps…). Apparemment, je m’ennuie parfois mais je ne suis pas fou - pas assez pour faire ce genre de choses au moins.

Gerhard ! Tu es trompeur ! Passer à la version 3.2 n’est pas un grand service ! :laughing:

Mais assez parlé de phpBB lui-même… Et louons la mise à niveau en un clic de Discourse.

1 « J'aime »

Salut,

J’essaie de migrer des utilisateurs WordPress vers Discourse. J’ai réussi à suivre les instructions pour me connecter à notre base de données WP et importer les utilisateurs dans le conteneur Docker. Je voulais m’assurer qu’aucun e-mail ne serait envoyé pendant ou après la migration car nous utilisons le plugin SSO WordPress.

J’ai préfixé les e-mails avec “import_” pour qu’ils ne les reçoivent pas au cas où des tâches d’arrière-plan enverraient une confirmation par e-mail après la fin de la migration.

Je vois que la colonne last_emailed_at est définie après la migration :

Je sais que c’est défini par opts[:last_emailed_at] = opts.fetch(:last_emailed_at, Time.now) dans ImportScripts::Base::create_user().

Existe-t-il une fonction similaire à admin.email_tokens.update_all(confirmed: true) utilisée dans ImportScripts::Base::create_admin où l’e-mail est confirmé ?

Je ne vois aucun journal indiquant l’envoi d’e-mails. Des e-mails ont-ils réellement été envoyés ? Discourse essaiera-t-il d’envoyer des e-mails après que j’aie modifié les e-mails pour qu’ils soient valides ?

1 « J'aime »

Ceci est hors sujet, car ce sujet concerne la migration de phpBB3… :wink:

Je recommande d’utiliser un domaine .invalid si vous voulez vous assurer que certains utilisateurs ne recevront jamais d’e-mails (par exemple, foo@mywpimport.invalid). Mais, si vous voulez simplement désactiver les e-mails sortants jusqu’à ce que vous soyez prêt, définir le paramètre du site disable_emails sur « yes » ou « non-staff » est votre meilleure option !

Les e-mails sortants sont automatiquement désactivés pendant une importation. Les valeurs de l’attribut last_emailed_at proviennent probablement de Discourse qui essaie d’envoyer un e-mail, avant qu’il ne découvre que cela n’est pas autorisé.

Discourse essaiera certainement d’envoyer des e-mails après la migration.

2 « J'aime »

Merci, j’ai d’abord essayé une chaîne vide pour le champ e-mail et la classe de base ImportScript a généré de faux e-mails avec un domaine invalide. Ils ont également l’attribut last_emailed_at défini.

Donc, ce que vous dites, c’est qu’dès que j’aurai corrigé l’e-mail de la base de données, discourse essaiera d’envoyer l’e-mail ? Mais une connexion normale authentifiée par WordPress ne nécessite pas de confirmation par e-mail. Il n’y a aucun moyen de contourner cela avec ImportScript ?

1 « J'aime »

Ma migration est terminée et réussie.
Cependant, je rencontre deux problèmes. Faites-moi savoir si c’est hors sujet.

  1. Certains contenus de messages présentent ce type de contenu :

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

    Les images s’affichent dans l’aperçu, mais sont brisées dans le message lui-même, même après avoir reconstruit le HTML :

    Le HTML généré pour chaque image est :

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

    Je rencontre ce problème sur de nombreux messages. Avez-vous une idée pour corriger cela globalement ?

  2. Comme beaucoup de vieux forums, les anciens liens Imageshack sont brisés depuis longtemps, et pour toujours. Mais certains liens affichent maintenant un drapeau ukrainien au lieu de rien :

    Comment géreriez-vous ce comportement ?
    Je suis ouvert à toute idée, mais un administrateur du forum a une sauvegarde statique de l’ensemble du forum sur un vieux disque dur, où la plupart des anciennes images sont valides (car téléchargées et stockées localement). Je pense qu’à l’avenir, je pourrais peut-être créer un script qui remplacerait tous les liens Imageshack “morts” par les images valides de la version statique. Cela semble très délicat à faire, mais pour cette raison, je ne suis pas sûr de vouloir simplement supprimer tous les liens Imageshack du forum en les remplaçant par une chaîne vide ou quelque chose de similaire.

1 « J'aime »

Est-ce le saut de ligne qui cause le problème ? Ce serait ma supposition. Vous devrez remapper ces BBCodes pour supprimer le saut de ligne. Replace a string in all posts devrait être utile.

Peut-être les convertir en commentaires HTML pour l’instant ? Vous pourriez plus tard les remplacer par les images stockées.

2 « J'aime »

Il ne semble pas que ce soit le problème :
J’ai ajouté des sauts de ligne pour que le contenu ressemble à ceci :

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

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

[/url]

Et le résultat :

Exemples de posts :

Oui, c’est une bonne idée ! :+1: Donc en gros, remplacer les chaînes (du sujet que vous avez lié) en utilisant des regex pour cibler uniquement les liens Imageshack, n’est-ce pas ?

2 « J'aime »

Donc, ce n’est pas le problème après avoir expérimenté avec de nouvelles lignes.

Mais si je copie-colle le contenu du message dans un nouveau message sur le même forum, le contenu s’affiche correctement :woozy_face: :question: :


(et aussi les images hotlinked sont téléchargées avec succès localement)

Vs :

J’ai essayé de refaire la cuisson du message avec les images cassées (qui s’affichent correctement dans l’aperçu du message, voir mon message précédent) mais cela n’a rien résolu.

Autant que je sache, le contenu brut des deux messages est exactement le même.

Mais le contenu cuit du premier message (deuxième ligne) entraîne des images cassées :

Je suis perplexe.

1 « J'aime »

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 « J'aime »

Il semble que la valeur poll_option_total soit parfois incorrecte. Je constate plus de votes non anonymes par option que la valeur de poll_option_total. Et tous ces utilisateurs existent.

Utiliser GREATEST(..., 0) résout le problème. Au moins, cela ne plante pas.

        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 « J'aime »

Je souhaite vraiment migrer mon forum phpbb 3.3 d’entreprise vers Discourse. Quelqu’un a-t-il une idée de quand ce sera pris en charge ?

1 « J'aime »
3 « J'aime »

Oh wow, c’est super ! Merci !

1 « J'aime »

Si je dois démarrer un nouveau fil de discussion pour cela, je m’excuse par avance.

J’ai un forum phpBB dans un sous-dossier :

thedomain.com/forum/

Je prévois d’utiliser le script d’importation pour migrer de phpBB vers Discourse dans un sous-domaine ; c’est-à-dire :

forum.thedomain.com

Donc, il semble que tout ce que j’aurai à faire - pour le domaine et les permaliens - sera de définir ce qui suit dans settings.yml en utilisant HTTPS sur le nouveau site :

site_prefix:
    # ceci est nécessaire pour réécrire les liens internes dans les messages
    original: thedomain.com/forum    # sans http(s)://
    new: https://forum.thedomain.com       # avec http:// ou https://

  # Activez ceci si vous souhaitez rediriger les anciens liens du forum vers les nouveaux emplacements.
  permalinks:
    categories: true  # redirige   /viewforum.php?f=1            vers  /c/category-name
    topics: true      # redirige   /viewtopic.php?f=6&t=43       vers  /t/topic-name/81
    posts: true      # redirige   /viewtopic.php?p=2455#p2455   vers  /t/topic-name/81/4
    # Ajoutez un préfixe à chaque type de lien, par exemple 'forum' pour rediriger /forum/viewtopic.php?f=6&t=43 vers /t/topic-name/81
    # Laissez-le vide si votre forum n'a pas été installé dans un sous-dossier.
    prefix: forum

Et ensuite, sur le serveur d’origine, qui exécute Apache, dans le .htaccess avec RewriteEngine déjà activé, j’aurai besoin de :

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

Si c’est vraiment aussi simple, ce script est génial ! :grinning:

J’ai quelques questions supplémentaires :

  1. Les messages sont définis sur “false” dans les paramètres des permaliens. Je sais qu’il existe des liens vers des messages spécifiques, je voudrais donc qu’ils aient également des permaliens. Y a-t-il une raison de ne pas les définir sur true ; par exemple, des problèmes de performance ou autre chose ?
  2. Le préfixe est-il correct sans apostrophes, ou doit-il être mis entre guillemets comme dans le commentaire ?
2 « J'aime »

Cela ralentira légèrement l’importation, mais vous ne devriez pas vous en soucier. C’est principalement désactivé par défaut car c’est rarement nécessaire.

Oui, c’est bon.

2 « J'aime »

J’ai rencontré un problème lors de la préparation de cette importation.

Le forum phpBB que je prévois de migrer utilise un BBcode personnalisé qui crée des balises img HTML pour les images stockées dans des dossiers par année dans un répertoire extérieur à phpBB, mais sur le même compte utilisateur sur le serveur. Le BBcode prend le format suivant :

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

Les {NUMBER1} et {NUMBER2} sont des entiers pour la largeur et la hauteur de l’image, respectivement. Le {NUMBER3} est un entier pour le dossier de l’année dans lequel se trouve l’image, et le {SIMPLETEXT} est le nom du fichier image. Le remplacement HTML pour le BBcode ressemble à ceci :

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

Ce que je dois comprendre, c’est comment gérer ce BBcode personnalisé avec le script de migration, à la fois pour convertir le BBcode personnalisé en quelque chose que Discourse peut utiliser, et pour déterminer où placer les fichiers image dans l’arborescence des fichiers pour l’importation.

J’ai jeté un œil à Ruby-BBcode-to-MD, qui indique qu’il “permet d’étendre facilement cet ensemble avec des balises personnalisées en modifiant tags.rb”. J’ai jeté un œil à tags.rb, mais comme c’est la première fois que je regarde du code Ruby, je suis perdu quant à la façon de gérer mon BBcode personnalisé car son format séparé par des pipes diffère de tous les BBcodes officiels que le fichier tags.rb inclut et que j’aurais pu utiliser comme guide.

Je n’ai pas encore chargé templates/import/phpbb3.template.yml, donc je suppose que cela ajoutera le gem Ruby BBcode vers MD ?

J’ai donc des questions :

  1. Quelle est la meilleure façon de gérer ce BBcode personnalisé pour la migration ? Est-ce que modifier le fichier tags.rb est la bonne approche ? (Si oui, je vais faire quelques recherches sur le codage Ruby et peut-être les regex ensuite, mais toute aide sera la bienvenue !)
  2. Quel est le meilleur endroit pour placer les fichiers image de cette galerie dans l’arborescence des fichiers d’importation afin qu’ils soient sauvegardés dans Discourse et apparaissent dans les publications importées ?
1 « J'aime »

Ce gem n’est plus vraiment utilisé. À partir de quelle version de phpBB importez-vous ? Si c’est la v3.1 ou une version antérieure, vous devrez appliquer une magie regex dans discourse/script/import_scripts/phpbb3/support/text_processor.rb at ea2fd75d10e81687334f8d29e0d3e786dbdb4a53 · discourse/discourse · GitHub.

Pour la v3.2, vous pouvez ajouter la gestion du BBCode dans discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb at a71b219c9a18ad418e330282fde511bcb79ba7c4 · discourse/discourse · GitHub

2 « J'aime »