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 em 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 descreve melhor 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 de poder 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 descreve melhor 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.
Puoi dare un’occhiata a GitHub - discourse/discourse-authentication-validations che fa proprio questo, tranne che solo per la pagina di registrazione dell’utente. Non sembra banale adottarlo per la pagina delle preferenze dell’utente in cui vengono modificati quei campi.
Ma stai chiedendo una funzionalità, non cercando una soluzione al tuo problema immediato.
La casella di controllo in basso aggiunge l’opzione di autenticazione.
Quindi popola le risposte del trigger che attiveranno i successivi campi personalizzati dell’utente. Nel mio caso, è il numero di cuffie maggiore di Nessuno.
Una volta popolati, individua i campi utente personalizzati che desideri visualizzare. Nel mio esempio, se 1-6+, all’utente verrà richiesto di inserire le cuffie primarie e secondarie.
Sarebbe fantastico se esteso ai modelli di modulo sperimentali.
Accidenti! Mi dispiace, me ne ero dimenticato anch’io.
Sarà possibile avere quelle condizioni funzionanti nel profilo utente anziché solo nella pagina di creazione dell’account? (Sono abbastanza sicuro di aver capito che funziona solo nella pagina di creazione dell’account: ho qualcuno che vuole che le persone tornino indietro, inseriscano delle informazioni e che quelle regole vengano applicate.)
Sì, questa è attualmente l’unica posizione interessata da questo plugin.
Lascia che mi assicuri che siamo sulla stessa pagina:
Desideri la possibilità di aggiornare campi utente personalizzati pubblici tramite /preferences/profile e applichiamo la stessa logica di visualizzazione/nascondimento condizionale che abbiamo nella modale di creazione dell’account?
Qualcosa del tipo, se il valore del campo personalizzato 1 è mostra campo personalizzato 2, allora mostra il secondo campo personalizzato?
Sì. Voglio che a tutti i custom_user_fields che sono Modificabili dopo la registrazione vengano applicate le stesse regole nella pagina /preferences/profile.
Penso sia corretto. Le stesse regole che sono in vigore nella modale di creazione dell’account sarebbero in vigore nella pagina del profilo.
Beh, per te, forse! Ci ho provato e mi sono perso rapidamente. Sembrava che dovesse essere quasi facile come copiare alcune cose nella pagina delle preferenze, ma quali cose era più di quanto potessi capire rapidamente.