Não é possível criar novas contas devido ao antigo plugin de campo de usuário multi-select.

Por algum motivo, parece que o botão ‘Criar Sua Conta’ não funciona mais na caixa de diálogo de inscrição do meu fórum - clicar nele após todos os campos de usuário serem preenchidos (pelo que vejo, corretamente) não gera nenhuma resposta (nem mesmo uma mensagem de erro).

A caixa de diálogo não fecha e nenhuma mensagem de verificação por e-mail é enviada.

Não vejo problemas óbvios com o conteúdo dos campos de usuário durante a inscrição - todos estão preenchidos e nenhum mostra erros.

Testado no Chrome versão 117.0.5938.134 (Build oficial) e Edge versão 118.0.2088.33 (Build oficial).

Limpar o cache do navegador parece não ter efeito.

A função manual de ‘testar e-mail’ envia uma mensagem para o endereço do usuário afetado sem problemas.
A funcionalidade de lista de e-mails do fórum para usuários existentes funciona perfeitamente.

Também consigo fazer login e logout no site do fórum sem problemas.

Não estou ciente de nenhuma alteração recente nas configurações do fórum (além de atualizações de software), mas não tenho certeza se existe uma configuração para ‘ignorar entrada do usuário’.

Meu usuário pretendido tentou se inscrever algumas vezes e eu também tentei do meu lado, e posso verificar o problema.

Atualmente executando a versão mais recente do Discourse (atualizado para a compilação 3.2.0.beta2-dev na esperança de resolver o problema).

Não tenho certeza de quando isso começou a acontecer, pois não tivemos novas inscrições em um tempo (talvez agora eu saiba o porquê!)

Você está vendo algum erro no console do navegador? Você (ou o usuário) tem algum bloqueador de conteúdo ou de anúncios instalado nos navegadores?

1 curtida

Bom pensamento.

Sim, no Navegador Edge, vejo erros e avisos

Não tenho certeza do que estou vendo - isso significa que o plugin Multi-select é incompatível com a versão mais recente do Discourse?

Infelizmente, este plugin é bastante crítico durante as inscrições, - usado para preencher certos campos de usuário a partir de listas suspensas.

2 curtidas

Eu tentaria desativar o plugin temporariamente para isolar o problema.

3 curtidas

Assumindo que o plugin Multi-select seja a causa do problema, deve ser bastante simples migrar os antigos campos ‘multiselect-dropdown’ para os novos campos ‘multiselect’ do Discourse. Alguém da comunidade Discourse deve ser capaz de ajudá-lo com isso.

2 curtidas

[PLUGIN discourse-multiselect-user-field] \"model:user-field\" não foi encontrado por modifyClass

Mas…

EDIT: Simon me antecipou

2 curtidas

Olá - sim, o plugin parece ter sido substituído, então é improvável que seja atualizado - mas o problema está na migração dos dados de usuário gerados pelo plugin para os campos de dados de usuário principais correspondentes, para que o plugin possa ser removido com segurança.

Simplesmente desinstalar o plugin também parece excluir os dados associados (ou pelo menos eles não são mais visíveis ao visualizar os perfis de usuário)

Assumindo que não sou o único usuário do plugin, seria ótimo se o plugin recebesse uma atualização final, para incluir uma função de ‘migrar’!

Não estou vendo nada no plugin que faria com que os campos de usuário criados por ele fossem removidos do banco de dados quando o plugin fosse removido de um site. O que eu esperaria encontrar é que, do console Rails, executar:

UserField.where(field_type: 'multiselect-dropdown')

retornaria a lista de campos multiselect-dropdown que você criou em seu site.

Os valores definidos para o id de cada um desses campos podem ser usados para encontrar as opções que cada usuário em seu site selecionou para o campo. Por exemplo, se os ids retornados forem [1, 2, 3], haverá entradas UserCustomField correspondentes com os nomes "user_field_1", "user_field_2" e "user_field_3". Assumindo que tudo isso está correto, isso será informação suficiente para alguém migrar os campos antigos para novos campos do console Rails do seu site.

