Aggiorna dinamicamente i valori dei campi utente disponibili durante il completamento del profilo

Ho trovato una soluzione per aggiornare automaticamente questo caso specifico. Nessuna possibilità di aggiornamento API per le opzioni dei campi personalizzati, ho trovato solo una soluzione lato server qui tramite un cron job. Non ho usato il file json, ho usato le voci del database per l’automazione.

Il caso d’uso

Il caso d’uso per questa automazione è consentire ai nuovi utenti di selezionare le opzioni esistenti al momento della registrazione, il che può aiutare il sistema a evolversi man mano che le preferenze degli utenti diventano note. Se un nuovo utente non trova un’opzione appropriata, può inserire il proprio testo nel campo di testo personalizzato, che può quindi essere aggiunto all’elenco a discesa per l’utente successivo.

Questo dovrebbe essere usato con cautela, poiché le modifiche ai database di Discourse possono causare crash, consigliato solo per sviluppatori esperti!

Requisiti:

Passaggio 1:

Crea due campi personalizzati in /admin/customize/user_fields, uno con un menu a discesa e l’altro solo con testo (nel mio esempio: menu a discesa con user_field_5 e testo con user_field_8).

Nota: l’ID può essere recuperato da /admin/customize/user_fields.json.

Passaggio 2:

È meglio usare Discourse Data Explorer per controllare i tuoi input: Discourse Data Explorer

Crea una nuova query sotto /admin/plugins/explorer:

Esempio: Opzioni dei campi utente

SELECT * FROM user_field_options WHERE user_field_id='5'

Cambia user_field_id=‘5’ con il tuo user_field_id=‘x’ del menu a discesa. Quindi verranno visualizzati i valori che vengono visualizzati per le tue opzioni a discesa.

Crea una seconda query:

Esempio: Campi personalizzati utente

SELECT * FROM user_custom_fields WHERE name = 'user_field_8'

Cambia ‘user_field_8’ con il tuo campo di testo personalizzato ‘user_field_x’. Quindi verranno visualizzati i valori che i tuoi utenti hanno inserito per il testo.

Passaggio 3: Questa è la base fondamentale per il tuo cron job per aggiornare il database user_field_options, dove sono elencate tutte le opzioni per i campi personalizzati, che hanno il valore associato 5 per me a causa di user_field_5. Voglio aggiungere opzioni lì.

Innanzitutto, creiamo uno script bash nella directory di Discourse.

cd /var/discourse
nano update_dropdown.sh

Aggiungi il seguente contenuto se Discourse è in esecuzione come Docker:

#!/bin/bash
cd /var/discourse
docker exec -i app su postgres -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);\"

Assicurati di salvare lo script e renderlo eseguibile.

chmod +x update_dropdown.sh

Quindi puoi avviare e testare lo script.

cd /var/discourse
./update_dropdown.sh

Passaggio 4: Per automatizzare questo, dobbiamo aggiungere lo script bash come cron job:

crontab -e

Questo apre l’editor dei cron job, dove aggiungi il codice nella riga successiva:

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

Quindi il comando verrà eseguito ogni minuto. Questo può ovviamente essere regolato e il percorso deve essere regolato a seconda di dove hai memorizzato update_dropdown.sh sul server.

3 Mi Piace