Neue Konten können wegen altem multi-select user field plugin nicht mehr erstellt werden.

Aus irgendeinem Grund scheint der Button „Konto erstellen“ im Registrierungsdialog für mein Forum nicht mehr zu funktionieren. Wenn ich darauf klicke, nachdem alle Benutzerfelder (soweit ich sehen kann, korrekt) ausgefüllt sind, erfolgt keine Reaktion (nicht einmal eine Fehlermeldung).

Der Dialog schließt sich nicht und es wird keine E-Mail-Bestätigungsnachricht gesendet.

Ich sehe keine offensichtlichen Probleme mit dem Inhalt der Benutzerfelder während der Registrierung – alle sind ausgefüllt und keines zeigt Fehler an.

Getestet unter Chrome Version 117.0.5938.134 (Offizieller Build) und Edge Version 118.0.2088.33 (Offizieller Build).

Das Löschen des Browser-Caches scheint keine Auswirkungen zu haben.

Die manuelle Funktion „E-Mail testen“ sendet eine Nachricht an die Adresse des betroffenen Benutzers.
Die Forum-Mailinglisten-Funktionalität für bestehende Benutzer funktioniert einwandfrei.

Ich kann mich auch problemlos auf der Forum-Website anmelden und abmelden.

Ich bin mir keiner kürzlichen Änderungen an den Foreneinstellungen bewusst (außer Software-Updates), bin mir aber nicht sicher, ob es überhaupt eine Einstellung für „Benutzereingaben ignorieren“ gibt.

Mein beabsichtigter Benutzer hat versucht, sich ein paar Mal zu registrieren, und ich habe es auch von meiner Seite versucht und kann das Problem bestätigen.

Derzeit läuft die neueste Discourse-Version (aktualisiert auf 3.2.0.beta2-dev, in der Hoffnung, das Problem zu lösen).

Ich bin mir nicht sicher, wann dies angefangen hat, da wir schon seit einiger Zeit keine neuen Anmeldungen mehr hatten (vielleicht weiß ich jetzt warum!).

Sehen Sie Fehler in der Browserkonsole? Haben Sie (oder der Benutzer) Inhalts- oder Adblocker im Browser installiert?

1 „Gefällt mir“

Guter Gedanke.

Ja, im Edge Browser sehe ich Fehler und Warnungen

Ich bin mir nicht sicher, was ich sehe – bedeutet das, dass das Multi-Select-Plugin mit der neuesten Discourse-Version unverträglich ist?

Leider ist dieses Plugin bei der Anmeldung ziemlich wichtig, da es bestimmte Benutzerfelder aus Dropdown-Listen befüllt.

2 „Gefällt mir“

Ich würde versuchen, das Plugin vorübergehend zu deaktivieren, um das Problem zu isolieren.

3 „Gefällt mir“

Wenn das Multi-select-Plugin die Ursache des Problems ist, sollte es relativ einfach sein, die alten ‚multiselect-dropdown‘-Felder in neue Discourse ‚multiselect‘-Felder zu migrieren. Jemand aus der Discourse-Community sollte Ihnen dabei helfen können.

2 „Gefällt mir“

[PLUGIN discourse-multiselect-user-field] \"model:user-field\" wurde nicht gefunden von modifyClass

Aber…

EDIT Simon war schneller.

2 „Gefällt mir“

Hallo – ja, das Plugin scheint veraltet zu sein und wird daher wahrscheinlich nicht aktualisiert werden – aber das Problem liegt bei der Migration der vom Plugin generierten Benutzerdaten zu entsprechenden Kernbenutzerdatenfeldern, damit das Plugin sicher entfernt werden kann.

Das einfache Deinstallieren des Plugins scheint auch die zugehörigen Daten zu löschen (oder sie sind zumindest nicht mehr sichtbar, wenn man sich Benutzerprofile ansieht).

Angenommen, ich bin nicht der einzige Plugin-Benutzer, wäre es großartig, wenn das Plugin ein letztes Update erhalten würde, das eine ‘Migrieren’-Funktion enthält!

Ich sehe nichts im Plugin, das dazu führen würde, dass die über das Plugin erstellten Benutzerfelder bei der Entfernung des Plugins von einer Website aus der Datenbank gelöscht werden. Ich würde erwarten, dass vom Rails-Konsolen aus Folgendes ausgeführt wird:

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

gibt die Liste der multiselect-dropdown-Felder zurück, die Sie auf Ihrer Website erstellt haben.

Die Werte, die für die id jedes dieser Felder festgelegt sind, können verwendet werden, um die Optionen zu finden, die jeder Benutzer auf Ihrer Website für das Feld ausgewählt hat. Wenn die zurückgegebenen IDs beispielsweise [1, 2, 3] sind, gibt es entsprechende UserCustomField-Einträge mit den Namen "user_field_1", "user_field_2" und "user_field_3". Wenn dies alles korrekt ist, reichen diese Informationen aus, damit jemand die alten Felder von der Rails-Konsole Ihrer Website auf neue Felder migrieren kann.