Se o autor do plugin não for lidar com isso, você provavelmente terá que contratar alguém para o trabalho. Nota, não estou tentando conseguir trabalho aqui, eu preferiria não fazer isso :slight_smile:

Antes que a migração seja feita, você deve criar novos campos ‘multiselect’ do Discourse que tenham opções que correspondam aos valores de seus antigos campos multiselect-dropdown. Para facilitar o processo de migração, seria bom usar o mesmo nome para os novos campos que você usou para os campos antigos. Dessa forma, quem realizar a migração saberá que (por exemplo) os campos multiselect-dropdown com o nome “NZRAB number” devem ser migrados para o novo campo ‘multiselect’ que tem o nome “NZRAB number”.

Concordo que seria melhor se o autor do plugin cuidasse disso, mas se isso não puder acontecer, basta criar novos campos ‘multiselect’ e remover o plugin.

4 curtidas

Obrigado, Simon

Só para confirmar: a versão principal do Multiselect dropdown deve permitir que vários itens de um único dropdown sejam selecionados simultaneamente por um usuário, da mesma forma que o plugin antigo fazia?

Ao tentar adicionar um novo campo de usuário do tipo ‘Multiselect dropdown’, há apenas uma opção ‘Multiselect dropdown’ para escolher (eu poderia esperar duas, se a versão do plugin for distinta da versão principal).

Agora, se eu escolher esse tipo de campo Multiselect dropdown e tentar adicionar dados a um perfil de usuário com ele, ele só aceita uma única seleção de usuário, não várias seleções de uma vez - então parece que a versão principal do tipo de campo multiselect dropdown tem funcionalidade reduzida e substituiu a versão do tipo de campo do plugin, ou há alguma interação com a versão do plugin que está prejudicando a versão que estou vendo?

Eu acho que sim, mas eu não experimentei o plugin de seleção múltipla, então não posso ter certeza. Veja como os campos de seleção múltipla do Discourse funcionam:

Os usuários podem selecionar qualquer um dos itens que você adicionar ao configurar o campo personalizado:

É possível que a interface do usuário seja diferente do que o plugin estava fazendo, mas espero que os resultados sejam os mesmos.

Você pode confirmar que, com o plugin instalado, você consegue ver os valores que os usuários inseriram para os campos criados com o plugin se você visitar a página de perfil deles?

Editar: @Paul_King, percebo que posso ter sido excessivamente otimista sobre a migração dos dados. Sem acessar o console Rails do seu site, a maneira mais fácil de ter uma ideia do que está acontecendo seria verificar como os campos antigos foram salvos executando uma consulta no Data Explorer. Se você não tiver esse plugin instalado no seu site, pode valer a pena adicioná-lo.

Se o plugin Data Explorer estiver instalado no seu site, tente executar a seguinte consulta:

SELECT * FROM user_fields

Espero que essa consulta retorne alguns resultados com o field_type definido como “multiselect-dropdown”. Se sim, a migração dos dados deve ser bastante simples.

2 curtidas

Obrigado, Simon

Seu exemplo mostrando a operação do dropdown de múltipla seleção corresponde à forma como o meu costumava funcionar, o que parece promissor em termos de restauração da funcionalidade original.

Atualmente, parece que nem o plugin antigo nem a funcionalidade principal da nova versão estão funcionando corretamente - o campo inteiro não aparece mais na tela de edição do perfil do usuário, embora os valores que o usuário originalmente inseriu usando o plugin antigo apareçam para um usuário clicando no avatar de outro usuário, mas com os dados originais mostrando colchetes e aspas de cada lado.

Sim, essa consulta retorna esse tipo de campo. É possível que a confusão esteja surgindo devido ao nome do plugin antigo e ao nome principal do Discourse para suas respectivas versões de um tipo de campo de usuário de múltipla seleção serem idênticos?

