古いマルチセレクトユーザーフィールドプラグインにより、新規アカウントを作成できなくなりました

フォーラムのサインアップダイアログで「アカウントを作成」ボタンが機能しなくなったようです。すべてのユーザーフィールド(見える限り正しく)を完了しても、何も反応がありません(エラーメッセージさえ表示されません)。

ダイアログは閉じず、メール認証メッセージも送信されません。

サインアップ中のユーザーフィールドの内容に明らかな問題は見られません。すべて完了しており、エラーも表示されていません。

Chromeバージョン117.0.5938.134(公式ビルド)およびEdgeバージョン118.0.2088.33(公式ビルド)でテストしました。

ブラウザキャッシュのクリアは効果がないようです。

手動の「テストメール」機能は、影響を受けるユーザーのアドレスに正常にメッセージを送信します。
既存ユーザーのフォーラムメーリングリスト機能は正常に機能します。

フォーラムのウェブサイトへのログインとログアウトも正常に行えます。

フォーラムの設定に最近変更があったとは認識していませんが(ソフトウェアアップデート以外)、ユーザー入力を無視する設定があるかどうかはわかりません。

意図したユーザーは数回サインアップを試みましたが、私も私の側から試しましたが、問題を確認できます。

現在、最新のDiscourseバージョン(問題を解決するために3.2.0.beta2-devビルドに更新しました)を実行しています。

これがいつから発生しているのかはわかりません。しばらく新しいサインアップがなかったためです(おそらくその理由がわかりました!)。

ブラウザのコンソールにエラーは表示されていますか?ブラウザにコンテンツブロッカーや広告ブロッカーはインストールされていますか?

「いいね!」 1

良い考えですね。

はい、Edgeブラウザでエラーと警告が表示されています。

何を見ているのかよくわかりません。これは、マルチセレクトプラグインが最新のDiscourseバージョンと互換性がないことを意味しますか?

残念ながら、このプラグインはサインアップ時に非常に重要です。ドロップダウンリストから特定のユーザーフィールドをポップレートするために使用していました。

「いいね!」 2

問題を特定するために、一時的にプラグインを無効にしてみてください。

「いいね!」 3

マルチセレクトプラグインが問題の原因であると仮定すると、古い「multiselect-dropdown」フィールドを新しいDiscourseの「multiselect」フィールドに移行するのは非常に簡単のはずです。Discourseコミュニティの誰かがそのお手伝いをすることができるはずです。

「いいね!」 2

[PLUGIN discourse-multiselect-user-field] 「model:user-field」が見つかりませんでした by modifyClass

しかし…

編集 Simonが私より先に回答しました

「いいね!」 2

こんにちは。プラグインは置き換えられたようで、更新される可能性は低いですが、問題はプラグインによって生成されたユーザーデータを対応するコアユーザーデータフィールドに移行することであり、それによってプラグインを安全に削除できるようになります。

プラグインをアンインストールすると、関連データも削除されるようです(少なくともユーザープロファイルを見ても表示されなくなります)。

プラグインのユーザーが私だけではないと仮定すると、プラグインに「移行」機能を含める最終アップデートが提供されると素晴らしいのですが!

プラグインをサイトから削除したときに、それによって作成されたユーザーフィールドがデータベースから削除されるようなことは、プラグインには見当たりません。むしろ、Railsコンソールで次を実行すると、次のような結果が得られるはずです。

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

サイトで作成したmultiselect-dropdownフィールドのリストが返されます。

返された各フィールドのidの値を使用して、サイトの各ユーザーがそのフィールドに選択したオプションを見つけることができます。たとえば、返されたidが[1, 2, 3]の場合、"user_field_1""user_field_2""user_field_3"という名前の対応するUserCustomFieldエントリが存在します。これがすべて正しいと仮定すると、誰かがサイトのRailsコンソールから古いフィールドを新しいフィールドに移行するのに十分な情報となります。

プラグインの作者がこれに対応しない場合、おそらく誰かに依頼する必要があります。私はここで仕事を得ようとしているわけではありません。むしろやりたくありません :slight_smile:

移行を実行する前に、古いmultiselect-dropdownフィールドの値と一致するオプションを持つ新しいDiscourseの「multiselect」フィールドを作成する必要があります。移行プロセスを容易にするために、新しいフィールドの名前を古いフィールドの名前と同じにすると良いでしょう。そうすれば、移行を実行する人は、たとえば、"NZRAB number"という名前のmultiselect-dropdownフィールドを、"NZRAB number"という名前の新しい「multiselect」フィールドに移行する必要があることがわかります。

プラグインの作者がこれに対応するのが最善であることに同意しますが、それができない場合は、新しい「multiselect」フィールドを作成してプラグインを削除してください。

「いいね!」 4

サイモン、ありがとうございます。

確認ですが、Multiselect dropdown のコアバージョンは、古いプラグインと同様に、ユーザーが単一のドロップダウンから複数の項目を同時に選択できるようにするべきでしょうか?

「Multiselect dropdown」タイプの新しいユーザーフィールドを追加しようとすると、「Multiselect dropdown」というオプションが1つしかありません(プラグインバージョンとコアバージョンが異なる場合、2つあると予想していたかもしれません)。

