Estamos trabalhando para melhorar a experiência de integração de nossa comunidade. Naturalmente, gostaríamos de usar as informações que sabemos sobre o usuário para fazer/mostrar certas coisas com base nas informações que eles nos fornecem.
Hoje, nossos usuários iniciam a criação de suas contas através de nossa integração OIDC, criando uma conta com nossa empresa. Eles fornecem e-mail, nome e nome de usuário para o OIDC antes que ele os redirecione de volta para o Discourse.
O problema
Gostaríamos agora de fornecer a eles alguns campos de usuário adicionais para preencher — o que é ótimo, pois o Discourse oferece isso! Infelizmente, não podemos mostrar campos com base nas respostas de campos anteriores. Por exemplo, gostaríamos de perguntar: “Qual função melhor descreve você?” com as opções, desenvolvedor, administrador e analista.
Se eles escolherem desenvolvedor, é claro que quero perguntar quais são suas linguagens de programação preferidas. Também os adicionarei posteriormente ao grupo de usuários desenvolvedores.
Se eles escolherem analista, quero fazer uma série diferente de perguntas e adicioná-los a um grupo de usuários diferente.
Solução proposta
Muitas opções de formulário na web hoje oferecem campos de formulário condicionais (por exemplo, onde você ouviu falar de nós? se ‘outro’ for selecionado, um campo adicional aparece para dizer por quê.). Seria ótimo se você começasse um caminho semelhante (embora mais robusto) como você fez com os modelos de formulário de novos tópicos, embora com o requisito adicional da capacidade de depender do ID de outro campo e, especificamente, da entrada desse campo. Como exemplo, poderia parecer algo assim:
- type: dropdown
id: user-type
choices:
- "Desenvolvedor"
- "Administrador de Aplicações"
- "Analista"
attributes:
none_label: "Escolha sua função..."
label: "Qual opção melhor descreve seu trabalho"
validations:
required: true
- type: dropdown
id: developer-type-programming-language
depends: user-type
choices:
- "Desenvolvedor"
choices:
- "Desenvolvedor"
- "Administrador de Aplicações"
- "Analista"
attributes:
none_label: "Linguagem de programação preferida..."
label: "Qual é a linguagem de programação principal usada em sua função?"
validations:
required: true
Neste exemplo, todos os usuários seriam questionados sobre a primeira pergunta. Se o usuário selecionar Desenvolvedor na lista suspensa, uma segunda pergunta aparecerá no formulário perguntando qual é sua linguagem de programação preferida.
Esta melhoria de campo condicional poderia ser usada tanto no processo de integração do usuário quanto no local originalmente pretendido de novos tópicos também.
Você pode dar uma olhada em GitHub - discourse/discourse-authentication-validations que faz exatamente isso, exceto apenas para a página de cadastro de usuários. Não parece trivial adotá-lo para a página de preferências do usuário onde esses campos são editados.
Mas você está pedindo um recurso, não procurando uma solução para seu problema imediato.
A caixa de seleção inferior adiciona a opção de autenticação.
Em seguida, preencha as respostas de gatilho que ativarão os próximos campos personalizados do usuário. No meu caso, é o número de headsets maior que Nenhum.
Depois de preenchido, direcione os campos de usuário personalizados que você deseja mostrar. No meu exemplo, se 1-6+, o usuário será solicitado a inserir os HMDs primários e secundários.
Isso seria ótimo se fosse estendido aos Modelos de formulário experimentais.
Será possível ter essas condições funcionando no perfil do usuário em vez de apenas na página de criação de conta? (Tenho quase certeza de que entendi que só funciona na página de criação de conta - tenho alguém que quer que as pessoas voltem e insiram informações e que essas regras sejam aplicadas.)
Sim, este é atualmente o único local afetado por este plugin.
Deixe-me ter certeza de que estamos na mesma página:
Você deseja a capacidade de atualizar campos de usuário personalizados públicos via /preferences/profile e aplicamos a mesma lógica condicional de ocultar/mostrar que fazemos no modal de criação de conta?
Algo como, se o valor do campo personalizado 1 for mostrar campo personalizado 2, então mostrar o segundo campo personalizado?
Bem, para você, talvez! Eu tentei e rapidamente me perdi. Parecia que deveria ser quase tão fácil quanto copiar algumas coisas para a página de preferências, mas apenas quais coisas era mais do que eu conseguia entender rapidamente.