isaac
(Isaac Janzen)
1
|||
-|-|-|
| 概要 | Discourse Authentication Validations は、カスタムバリデーションをユーザーフィールドに追加して、サインアップモーダルでのユーザーフィールドの表示を切り替える機能を提供します。
| リポジトリリンク | https://github.com/discourse/discourse-authentication-validations
| インストールガイド | Discourseにプラグインをインストールする方法
概要
Discourse Authentication Validations は、カスタムバリデーションをユーザーフィールドに追加する機能を提供します。
カスタムユーザーフィールドには、必須フィールドの空の値の検出以外に、コアによって提供される validation はありません。このプラグインは、ユーザーフィールドごとに正規表現を定義し、提供された入力値に対してチェックする機能を追加します。
さらに、このプラグインは、サインアップモーダルでのユーザーフィールドの表示を切り替える機能を追加します。これにより、ユーザーフィールドを「連鎖」させ、前のユーザーフィールドに特定の値がある場合にのみユーザーフィールドが表示されるようになります。
基本設定
1. プラグインの有効化
Discourse Authentication Validations プラグインは、トグルまたは設定から有効にできます。どちらも admin/plugins ページからアクセスできます。
2. ユーザーフィールドにカスタムバリデーションを追加する
Discourse Authentication Validations プラグインが有効になった後、ユーザーフィールドフォームの下部に カスタムバリデーションを含める チェックボックスが表示されます。
チェックすると、さらに3つのフィールドが表示されます。
- 値バリデーション正規表現
- 表示値
- 対象ユーザーフィールド
カスタムバリデーションの追加
値バリデーション正規表現 フィールドに有効な正規表現を含めます。
サインアップフォームのユーザーフィールドの値は、含めた正規表現に対してテストされます。入力がカスタム正規表現の基準を満たさない場合、サインアップフォームは送信されません。
値なし(デフォルトのフォームバリデーションに依存)
不正な値
正しい値
ユーザーフィールドの連鎖
まず、ユーザーフィールドに 表示値 を含めます。
ユーザーフィールドに 表示値 が含まれている場合、添付された入力値が 表示値 の いずれか と一致するまで、その値の入力を監視します。その後、含まれる 対象ユーザーフィールド の表示を切り替え、表示可能にします。
次に、対象ユーザーフィールド の値を追加します。
対象ユーザーフィールド ドロップダウンには、利用可能なすべてのユーザーフィールドのリストが表示されます。選択したユーザーフィールドは、表示値 の対応する値によって表示が切り替わります。
高度な連鎖
複数のユーザーフィールドにカスタムバリデーションを追加することで、ユーザーフィールドを連鎖させることができます。
たとえば、次の値を持つ3つのユーザーフィールドがあるとします。
| 名前 |
カスタムバリデーションあり |
表示値 |
対象ユーザーフィールド |
| 入力1 |
true |
show-field-two |
入力2 |
| 入力2 |
true |
show-field-three |
入力3 |
| 入力3 |
false |
|
|
入力2と入力3は、入力1の「子」であるため、デフォルトで非表示になります。入力1に show-field-two の 表示値 が追加されると、入力2が表示されますが、入力3は引き続き非表示のままです。入力2の値が show-field-three になるまで非表示のままです。
表示値 と 対象クラス の適切な組み合わせにより、ユーザーフィールドを無限にネストさせることができます。
「いいね!」 18
こんにちは、@isaacさん。
このプラグインは素晴らしいですね。まさに私が求めていたものです!まだメンテナンスされていますか?「チェイニング」機能で問題が発生しています。
上記のエラーは、以下を使用して再現しました。
しかし、デフォルトですべてのフィールドが表示されてしまいます…説明文を見落としていたら申し訳ありません!
「いいね!」 1
申し訳ありません。プラグインは動作しています。ただし、招待リンク経由で表示している場合は動作しません。公開サインアップページを使用している場合は動作します。
招待と公開の両方のサインアップでロジックが機能するようになると、素晴らしい機能になるでしょう!
プラグイン、素晴らしい出来です!
「いいね!」 5
isaac
(Isaac Janzen)
5
まったく同感です。@tobiaseigen、このプラグインをより広範な機能として採用する場合、@kravitsjacob が指摘したように、両方の場所(公開/招待)でロジックが機能するようにしたいと考えています。
「いいね!」 2
こんにちは、@isaac さん。この素晴らしいプラグイン、本当にありがとうございます。私にとって多くのディスコースの機会が開かれました。
ちょっとしたバグに遭遇しました。質問が非表示になっている場合でも、質問への回答が保存されていることに気づきました。これにより、意図しない状況がいくつか発生しています。ユーザーが実際には送信できないはずの回答を送信しています(だからこそ、そもそも質問を非表示にしたかったのです)。この動作は、質問が二重にネストされている場合に、親の回答が選択解除されていても、トリガーとなる回答が選択されていると思っているため、質問が表示され続けるという別の状況も引き起こします。この説明は非常に曖昧だと思いますので、この動作をハイライトしたGIFを以下に示します。

