Importando do phpBB

Olá, estou tentando importar um fórum phpBB2 antigo para o novo Discourse.

Fiz a importação preliminar do phpBB2 para o phpBB3, conforme declarado em sua documentação.

Tive problemas com a importação de avatares (sem importação) e com senhas. Certamente o Discourse usa um método de criptografia diferente do phpBB2, então eu estava pensando em escrever algum código que, no primeiro login, verificasse se as senhas estão criptografadas no estilo phpBB2, verificasse se com a criptografia phpBB2 (md5?) a senha corresponde ao hash salvo e então a reescrevesse com a criptografia do Discourse.

Normalmente, com os “bons e velhos” PHP e MySQL, é apenas um trabalho de meia hora, mas com o Discourse eu nem sei por onde começar a modificar o código. Meu antigo phpBB2 foi muito modificado (por esse motivo eu nunca o atualizei para o phpBB3), mas sei que isso não é um bom hábito e não quero bagunçar o Discourse e perder seu automatismo de atualização, então estou perguntando como eu poderia gerenciar minha necessidade. Devo desenvolver um plugin? Alguma chance de ter esse recurso em uma nova versão “beta”?

Obrigado

Para importar senhas, você precisa do plugin Migrated password hashes support. Isso pode resolver seu problema de senha.

É difícil dizer se o seu problema de avatar é porque seus dados não são compatíveis ou se você simplesmente não configurou o script corretamente.

1 curtida

Obrigado pela sua dica, tentarei o mais rápido possível. Em relação aos avatares, verifiquei novamente cada etapa conforme seu guia, mas sem sucesso. No entanto, como terei que repetir a importação, tentarei observar cada etapa e reportarei a você.

1 curtida

Não sou o proprietário deste tópico, mas gosto de me conectar, pois estou basicamente na mesma jornada.

Atualmente, estou brincando com o import_phpbb3 e já estou enfrentando alguns desafios ao criar os usuários. Gostaria de migrar o avatar do usuário também, mas parece que não está funcionando para todos os usuários. Para alguns, estou recebendo o seguinte problema:

Falha ao carregar o avatar para o usuário myuser: /shared/import/data/images/avatars/upload/phpbb_avatar_2.png
#<ActiveModel::Errors:0x00000055a4b3de78 @base=#<Upload id: nil, user_id: nil, original_filename: "avatar.png", filesize: 0, width: nil, height: nil, url: nil, created_at: nil, updated_at: nil, sha1: nil, origin: nil, retain_hours: nil, extension: nil, thumbnail_width: nil, thumbnail_height: nil, etag: nil, secure: false, access_control_post_id: nil, original_sha1: nil, animated: nil, verification_status: 1, security_last_changed_at: nil, security_last_changed_reason: nil>, @errors=[#<ActiveModel::Error attribute=base, type=Desculpe, a imagem que você está tentando carregar é muito grande (dimensão máxima é 80 megapixels), por favor, redimensione-a e tente novamente., options={}>]>

O problema parece ser o formato do arquivo PNG. Existe uma maneira de importar arquivos PNG também ou eles precisam ser GIF/JPG? oxipng já está instalado.

root@DietPi4-import:/var/www/discourse# which oxipng
/usr/local/bin/oxipng
root@DietPi4-import:/var/www/discourse#

Em relação ao plugin de senha. Ele o ativou como parte da construção do contêiner de importação. Ou ele também precisa ser feito no contêiner do Discourse? Existe uma maneira de ver se isso funcionou ou seria algo que o usuário precisaria experimentar?

Muito obrigado antecipadamente.

O plugin migrate password deve ser ativado apenas no fórum após a migração ter sido concluída, caso contrário, ele pode causar erros durante as importações de usuários.

Para ver se está funcionando, basta ativá-lo e tentar fazer login com sua senha antiga.

3 curtidas

thx para o feedback @Canapin
Neste caso, reconstruirei o contêiner de produção antes de reiniciá-lo, após a importação terminar no contêiner de importação.

BTW: alguém da equipe de administração pode verificar minha postagem inicial. Parece que a ajustei demais e fui marcado como SPAM :smiley:

Ninguém tem ideia do porquê a importação de arquivos PNG não está funcionando?

Mais informações seriam úteis. Qual versão do phpBB? Alguma mensagem de erro?
Você pode explicar melhor “não está funcionando”?

1 curtida

Já compartilhado acima. Parece que o script de importação não consegue ler arquivos PNG corretamente, pois basicamente todos os valores são nil.

Ah, desculpe, não vi que você já tinha postado o problema. Não posso te ajudar com isso, desculpe, não tenho as habilidades adequadas.

