Non è più possibile creare nuovi account a causa del vecchio plugin multi-select user field

Per qualche motivo, sembra che il pulsante ‘Crea il tuo account’ non funzioni più nella finestra di dialogo di registrazione del mio forum: fare clic su di esso dopo che tutti i campi utente sono stati completati (per quanto ne so correttamente) non produce alcuna risposta (nemmeno un messaggio di errore).

La finestra di dialogo non si chiude e non viene inviato alcun messaggio di verifica via email.

Non ci sono problemi evidenti con il contenuto dei campi utente durante la registrazione: sono tutti completati e nessuno mostra errori.

Testato su Chrome versione 117.0.5938.134 (Build ufficiale) e Edge versione 118.0.2088.33 (Build ufficiale).

La cancellazione della cache del browser sembra non avere alcun effetto.

La funzione manuale ‘test email’ invia un messaggio all’indirizzo dell’utente interessato senza problemi.
La funzionalità della mailing list del forum per gli utenti esistenti funziona perfettamente.

Posso anche accedere e disconnettermi dal sito web del forum senza problemi.

Non sono a conoscenza di modifiche recenti alle impostazioni del forum (oltre agli aggiornamenti del software), ma non sono sicuro che esista un’impostazione per ‘ignora input utente’.

Il mio utente inteso ha provato a registrarsi alcune volte e anch’io ho provato dalla mia parte, e posso verificare il problema.

Attualmente sto eseguendo l’ultima versione di Discourse (aggiornata a 3.2.0.beta2-dev nella speranza di risolvere il problema).

Non sono sicuro di quando abbia iniziato a succedere, poiché non abbiamo avuto nuove registrazioni per un po’ (forse ora so perché!).

Stai riscontrando errori nella console del browser? Hai (o l’utente ha) installato blocchi di contenuti o annunci pubblicitari nei browser?

1 Mi Piace

Buon pensiero.

Sì, in Edge Browser vedo errori e avvisi

Non sono sicuro di cosa sto guardando: questo significa che il plugin Multi-select è incompatibile con l’ultima versione di Discourse?

Sfortunatamente questo plugin è piuttosto critico durante le registrazioni, - utilizzato per popolare determinati campi utente da elenchi a discesa

2 Mi Piace

Proverei a disabilitare temporaneamente il plugin per isolare il problema.

3 Mi Piace

Supponendo che il plugin Multi-select sia la causa del problema, dovrebbe essere abbastanza semplice migrare i vecchi campi ‘multiselect-dropdown’ ai nuovi campi ‘multiselect’ di Discourse. Qualcuno della community di Discourse dovrebbe essere in grado di aiutarti in questo.

2 Mi Piace

[PLUGIN discourse-multiselect-user-field] \"model:user-field\" non è stato trovato da modifyClass

Ma…

EDIT Simon mi ha battuto sul tempo

2 Mi Piace

Ciao, sì, il plugin sembra essere stato sostituito, quindi è improbabile che venga aggiornato, ma il problema riguarda la migrazione dei dati utente generati dal plugin ai corrispondenti campi utente principali, in modo che il plugin possa essere rimosso in sicurezza.

Anche la semplice disinstallazione del plugin sembra eliminare i dati associati (o almeno non sono più visibili quando si visualizzano i profili utente).

Supponendo che non sia l’unico utente del plugin, sarebbe fantastico se il plugin ricevesse un aggiornamento finale, per includere una funzione di ‘migrazione’!

Non vedo nulla nel plugin che possa causare la rimozione dal database dei campi utente creati tramite esso quando il plugin viene rimosso da un sito. Mi aspetterei di trovare che, dalla console Rails, eseguendo:

UserField.where(field_type: 'multiselect-dropdown')

restituisca l’elenco dei campi multiselect-dropdown che hai creato sul tuo sito.

I valori impostati per l’id di ciascuno di questi campi possono essere utilizzati per trovare le opzioni che ciascun utente sul tuo sito ha selezionato per il campo. Ad esempio, se gli id restituiti sono [1, 2, 3], ci saranno voci corrispondenti in UserCustomField con i nomi "user_field_1", "user_field_2" e "user_field_3". Supponendo che tutto ciò sia corretto, queste saranno informazioni sufficienti affinché qualcuno possa migrare i vecchi campi a nuovi campi dalla console Rails del tuo sito.