この Multiselect dropdown フィールドタイプを選択し、ユーザープロファイルにデータを追加しようとすると、複数選択ではなく、単一のユーザー選択しか受け付けません。これは、Multiselect dropdown フィールドタイプのコアバージョンが機能縮小され、プラグインのフィールドタイプバージョンが置き換えられたかのどちらか、または、私が現在見ているバージョンを無効にしているプラグインバージョンとの何らかの相互作用があるかのいずれかのようです。

そうだと思いますが、マルチセレクトプラグインを試したことがないので、確信はありません。Discourseのマルチセレクトフィールドは次のように機能します。

ユーザーは、カスタムフィールドを設定する際に追加した項目をすべて選択できます。

UIがプラグインの動作とは異なる可能性がありますが、結果は同じであることを願っています。

プラグインがインストールされた状態で、プラグインで作成されたフィールドの値を、プロファイルページにアクセスしたときに確認できるか確認していただけますか?

編集:@Paul_King、データの移行について楽観的すぎたかもしれません。サイトのRailsコンソールにアクセスせずに、何が起こっているのかを把握する最も簡単な方法は、Data Explorerクエリを実行して古いフィールドがどのように保存されているかを確認することです。サイトにそのプラグインがインストールされていない場合は、追加する価値があるかもしれません。

サイトにData Explorerプラグインがインストールされている場合は、次のクエリを実行してみてください。

SELECT * FROM user_fields

このクエリが、field_typeが「multiselect-dropdown」に設定された結果を返すことを願っています。もしそうであれば、データの移行は比較的簡単になるはずです。

「いいね!」 2

サイモンさん、ありがとうございます。

マルチセレクトドロップダウンの動作を示すあなたの例は、私の以前の動作方法と一致しており、元の機能を復元するという点で有望に見えます。

現在、古いプラグインも新しいバージョンのコア機能も正しく機能していないようです。ユーザープロフィールの編集画面にはフィールド全体が表示されなくなっていますが、古いプラグインを使用してユーザーが最初に入力した値は、別のユーザーのアバターをクリックすると表示されますが、元のデータは両側に角括弧と引用符が付いた状態で表示されます。

はい、そのクエリはフィールドタイプを返します。古いプラグイン名と、それぞれのバージョンのマルチセレクトユーザーフィールドタイプの Discourse コア名が同一であるために混乱が生じている可能性はありますか?

それは驚くことではありません。それは、移行に必要なデータがデータベースにあることを意味しますが、私が望んでいたほど移行が簡単ではない形になっている可能性が高いと思われます。

それを確認するには、次のData Explorerクエリを実行してみてください。

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

そのクエリの結果から有用な情報は、value列に設定されているものです。理想的には、ユーザーが選択した各オプションのエントリが個別に表示される、次のような結果になります。

ユーザーが選択した各オプションの値が同じ行に存在するのではないかと推測します。たとえば、[this, that]または"[this, that]"のようになります。それが正しい場合、値のエントリをいくつか投稿していただけますか?

Discourseが期待する形式に値を解析する方法を見つけるには、試行錯誤が必要になる場合があります。

「いいね!」 2

ユーザーファイルをエクスポートすれば必要なデータがすべて取得でき、以下のようなものを使用してインポートの準備ができるようにクリーニングできると思います。

「いいね!」 2

それが機能するようです。ジェイかそれに類する人物を雇う必要があるでしょう。

Railsコンソールから変更を加えることも技術的には可能はずです。そのアプローチの難易度は、古い「multiselect-dropdown」UserCustomFieldのvalueフィールドがどのように設定されているかによって異なります。1つのオプションが各行に保存されている場合、古いUserCustomFieldから新しいUserCustomFieldエントリを生成するのは簡単でしょう。複数のオプションが各行に保存されている場合、それは少しトリッキーになる可能性があります。

「いいね!」 2

彼はすぐ近くにいるので幸運です:wink:。

データ形式は興味深いものでした。2つの異なる形式で、ある日変更されました。最初は次のようになりました。

this
that

そしてある日、突然次のように変更されました。

this,that

新しいマルチセレクトフィールド(上記)のようにデータを変換するために、醜いスプレッドシートマジックを使いました。残念ながら、このスクリプトは(まだ)マルチセレクトを処理できません。PRは誰か?

回避策/ハックで対応できますが、次のように思います。

1回目のパス:既存のスクリプトを使用して単一のエントリを持つすべてのユーザー
2回目のパス:ハックされたスクリプトを使用して複数のエントリを持つすべてのユーザー。これにより新しい行が強制されます。

後で…
私の巧妙な計画はうまくいきました。

これは2回目のパス用のハックされたスクリプトです。

# 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 - 将来UCFをいじる他の人のために、実際のスクリプトをマルチセレクトフィールドを処理するように更新するのはどれくらい簡単ですか?

「いいね!」 4

Nathanさんとそのプロセス(ハックを含む)のおかげで、問題が解決したことをご報告できて大変嬉しく思います。

サインアップダイアログが正常に機能するようになり、意図したユーザーがドロップダウンオプションから複数の回答を選択できるようになり、承認されたユーザーとしてそれらを表示および編集できるようになりました。また、古いマルチセレクトプラグインも正常に削除されました。

この問題にご検討いただき、知識と洞察を共有してくださった @nathank@omarfilip@simon@RGJ の皆様に感謝いたします。このコミュニティがいかに素晴らしいかの、さらなる証拠です!

「いいね!」 5

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