こんにちは。
現在、Discourse に vb3 から大規模なコミュニティを移行中です。
ユーザー名の約 1,200 件に感嘆符「!」が含まれており、これを再度有効にするオプションが見つかりませんでした。
すでに「Unicode ユーザー名」を有効にしましたが、効果はありませんでした。
この問題に対する既製の解決策はありますか?
よろしくお願いします!
こんにちは。
現在、Discourse に vb3 から大規模なコミュニティを移行中です。
ユーザー名の約 1,200 件に感嘆符「!」が含まれており、これを再度有効にするオプションが見つかりませんでした。
すでに「Unicode ユーザー名」を有効にしましたが、効果はありませんでした。
この問題に対する既製の解決策はありますか?
よろしくお願いします!
いいえ、ユーザー名で法的な文字を変更することは実際には選択肢ではありません。もっと面白みのないユーザー名にする必要があると思います。
おっと、かなりの見落としのようですね…これには何か技術的な説明がありますか?プラグインやフォークでこれを解決することはできますか?
私はその決定を下していませんが、ユーザー名に ! が無効な文字であるシステムはたくさんあります。プラグイン(または Discourse のアップグレードを将来的に行いたい場合は非常に、非常に悪い考えであるフォーク)で許可しようとした場合、それは困難になる可能性が高いです。
! は多くのコンテキストで特別な意味を持ち、ユーザー名のバリデーターを変更するだけで他の多くのものが壊れるのではないかと疑っています。
承知いたしました。しかし、対処すべき問題です。他のすべてのBBソリューションでは、ユーザー名にその文字を含めることができ、ゲーミングコミュニティでは一般的です。このような制限がないように、ユーザー名とユーザーIDは別個のエンティティとして保持する必要があります。当方には約95,000人のメンバーがおり、そのうち1,200人にユーザー名の変更を依頼するのは非常に面倒な作業になります。いずれにせよ、ご協力ありがとうございました!
何十回、いや、100回以上のインポートを行ってきました。ここでインポートについて尋ねている人には細心の注意を払っています。これについて誰かが不満を言ったのを覚えているのは初めてです。
全員に、ユーザー名とメールアドレスの両方を試すように伝えることができます(多くの場合、どちらも知らないでしょう)。他のユーザー名が変更されたものもあると考えるのが妥当です。
これにより、変更されたすべてのユーザー名を取得できます。
UserCustomField.where(name: 'import_username').pluck(:value)
いくつかのトピックを見つけました。
https://meta.discourse.org/t/username-restrictions/126664
感嘆符だけでなく、もっと多くのものになるでしょう。他の場所ではどこでもそれらの文字を使用できるので、奇妙な制限のように思えます。
とにかく、ご協力ありがとうございました。
名前とユーザー名は同じではないという点に注意する価値があります。ユーザー名は URL パスで使用されます。たとえば、次のようになります。
https://meta.discourse.org/u/pfaffman/summary
感嘆符は URL では有効な文字ではありませんが、? や & のような文字は URL 構造で特別な目的を持っているため、ユーザー名の一部にすることもできません。これは Discourse に固有のことではなく、ユーザー名を URL 構造で使用するシステムはすべてこれを尊重する必要があります。
ユーザー名は感嘆符を含むことはできませんが、名前は感嘆符を含むことができ、UI で優先順位を付けることができます。
よくわかります、@Stephen、明確にしてくれてありがとう。
インポートスクリプトを変更して、次のようなことを行えばよいと思います。
username_original = username
username = @htmlentities.decode(user["username"]).strip
{
id: user["userid"],
name: username_original,
username: username,
password: password,
[...]
そして、Discourseの設定で、ユーザー名よりも「name」が優先されるように有効にします。
これに加えて、ユーザー名は「@メンション」で使用されることを意図しており、ユーザー名は簡単で入力しやすいものであることが期待されます。そのため、デフォルトではASCII文字のみを許可しています(ただし、unicode_usernames設定でUnicodeに拡張することは可能ですが、句読点は引き続き許可されません)。
この移行スクリプトは、バルク移行ではないスクリプトの基本クラスを使用していることに注意してください。これは、リンクしたメソッドによって生成された各ユーザーレコードに対して次のように行います。
これは、ユーザー名から無効な文字をすべて削除します。
コードには、ユーザー名に関して特定のことを想定している場所がたくさんあります(「@メンション」の解析、ユーザー名の変更など)。これが、これらの制限を強制する理由です。
Stephenが言うように、ユーザー名はユーザーの個性を表現する場所ではありません。名前とフレアフィールドがその役割を果たします ![]()
それでも、このように管理するのが難しいエッジケースがまだいくつかあります。
名前は一意ではないため、レイアウトで名前に優先順位を付けた場合、ゲームをしたり一日中荒らしたりする未熟なティーンエイジャーでいっぱいのメッセージボードでどうなるか想像できるでしょう ![]()
優先度の低い問題だと言っても構いませんが、それでも明らかに検討と作業が必要なことであり、他の多くのBBソフトウェアのように強力な制限なしに一意の名前を選択できることに対する「機能」やアドバンテージを与えるものではありません。
ユーザーがpfaffman!の場合、URLは通常次のようになります。
https://meta.discourse.org/u/pfaffman!/summary
少なくとも、私がこれまでに扱った他のCMSはすべてこのように機能していました。
おお、クール!先行技術ですね。![]()
使用したオープンソースCMSプロジェクトをいくつか教えていただけますか?それらを見て、パーマリンクとユーザー参照をどのように処理しているかを確認し、彼らの努力から学びましょう。![]()
しかし…コンテンツ管理システムとコミュニティフォーラムは全く同じカテゴリなのでしょうか?![]()
「vb3」はvBulletinのことですか?
はい。
また、特殊文字のエンコードに関する言及はCMSに固有のものではなく、標準的なエンコードです。Percent-encoding - Glossary | MDN
しかし、その場合、@Crius のように人々をメンションするにはどうすればよいでしょうか?!
![]()
しかし、その場合、@Crius のように人々をメンションするにはどうすればよいでしょうか?!
ユーザー名が maiki! の人をメンションするには、@maiki! と入力するのでしょうか?
vBulletin ではどのように機能しますか?
vBulletin 3にはその機能がなく、vBulletin 5は…モダンな機能の点で明らかに時代遅れになったソフトウェアなので、その機能があるかどうかさえ分かりません。
Discourseで誰かをpingすると、オートサジェストが表示されます。ニックネーム全体を入力する必要はありません。
編集:結局、提案がユーザー名をデコードして提案する、または入力(部分的に入力しているユーザー)をエンコードして適切にユーザー名を検索できるようにする必要があるということです。
どれだけの作業と労力がかかるかについては議論できますが、「可能かどうか」については議論できません。
いずれにせよ、メディアの伝え方が悪いのか、最近の返信がすべて「敵対的」に感じられるのかは分かりません。人々は助けを求め、改善のための提案をするためにmeta.discourseに来ます。同意しない場合は、スレッドを無視して先に進むことができます。
また、追加するのを忘れました。DiscourseでPR(プルリクエスト)が公開されていれば、フォークで作業してPRを開くことができます。私はRuby開発者ではありませんが、ソフトウェアエンジニア/プラットフォームエンジニアとして数年の経験があります。喜んで貢献させていただきます ![]()
念のため追記しておきますが、上記で述べられているようにURLで「!」が禁止されているわけではありません。どこからそのような考えが出てきたのかは不明です。
しかし、Rubyでは関数に「?」や「!」が使われているようですが、これは(少なくとも私の20年以上のソフトウェアエンジニアリング経験からすると)奇妙なことだと思いますが、各言語にはそれぞれの流儀があります ![]()
これが「!」が禁止されている理由を示唆しているのかもしれません。これが解決できなかった特定の Иssue なのか、それともユーザー名とRubyがエッジケースで暴走するのを避けるために過剰に禁止されただけなのか、Discourseのソースコードをさらに深く調べる必要があります。
この古いスレッドを復活させて申し訳ありませんが、私も同じ問題を抱えています。|、[、] もユーザー名として不正な文字であり、何らかの方法で有効にすることはできないのではないかと推測しています。
古いゲームフォーラムを phpBB3 から Discourse に移行しようとしており、多くのユーザー名が Clan|Nickname や [Clan]Nickname のようになっています。
それらを探して、アンダースコア(_)またはハイフン(-)のような合法的な文字に置き換えるようにスクリプトを編集します。それらを削除するだけだと思います。ユーザー名候補のコードを確認できます。
最初のフォーラムをDiscourseに移行したとき、空のスペースから始まる不正な文字やその他の文字が_に置き換えられていることに気づきました。しかし、このフォーラムでは、最も一般的な不正な文字は空のスペースであり、それほど頻繁ではなかったので、問題にはなりませんでした。いずれにせよ、これは問題を引き起こすものではありません。名前フィールドに古いユーザー名を入力するかもしれません。他の問題、つまりインポートコンテナがビルドされない問題を解決したら、わかるでしょう…