Mettre à jour dynamiquement les valeurs des champs utilisateur disponibles lors du remplissage d'un profil

J’ai trouvé une solution pour mettre à jour automatiquement ce cas spécifique. Aucune possibilité de mise à jour de l’API pour les options de champs personnalisés, j’ai seulement trouvé une solution côté serveur ici via un cron job. Je n’ai pas utilisé le fichier json, j’ai utilisé les entrées de la base de données pour l’automatisation.

Le cas d’utilisation

Le cas d’utilisation pour cette automatisation est de permettre aux nouveaux utilisateurs de sélectionner les options existantes lors de l’inscription, ce qui peut aider le système à évoluer à mesure que les préférences des utilisateurs sont connues. Si un nouvel utilisateur ne trouve pas d’option appropriée, il peut saisir son propre texte dans le champ de texte personnalisé, qui peut ensuite être ajouté à la liste déroulante pour le prochain utilisateur.

Ceci doit être utilisé avec prudence, car les modifications apportées aux bases de données de Discourse peuvent entraîner des plantages, recommandé uniquement pour les développeurs expérimentés !

Exigences :

Étape 1 :

Créez deux champs personnalisés dans /admin/customize/user_fields, l’un avec une liste déroulante et l’autre avec juste du texte (dans mon exemple : liste déroulante avec user_field_5 et texte avec user_field_8).

Remarque : L’ID peut être récupéré à partir de /admin/customize/user_fields.json.

Étape 2 :

Il est préférable d’utiliser Discourse Data Explorer pour vérifier vos entrées : Discourse Data Explorer

Créez une nouvelle requête sous /admin/plugins/explorer :

Par exemple : Options de champ utilisateur

SELECT * FROM user_field_options WHERE user_field_id='5'

Changez user_field_id=‘5’ en votre user_field_id=‘x’ de liste déroulante. Les valeurs qui s’affichent pour vos options de liste déroulante seront alors affichées.

Créez une deuxième requête :

Par exemple : Champs personnalisés utilisateur

SELECT * FROM user_custom_fields WHERE name = 'user_field_8'

Changez ‘user_field_8’ en votre champ de texte personnalisé ‘user_field_x’. Les valeurs que vos utilisateurs ont saisies pour le texte seront alors affichées.

Étape 3 : C’est la base fondamentale pour que votre cron job mette à jour la base de données user_field_options, où toutes les options pour les champs personnalisés sont listées, qui ont la valeur associée 5 pour moi en raison de user_field_5. Je veux ajouter des options là-bas.

Tout d’abord, nous créons un script bash dans le répertoire de Discourse

cd /var/discourse
nano update_dropdown.sh

Ajoutez le contenu suivant si Discourse est exécuté en tant que 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);\\\"\"

Assurez-vous de sauvegarder le script et de le rendre exécutable

chmod +x update_dropdown.sh

Ensuite, vous pouvez démarrer et tester le script

cd /var/discourse
./update_dropdown.sh

Étape 4 : Pour automatiser cela, nous devons ajouter le script bash en tant que cron job :

crontab -e

Cela ouvre l’éditeur de cron job, où vous ajoutez le code dans la ligne suivante :

* * * * * /var/discourse/update_dropdown.sh

Ensuite, la commande sera exécutée chaque minute. Cela peut bien sûr être ajusté, et le chemin doit être ajusté en fonction de l’endroit où vous avez stocké update_dropdown.sh sur le serveur.

3 « J'aime »