Encontrei uma solução para atualizar automaticamente este caso específico. Não há possibilidade de atualização da API para opções de campos personalizados, encontrei apenas uma solução do lado do servidor aqui por meio de um cron job. Não usei o arquivo json, usei as entradas do banco de dados para automação.
O caso de uso
O caso de uso para esta automação é permitir que novos usuários selecionem opções existentes ao se registrarem, o que pode ajudar o sistema a evoluir à medida que mais usuários expressam suas preferências. Se um novo usuário não encontrar uma opção apropriada, ele poderá inserir seu próprio texto no campo de texto personalizado, que poderá ser adicionado à lista suspensa para o próximo usuário.
Isso deve ser usado com cautela, pois alterações nos bancos de dados do Discourse podem causar falhas, recomendado apenas para desenvolvedores experientes!
Requisitos:
- Discourse Data Explorer
- Discourse instalado via Docker
- Experiência em gerenciamento de banco de dados
Etapa 1:
Crie dois campos personalizados em /admin/customize/user_fields, um com uma lista suspensa e outro apenas com texto (no meu exemplo: lista suspensa com user_field_5 e texto com user_field_8).
Observação: O ID pode ser obtido em /admin/customize/user_fields.json.
Etapa 2:
É melhor usar o Discourse Data Explorer para verificar suas entradas: Discourse Data Explorer
Crie uma nova consulta em /admin/plugins/explorer:
Exemplo: Opções de Campo de Usuário
SELECT * FROM user_field_options WHERE user_field_id='5'
Altere user_field_id=‘5’ para o seu user_field_id=‘x’ da lista suspensa. Em seguida, os valores exibidos para as opções da sua lista suspensa serão exibidos.
Crie uma segunda consulta:
Exemplo: Campos Personalizados de Usuário
SELECT * FROM user_custom_fields WHERE name = 'user_field_8'
Altere ‘user_field_8’ para o seu campo de texto personalizado ‘user_field_x’. Em seguida, os valores que seus usuários inseriram para texto serão exibidos.
Etapa 3: Esta é a base para o seu cron job atualizar o banco de dados user_field_options, onde todas as opções para campos personalizados estão listadas, que têm o valor associado 5 para mim por causa do user_field_5. Quero adicionar opções lá.
Primeiro, criamos um script bash no diretório do Discourse
cd /var/discourse
nano update_dropdown.sh
Adicione o seguinte conteúdo se o Discourse for executado como Docker:
#!/bin/bash
cd /var/discourse
docker exec -i app su postgres -c "psql discourse -c \"UPDATE user_custom_fields SET value = (SELECT value FROM user_field_options WHERE user_field_id = 5 AND user_field_options.value = user_custom_fields.value) WHERE name = 'user_field_8' AND value IS NOT NULL AND value NOT IN (SELECT value FROM user_field_options);\""
Certifique-se de salvar o script e torná-lo executável
chmod +x update_dropdown.sh
Em seguida, você pode iniciar e testar o script
cd /var/discourse
./update_dropdown.sh
Etapa 4: Para automatizar isso, precisamos adicionar o script bash como um cron job:
crontab -e
Isso abre o editor de cron job, onde você adiciona o código na próxima linha:
* * * * * /var/discourse/update_dropdown.sh
Em seguida, o comando será executado a cada minuto. Isso pode, é claro, ser ajustado, e o caminho deve ser ajustado dependendo de onde você armazenou update_dropdown.sh no servidor.