Isso não é surpreendente. O que isso significa é que os dados necessários para a migração estão no banco de dados, mas é provável que estejam em um formato que não tornará a migração tão fácil quanto eu esperava.

Para confirmar isso, tente executar a seguinte consulta no Data Explorer:

SELECT * FROM user_custom_fields
WHERE name = 'user_field_1'
ORDER BY user_id

A informação útil dos resultados dessa consulta será o que está definido na coluna value. Idealmente, os resultados seriam semelhantes a este, com uma entrada separada para cada opção que um usuário selecionou:

Suspeito que o que você encontrará é que os valores de cada opção que um usuário selecionou existirão na mesma linha. Por exemplo, [isto, aquilo] ou "[isto, aquilo]". Se isso estiver correto, você pode postar algumas das entradas de valor?

Pode levar um pouco de tentativa e erro para descobrir como analisar os valores para o formato que o Discourse espera encontrar.

2 curtidas

Suponho que uma exportação do arquivo do usuário fornecerá todos os dados necessários, e ele pode ser limpo para ser preparado para importação usando algo como isto:

2 curtidas

Parece que isso funcionaria. Seria provavelmente necessário contratar o Jay, ou alguém semelhante, para fazer o trabalho.

Também deve ser tecnicamente possível fazer as alterações a partir do console Rails. A dificuldade dessa abordagem dependerá de como os campos value estão sendo definidos para os antigos UserCustomFields “multiselect-dropdown”. Se houver uma opção armazenada por linha, seria simples gerar novas entradas de UserCustomField a partir das antigas. Se várias opções forem armazenadas em cada linha, isso pode ficar um pouco complicado.

2 curtidas

Ele tem sorte que estou aqui perto :wink:.

O formato dos dados era interessante - estava em duas formas diferentes que mudaram um dia. Elas começaram como:

this
that

E um dia elas mudaram repentinamente para

this,that

Eu fiz uma mágica feia com a planilha para transformar os dados em como os novos campos de seleção múltipla são (como acima). Infelizmente, o script não consegue (ainda) lidar com seleção múltipla. Alguém quer fazer um PR?

Embora eu possa contornar / hackear para fazer o trabalho, eu acho:

1ª passagem: todos os usuários com uma única entrada usando o script existente
2ª passagem: todos os usuários com várias entradas usando um script hackeado que força novas linhas.

mais tarde…
Meu plano engenhoso funcionou.

Este é o script hackeado para a 2ª passagem:

# frozen_string_literal: true

require "csv"
desc "Import user fields"
task "multi_user_fields:import_csv", [:filename] => [:environment] do |_task, args|

  puts "Filename: #{args[:filename]}"
  data = CSV.read(args[:filename], headers: true)

  data.each_entry do |row|
    puts "doing row."
    row.to_h.each do |x|
      user_id = row["user_id"]
      if x.first == "user_id"
        u = User.find(user_id)
        puts "Got user: #{u.username}"
      else
        name = x.first
        val = row[x.first]
        ucf = UserCustomField.find_by(user_id: row["user_id"], name: name)
        if val
          puts "Creating UCF: #{row['user_id']} Name: #{name}, value: #{val}"
          UserCustomField.create(user_id: user_id, name: name, value: val)
        end
      end
    end
  end
end

@pfaffman - quão fácil seria atualizar o script real para lidar com campos de seleção múltipla para outros que mexerem com UCFs no futuro?

4 curtidas

Do meu lado, fico muito feliz em relatar que Nathan e seu processo (com todos os truques) absolutamente resolveram o problema.

Confirmei que a caixa de diálogo de inscrição agora está funcionando, os usuários pretendidos podem selecionar novamente várias respostas nas opções suspensas e podem visualizá-las e editá-las novamente como usuários aprovados, e o antigo plugin de seleção múltipla foi removido com sucesso.

Obrigado a @nathank, @omarfilip, @simon e @RGJ por dedicarem tempo para considerar este problema e compartilhar seu conhecimento e insights - mais provas, como se alguma fosse necessária, de quão grande é esta comunidade!

5 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.