Se l’autore del plugin non se ne occuperà, probabilmente dovrai assumere qualcuno per il lavoro. Nota, non sto cercando di ottenere lavoro qui, preferirei non farlo :slight_smile:

Prima che venga eseguita la migrazione, dovresti creare nuovi campi ‘multiselect’ di Discourse che abbiano opzioni che corrispondano ai valori dei tuoi vecchi campi multiselect-dropdown. Per semplificare il processo di migrazione, sarebbe bene utilizzare lo stesso nome per i nuovi campi come hai usato per i vecchi campi. In questo modo, chiunque esegua la migrazione saprà che (ad esempio) i campi multiselect-dropdown con il nome “NZRAB number” dovrebbero essere migrati al nuovo campo ‘multiselect’ con il nome “NZRAB number”.

Concordo sul fatto che sarebbe meglio se l’autore del plugin se ne occupasse, ma se ciò non fosse possibile, procedi pure alla creazione di nuovi campi ‘multiselect’ e rimuovi il plugin.

4 Mi Piace

Grazie Simon

Solo per verificare: la versione principale del menu a discesa Multiselect dovrebbe consentire a un utente di selezionare contemporaneamente più elementi da un singolo menu a discesa, nello stesso modo in cui faceva il vecchio plugin?

Quando ho provato ad aggiungere un nuovo campo utente di tipo ‘Menu a discesa Multiselect’, c’è solo un’opzione ‘Menu a discesa Multiselect’ tra cui scegliere (mi sarei aspettato due, se la versione del plugin fosse distinta dalla versione principale).

Ora, se scelgo quel tipo di campo Menu a discesa Multiselect e provo ad aggiungere dati a un profilo utente con esso, accetta solo una singola selezione utente, non selezioni multiple contemporaneamente, quindi sembra che la versione principale del tipo di campo Menu a discesa Multiselect abbia una funzionalità ridotta e abbia sostituito la versione del tipo di campo del plugin, o c’è qualche interazione con la versione del plugin che sta compromettendo qualunque versione io stia vedendo?

Penso di sì, ma non ho provato il plugin multiselect, quindi non posso esserne sicuro. Ecco come funzionano i campi multiselect di Discourse:

Gli utenti possono selezionare uno qualsiasi degli elementi che aggiungi quando configuri il campo personalizzato:

È possibile che l’interfaccia utente sia diversa da quella del plugin, ma si spera che i risultati siano gli stessi.

Puoi confermare che, con il plugin installato, sei in grado di vedere i valori che gli utenti hanno inserito per i campi creati con il plugin visitando la loro pagina del profilo?

Modifica: @Paul_King, mi rendo conto che potrei essere stato eccessivamente ottimista riguardo alla migrazione dei dati. Senza accedere alla console Rails del tuo sito, il modo più semplice per farsi un’idea di cosa sta succedendo sarebbe verificare come sono stati salvati i vecchi campi eseguendo una query Data Explorer. Se non hai questo plugin installato sul tuo sito, potrebbe valere la pena aggiungerlo.

Se il plugin Data Explorer è installato sul tuo sito, prova a eseguire la seguente query:

SELECT * FROM user_fields

Speriamo che la query restituisca alcuni risultati con il loro field_type impostato su “multiselect-dropdown”. In tal caso, la migrazione dei dati dovrebbe essere abbastanza semplice.

2 Mi Piace

Grazie Simon

Il tuo esempio che mostra il funzionamento del menu a discesa multi-selezione corrisponde al modo in cui funzionava il mio, il che sembra promettente in termini di ripristino della funzionalità originale.

Attualmente sembra che né il vecchio plugin né la nuova versione della funzionalità principale funzionino correttamente: l’intero campo non appare affatto nella schermata di modifica del profilo utente, sebbene i valori che l’utente aveva originariamente inserito utilizzando il vecchio plugin appaiano per un utente che fa clic sull’avatar di un altro utente, ma con i dati originali che mostrano parentesi quadre e virgolette ai lati.

Sì, quella query restituisce quel tipo di campo. È possibile che la confusione derivi dal nome del vecchio plugin e dal nome principale di discourse per le rispettive versioni di un tipo di campo utente multi-selezione che sono identici?