edit: (talvez para evitar meu pequeno “erro”, você poderia ter respondido à sua própria mensagem para que eu pudesse ter visto sua primeira mensagem)

Estou vendo isso de tempos em tempos durante as migrações e os arquivos afetados geralmente não podem ser abertos em um visualizador de imagens devido a um formato de arquivo desconhecido. Sempre assumo que esses arquivos foram corrompidos ao longo dos anos.

Você tem certeza de que os PNGs que você está tentando importar são arquivos de imagem válidos? Se sim, você pode compartilhar um exemplo. Além disso, você está importando dentro do contêiner Docker ou em um ambiente de desenvolvimento?

3 curtidas

TL;DR; As imagens foram corrompidas durante a transferência para a caixa Linux.

@gerhard Eu tinha 100% de certeza de que meus arquivos PNG eram válidos e corretos, pois consegui abri-los no meu computador Windows. No entanto, sua dica me levou na direção certa e verifiquei como os arquivos PNG se pareciam na caixa Linux. E você estava absolutamente certo, pois todos os arquivos PNG foram danificados. A causa raiz foi a maneira como eu os transferi. Usei SCP (WinSCP) e os arquivos PNG foram transferidos como arquivos de texto, levando à corrupção. Na minha nova tentativa, transferi tudo como um arquivo 7z e apenas os extraí diretamente na caixa Linux. Desta vez, a importação funcionou bem.

Agradeço muito seu apoio, por me apontar na direção certa :+1:

Embora minha importação agora esteja funcionando para 99,9% de todas as postagens, tenho mais uma pergunta. Existe alguma maneira de transferir o status dos tópicos resolvidos também? No novo fórum de produção, pretendo usar discourse-solved. Pergunta: como transferir o status antigo para o novo mundo?

Novamente: Agradeço muito seu apoio.

2 curtidas

Não estou ciente de um status resolvido no phpBB. Isso é uma extensão/mod? Acho que você precisará personalizar o script de importação para importá-lo.

Eu dei uma olhada no banco de dados do phpbb e agora sei o campo que armazena informações sobre um tópico/post ter sido resolvido. Só preciso descobrir como e onde armazená-lo no banco de dados do Discourse. :roll_eyes:

1 curtida

Você pode olhar outros scripts de importação que suportam isso (procure por “solved”, eu acho) Você precisará ter o plugin instalado na sua instância de importação.

1 curtida

Obrigado pela sua resposta, mas isso parece ir além das minhas habilidades.

No banco de dados phpbb de origem, o ID da postagem que resolve um tópico é armazenado em:

  • phpbb_topics.topic_solved.

No Discourse, a informação é armazenada em 3 campos diferentes (se não me engano):

  • post_custom_fields.is_accepted_answer
  • topic_custom_fields.accepted_answer_post_id
  • topic_custom_fields.solved_auto_close_topic_timer_id

Pelo que entendi, há algum tipo de mapeamento feito durante a importação, pois os IDs de topic + post vão mudar.

Mas aí meu conhecimento termina.

1 curtida

Então, explicar como modificá-lo e depurá-lo provavelmente está além do que pode ser feito aqui. Se você tiver um orçamento, pode postar em Marketplace ou entrar em contato comigo.

Ele é armazenado em um campo personalizado chamado “import_id” e existem funções que você pode usar para fazer pesquisas que podem ser vistas no código. Algo como topic_id_from_import_id()

2 curtidas

Obrigado pela oferta. Somos um projeto de código aberto muito pequeno, sem orçamento real. No início, eu não estava ciente de que o recurso “tópico resolvido” é uma extensão não padrão no phpbb (entrei no fórum anos depois que ele foi criado) e pensei que poderia ser fácil de consertar. Mas entendi que é um pedido individual, que leva tempo para ser analisado.

Novamente, obrigado a vocês que ajudaram a fazê-lo funcionar quase perfeitamente.

Ah, aliás, pessoal, o phpbb foi migrado de uma versão 3.3.5. Ele funcionou bem, mesmo que não seja suportado.

2 curtidas

Se você conseguisse descobrir quais tabelas estão envolvidas no discurso, poderia muito bem copiar algumas linhas de código de outro importador.

1 curtida

Entendi. Está mapeando os IDs de post/tópico do phpBB com os IDs de post/tópico do Discourse.

Este parece ser um bom exemplo para importar respostas aceitas discourse/script/import_scripts/lithium.rb at 44f7a61c2c5b6f248a62ab7f987ebbd3091c71ef · discourse/discourse · GitHub

Mas, se entendi corretamente, como primeiro passo eu precisaria armazenar/importar o valor de phpbb_topics.topic_solved para o postgres, certo?

1 curtida