すべてのメールが無効化されている場合、UX の観点からいくつか奇妙なことが起こります。これらはバグとみなすべきです。
- スタッフ以外のユーザーを含む全員が「システムからメールが送信されていない」というメッセージを受け取ります。この通知を無効にする方法はないようです。なぜユーザーが常にこのアラートを受け取る必要があるのか、理由が思い浮かびません。スタッフや管理者には表示しても問題ないかもしれません。ある時点で意識的な決定だったのかもしれませんが、その議論は見つけられませんでした。
if (
this.siteSettings.disable_emails === "yes" ||
this.siteSettings.disable_emails === "non-staff"
) {
notices.push(
Notice.create({
text: I18n.t("emails_are_disabled"), // "管理者によってすべての送信メールがグローバルに無効化されました。どのような種類のメール通知も送信されません。"
id: "alert-emails-disabled",
})
);
}
ガード条件を以下のように変更すべきだと思います。
if (
this.get("currentUser.staff") && // または currentUser.admin
(this.siteSettings.disable_emails === "yes" ||
this.siteSettings.disable_emails === "non-staff")
) {
…
あるいは、誰がこの通知を受け取るかを決める設定を少なくとも用意すべきです(例:全員/スタッフ/管理者/誰も)。
また、FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub のこの修正では、メール無効化の通知はスタッフのみに表示されるべきという意図が見受けられますが、テスト https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 では、全員が通知を表示することが検証されています。
minor note: すべての test("when … という表記が少し混乱を招きます。例えば、「有効化時」は実際には disable_emails = "yes" をテストしており、設定の変更に対するテストであることは理解できますが、実際には「メール無効化」をテストしており、逆も同様です(「無効化時」はメール有効化をテスト)。おそらく、これは最終的な効果ではなく、設定された値を指しているのでしょう。これはプロジェクトの慣習かもしれません。その場合、全く問題ありません。ただ、新規参入者にとっては少し奇妙に感じます。
disable_emailsが “yes” または “non-staff” に設定されていても、ユーザー設定ページにはメールセクションが全員に表示されます。これは奇妙です。テンプレート内では、ダイジェストやメーリングリストが無効化された場合にその一部を無効化するチェックがあるからです。
ご覧の通り、チェックはありません https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences.hbs#L18
<li class="nav-emails">
{{#link-to "preferences.emails"}}
{{i18n "user.preferences_nav.emails"}}
{{/link-to}}
</li>
私のバージョンでは以下のような実装にしています(これが皆さんが採用する方法かどうかはわかりませんが)。ご提案があれば歓迎します ![]()
{{#if (show-emails-preferences model siteSettings.disable_emails)}}
<li class="nav-emails">
{{#link-to "preferences.emails"}}
{{i18n "user.preferences_nav.emails"}}
{{/link-to}}
</li>
{{/if}}
ここで show-emails-preferences は、ヘルパーとして以下のように定義されています。
registerUnbound("show-emails-preferences", (model, disable_emails, args) => {
let result = true;
if(disable_emails === 'yes'){
result = false;
}else if(disable_emails === 'non-staff'){
result = model.staff ? true : false;
}else{
result = true;
}
return result;
});
これらの改善案が価値があると思われるものがあれば、PR を作成します。
よろしくお願いいたします。