Non c’è da stupirsi. Ciò significa che i dati necessari per la migrazione sono nel database, ma è probabile che siano in una forma che non renderà la migrazione facile come speravo.

Per confermarlo, prova a eseguire la seguente query di Data Explorer:

SELECT * FROM user_custom_fields
WHERE name = 'user_field_1'
ORDER BY user_id

Le informazioni utili dai risultati di quella query saranno ciò che è impostato nella colonna value. Idealmente, i risultati dovrebbero assomigliare a questo, con una voce separata per ogni opzione selezionata da un utente:

Sospetto che quello che troverai è che i valori per ogni opzione selezionata da un utente esisteranno nella stessa riga. Ad esempio, [this, that] o "[this, that]". Se è corretto, puoi pubblicare alcune delle voci di valore?

Potrebbe essere necessario un po’ di tentativi per capire come analizzare i valori nella forma che Discourse si aspetta di trovare.

2 Mi Piace

Suppongo che un’esportazione del file utente fornirà tutti i dati necessari e potrà essere ripulita per essere pronta per l’importazione utilizzando qualcosa di simile a questo:

2 Mi Piace

Sembra che funzionerebbe. Sarebbe probabilmente necessario assumere Jay, o qualcuno di simile, per fare il lavoro.

Dovrebbe anche essere tecnicamente possibile apportare le modifiche dalla console di Rails. La difficoltà di questo approccio dipenderà da come vengono impostati i campi value per i vecchi UserCustomField “multiselect-dropdown”. Se viene memorizzata un’opzione per riga, sarebbe semplice generare nuove voci UserCustomField da quelle vecchie. Se vengono memorizzate più opzioni in ogni riga, potrebbe diventare un po’ complicato.

2 Mi Piace

È fortunato che io sia qui vicino :wink:.

Il formato dei dati era interessante: era in due forme diverse che sono cambiate un giorno. Inizialmente erano:

this
that

E un giorno sono improvvisamente cambiati in

this,that

Ho fatto un po’ di brutta magia con i fogli di calcolo per trasformare i dati in come sono ora i nuovi campi multiselect (come sopra). Sfortunatamente, lo script non può (ancora) gestire il multiselect. Qualcuno vuole fare una PR?

Anche se posso aggirare / hackerare per fare il lavoro, penso:

1° passaggio: tutti gli utenti con una singola voce usando lo script esistente
2° passaggio: tutti gli utenti con voci multiple usando uno script hackerato che forza nuove righe.

più tardi…
Il mio piano astuto ha funzionato.

Questo è lo script hackerato per il 2° passaggio:

# frozen_string_literal: true

require "csv"
desc "Import user fields"
task "multi_user_fields:import_csv", [:filename] => [:environment] do |_task, args|

  puts "Filename: #{args[:filename]}"
  data = CSV.read(args[:filename], headers: true)

  data.each_entry do |row|
    puts "doing row."
    row.to_h.each do |x|
      user_id = row["user_id"]
      if x.first == "user_id"
        u = User.find(user_id)
        puts "Got user: #{u.username}"
      else
        name = x.first
        val = row[x.first]
        ucf = UserCustomField.find_by(user_id: row["user_id"], name: name)
        if val
          puts "Creating UCF: #{row['user_id']} Name: #{name}, value: #{val}"
          UserCustomField.create(user_id: user_id, name: name, value: val)
        end
      end
    end
  end
end

@pfaffman - quanto sarebbe facile aggiornare lo script effettivo per gestire i campi multiselect per altri che modificheranno gli UCF in futuro?

4 Mi Piace

Dal mio punto di vista sono molto felice di riferire che Nathan e il suo processo (con tutti i trucchi) hanno assolutamente funzionato.

Ho confermato che la finestra di dialogo di iscrizione ora funziona, gli utenti intenzionati possono nuovamente selezionare risposte multiple dalle opzioni a discesa, e possono visualizzarle e modificarle nuovamente come utenti approvati, e il vecchio plugin multi-selezione è stato rimosso con successo.

Grazie a @nathank, @omarfilip, @simon e @RGJ per aver dedicato del tempo a considerare questo problema e condividere le vostre conoscenze e intuizioni - ulteriore prova, se mai ce ne fosse bisogno, di quanto sia eccezionale questa community!

5 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.