He encontrado una solución para actualizar automáticamente este caso específico. No hay posibilidad de actualizar la API para las opciones de campos personalizados, solo he encontrado una solución del lado del servidor aquí a través de un cron job. No utilicé el archivo json, utilicé las entradas de la base de datos para la automatización.
El caso de uso
El caso de uso para esta automatización es permitir que los nuevos usuarios seleccionen opciones existentes al registrarse, lo que puede ayudar al sistema a evolucionar a medida que se conocen las preferencias de más usuarios. Si un nuevo usuario no encuentra una opción apropiada, puede ingresar su propio texto en el campo de texto personalizado, que luego se puede agregar a la lista desplegable para el próximo usuario.
¡Esto debe usarse con precaución, ya que los cambios en las bases de datos de Discourse pueden provocar fallos, recomendado solo para desarrolladores experimentados!
Requisitos:
Paso 1:
Crea dos campos personalizados en /admin/customize/user_fields, uno con un desplegable y otro solo con texto (en mi ejemplo: desplegable con user_field_5 y texto con user_field_8).
Nota: La ID se puede obtener de /admin/customize/user_fields.json.
Paso 2:
Es mejor usar Discourse Data Explorer para verificar sus entradas: Discourse Data Explorer
Crea una nueva consulta en /admin/plugins/explorer:
Ejemplo: Opciones de campo de usuario
SELECT * FROM user_field_options WHERE user_field_id='5'
Cambia user_field_id=‘5’ a tu user_field_id=‘x’ desplegable. Luego se mostrarán los valores que se muestran para las opciones de tu desplegable.
Crea una segunda consulta:
Ejemplo: Campos personalizados de usuario
SELECT * FROM user_custom_fields WHERE name = 'user_field_8'
Cambia ‘user_field_8’ a tu campo de texto personalizado ‘user_field_x’. Luego se mostrarán los valores que tus usuarios han ingresado para el texto.
Paso 3: Esta es la base fundamental para que tu cron job actualice la base de datos user_field_options, donde se enumeran todas las opciones para los campos personalizados, que tienen el valor asociado 5 para mí debido a user_field_5. Quiero agregar opciones allí.
Primero, creamos un script bash en el directorio de Discourse
cd /var/discourse
nano update_dropdown.sh
Agrega el siguiente contenido si Discourse se ejecuta 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);\\\"\"
Asegúrate de guardar el script y hacerlo ejecutable
chmod +x update_dropdown.sh
Luego puedes iniciar y probar el script
cd /var/discourse
./update_dropdown.sh
Paso 4: Para automatizar esto, necesitamos agregar el script bash como un cron job:
crontab -e
Esto abre el editor de cron job, donde agregas el código en la siguiente línea:
* * * * * /var/discourse/update_dropdown.sh
Luego, el comando se ejecutará cada minuto. Esto, por supuesto, se puede ajustar, y la ruta debe ajustarse según dónde hayas almacenado update_dropdown.sh en el servidor.