Wenn der Autor des Plugins sich nicht darum kümmert, müssen Sie wahrscheinlich jemanden für die Arbeit beauftragen. Beachten Sie, dass ich hier keine Arbeit suche, ich würde es lieber nicht tun :slight_smile:

Bevor die Migration durchgeführt wird, sollten Sie neue Discourse-„Multiselect“-Felder erstellen, die Optionen haben, die den Werten Ihrer alten Multiselect-Dropdown-Felder entsprechen. Um den Migrationsprozess zu erleichtern, wäre es gut, den neuen Feldern denselben Namen zu geben wie den alten Feldern. Auf diese Weise weiß derjenige, der die Migration durchführt, dass beispielsweise Multiselect-Dropdown-Felder mit dem Namen „NZRAB number“ in das neue „Multiselect“-Feld mit dem Namen „NZRAB number“ migriert werden sollten.

Ich stimme zu, dass es am besten wäre, wenn der Autor des Plugins sich darum kümmern würde, aber wenn das nicht möglich ist, erstellen Sie einfach neue „Multiselect“-Felder und entfernen Sie das Plugin.

4 „Gefällt mir“

Danke Simon

Nur zur Überprüfung – sollte die Kernversion des Multiselect-Dropdowns dem Benutzer erlauben, mehrere Elemente gleichzeitig aus einem einzigen Dropdown auszuwählen, so wie es das alte Plugin tat?

Als ich versuchte, ein neues Benutzerfeld vom Typ „Multiselect-Dropdown“ hinzuzufügen, gibt es nur eine Option „Multiselect-Dropdown“ zur Auswahl (ich hätte vielleicht zwei erwartet, wenn die Plugin-Version von der Kernversion getrennt ist).

Wenn ich nun diesen Feldtyp „Multiselect-Dropdown“ auswähle und versuche, Daten zu einem Benutzerprofil damit hinzuzufügen, akzeptiert er nur eine einzige Benutzerauswahl, nicht mehrere Auswahlen gleichzeitig – es scheint also entweder, dass die Kernversion des Multiselect-Dropdown-Feldtyps eine reduzierte Funktionalität hat und die Version des Plugin-Feldtyps verdrängt hat, oder es gibt eine Interaktion mit der Plugin-Version, die welche Version auch immer ich sehe, beeinträchtigt?

Ich denke schon, aber ich habe das Multi-Select-Plugin nicht ausprobiert, daher bin ich mir nicht sicher. So funktionieren die Discourse-Multiselect-Felder:

Benutzer können jedes der Elemente auswählen, die Sie bei der Konfiguration des benutzerdefinierten Feldes hinzufügen:

Es ist möglich, dass die Benutzeroberfläche anders ist als das, was das Plugin tat, aber hoffentlich sind die Ergebnisse die gleichen.

Können Sie bestätigen, dass Sie mit installiertem Plugin die Werte sehen können, die Benutzer für die mit dem Plugin erstellten Felder eingegeben haben, wenn Sie deren Profilseite besuchen?

Bearbeiten: @Paul_King, ich erkenne, dass ich vielleicht zu optimistisch bezüglich der Migration der Daten war. Ohne Zugriff auf die Rails-Konsole Ihrer Website wäre der einfachste Weg, um ein Gefühl dafür zu bekommen, was vor sich geht, zu prüfen, wie die alten Felder gespeichert wurden, indem Sie eine Data Explorer-Abfrage ausführen. Wenn Sie dieses Plugin nicht auf Ihrer Website installiert haben, könnte es sich lohnen, es hinzuzufügen.

Wenn das Data Explorer-Plugin auf Ihrer Website installiert ist, versuchen Sie, die folgende Abfrage auszuführen:

SELECT * FROM user_fields

Hoffentlich gibt diese Abfrage einige Ergebnisse zurück, bei denen der Feldtyp auf “multiselect-dropdown” gesetzt ist. Wenn ja, sollte die Migration der Daten ziemlich einfach sein.

2 „Gefällt mir“

Danke Simon

Dein Beispiel, das die Funktionsweise des Multi-Select-Dropdowns zeigt, entspricht der Funktionsweise, wie meine früher funktionierte, was vielversprechend für die Wiederherstellung der ursprünglichen Funktionalität ist.