私の希望する修正は、回答が見えなくなったときに回答をnull値にリセットすることだと思います。これは、フォームを設定する人が設定できる「オプトイン」動作にすることもできます。これらのツリーをたどるときに回答が永続するかどうかについては、さまざまな考え方があると思います。
これを実装していただけますか? 
「いいね!」 5
isaac
(Isaac Janzen)
7
詳細なご回答ありがとうございます。来週確認させていただきます 
「いいね!」 3
RGJ
(Richard - Communiteq)
11
必須フィールドをオプションにすることは現在できません。
「業種」フィールドがあり、「その他」が選択されるたびに、「その他の業種」フィールドが表示されます。
しかし、「その他の業種」フィールドを必須にすると、そのフィールドが非表示になっている場合にフォームを送信できなくなります。
divを手動で表示すると、フォームが非表示になっているにもかかわらず、この入力が必須であることがわかります。
「その他」を選択し、値を入力してから、別の業種を選択して入力が非表示になった場合、フォームを送信できます。そして、@kravitsjacob が指摘したのと同じ状況が発生します。「業種」が「その他」に設定されていなくても、「その他の業種」フィールドの値がユーザープロファイルに保存されます。
ユーザー管理:
「いいね!」 3
RGJさん、必須フィールドの問題は解決できましたか?私も同じ問題に直面しています。
isaacさん、これに対する回避策はありますか?表示条件が設定されているフィールドを必須にしたいのですが。
RGJ
(Richard - Communiteq)
13
いいえ、これについてはまだ返答がなく、私も時間をかけていません。
@RGJ 様、迅速なご返信ありがとうございます。
元のリポジトリに、この問題を解決するはずの修正を含むPRを作成しました。
ここでの主な課題は、バリデーションがフロントエンドとバックエンドの2か所で実行されるという事実であり、それぞれに個別にソリューションを実装し、期待どおりに動作することを確認する必要がありました。
これが将来誰かの助けになれば幸いです。
「いいね!」 1
追加のPRを追加しました。これは、各フィールドの値ごとに条件付きフィールドロジックを追加するのではなく、各フィールドの値ごとにロジックを追加するものであり、フィールドの値に応じて異なるフィールドを表示・非表示にできることを意味します。
また、JSONBを格納する新しい列がデータベースにどのように格納されるかのプレビューも表示されます。

「いいね!」 1
検索可能なフィールドにはどのように影響しますか?
検索可能に設定されたカスタムフィールドが、サイトのユーザーディレクトリの設定メニューに表示されず、代わりにそれにリンクされている3つの条件付きフィールドが表示されます。その3つのフィールド自体は検索可能には設定されていません。
こんにちは
申し訳ありませんが、Discourse のユーザーカスタムフィールドに関するロジックをまだすべて把握していないため、その質問を正しく理解したかどうか定かではありません。
私の知る限りでは、「Searchable (検索可能)」はフィールドをインデックス化するようにマークし、ポータルの他の部分で使用できるようにしますが、私はまだそれを扱ったことがなく、適切に設定する方法もわかりません。
理論的には、条件付きフィールドは「Searchable」フィールドに何ら影響を与えるべきではなく、オートコンプリートを使用して値を貼り付ける場合でも、UserField 要素に値をアタッチするため、ロジックは引き続き機能するはずです。
もしかしたら、質問についてもう少し詳しい情報を提供していただけるかもしれません。スクリーンショットを添付していただけると、役立つかもしれません。
明確でなかったかもしれません。私の質問はOPとプラグイン全般についてでした。混乱を招いたなら申し訳ありません。
ロジックの残りの部分はプラグインで正常に動作していますが、最初のスクリーンショットの一番上のフィールドに基づいてのみ表示される3つのフィールドがあります。その後、ユーザーディレクトリの設定では、検索可能として指定されている元のフィールドではなく、依存する3つのフィールドのみが表示されます。
スクリーンショット