Derzeit scheinen weder das alte Plugin noch die Kernfunktionalität der neuen Version korrekt zu funktionieren – das gesamte Feld erscheint nicht mehr im Bearbeitungsbildschirm des Benutzerprofils, obwohl Werte, die der Benutzer ursprünglich mit dem alten Plugin eingegeben hat, für einen Benutzer, der auf den Avatar eines anderen Benutzers klickt, angezeigt werden, jedoch mit den ursprünglichen Daten, die eckige Klammern und Anführungszeichen auf beiden Seiten aufweisen.

Ja, diese Abfrage gibt diesen Feldtyp zurück. Ist es möglich, dass die Verwirrung durch den alten Plugin-Namen und den Discourse-Kernnamen für ihre jeweiligen Versionen eines Multi-Select-Benutzerfeldtyps, die identisch sind, entsteht?

Das ist nicht überraschend. Das bedeutet, dass die für die Migration notwendigen Daten in der Datenbank vorhanden sind, aber es ist wahrscheinlich, dass sie in einer Form vorliegen, die die Migration nicht so einfach macht, wie ich gehofft hatte.

Um das zu bestätigen, versuchen Sie, die folgende Data Explorer-Abfrage auszuführen:

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

Die nützlichen Informationen aus den Ergebnissen dieser Abfrage sind das, was in der Spalte value steht. Idealerweise würden die Ergebnisse so aussehen, mit einem separaten Eintrag für jede Option, die ein Benutzer ausgewählt hat:

Ich vermute, dass die Werte für jede vom Benutzer ausgewählte Option in derselben Zeile vorhanden sein werden. Zum Beispiel [this, that] oder \"[this, that]\". Wenn das korrekt ist, können Sie einige der Werteinträge posten?

Es könnte etwas Ausprobieren erfordern, um herauszufinden, wie die Werte in die Form gebracht werden können, die Discourse erwartet.

2 „Gefällt mir“

Ich gehe davon aus, dass ein Export der Benutzerdatei alle benötigten Daten liefert und diese bereinigt werden können, um sie mit etwas wie diesem für den Import vorzubereiten:

2 „Gefällt mir“

Das würde wahrscheinlich funktionieren. Jay oder jemand Ähnliches müsste wahrscheinlich eingestellt werden, um die Arbeit zu erledigen.

Es sollte auch technisch möglich sein, die Änderungen von der Rails-Konsole aus vorzunehmen. Die Schwierigkeit dieses Ansatzes hängt davon ab, wie die value-Felder für die alten „multiselect-dropdown“-UserCustomFields gesetzt werden. Wenn pro Zeile eine Option gespeichert ist, wäre es einfach, neue UserCustomField-Einträge aus den alten zu generieren. Wenn mehrere Optionen in jeder Zeile gespeichert sind, könnte es etwas knifflig werden.

2 „Gefällt mir“

Er hat Glück, dass ich gleich um die Ecke bin :wink:.

Das Datenformat war interessant – es lag in zwei verschiedenen Formen vor, die sich eines Tages änderten. Sie begannen als:

this
that

Und eines Tages änderten sie sich plötzlich zu

this,that

Ich habe einige hässliche Tabellenkalkulations-Magie angewendet, um die Daten in das Format der neuen Mehrfachauswahlfelder zu transformieren (wie oben). Leider kann das Skript (noch) keine Mehrfachauswahl verarbeiten. PR jemand?

Obwohl ich es umgehen / hacken kann, um die Aufgabe zu erledigen, schätze ich:

  1. Durchlauf: Alle Benutzer mit einem einzelnen Eintrag unter Verwendung des vorhandenen Skripts
  2. Durchlauf: Alle Benutzer mit mehreren Einträgen unter Verwendung eines gehackten Skripts, das neue Zeilen erzwingt.

später…
Mein raffinierter Plan hat funktioniert.

Dies ist das gehackte Skript für den 2. Durchlauf:

# 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 – wie einfach wäre es, das eigentliche Skript zu aktualisieren, um Mehrfachauswahlfelder für andere zu verarbeiten, die in Zukunft mit UCFs herumspielen?

4 „Gefällt mir“

Von meiner Seite kann ich sehr erfreut berichten, dass Nathan und sein Prozess (mit allen Hacks) absolut den gewünschten Erfolg gebracht haben.

Ich habe bestätigt, dass der Anmeldedialog jetzt funktioniert, beabsichtigte Benutzer können wieder mehrere Antworten aus den Dropdown-Optionen auswählen und diese als genehmigte Benutzer anzeigen und bearbeiten, und das alte Multi-Select-Plugin wurde erfolgreich entfernt.

Vielen Dank an @nathank, @omarfilip, @simon und @RGJ, dass Sie sich die Zeit genommen haben, dieses Problem zu berücksichtigen und Ihr Wissen und Ihre Erkenntnisse zu teilen – ein weiterer Beweis, als ob noch einer nötig wäre, wie großartig diese Community ist!

5 „Gefällt mir“

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