С точки зрения 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 подтверждают, что его видят все.
Кроме того, в мелочах: мне немного непонятны все тесты с заголовком test("when …. Например, тест When enabled фактически проверяет значение disable_emails = "yes". Хотя я понимаю, что тестируется изменение настроек, по сути проверяется отключение писем, и наоборот: When disabled проверяет включение писем. Думаю, они относятся скорее к устанавливаемым значениям, чем к конечному эффекту, что, вероятно, является принятой практикой в проекте. В таком случае всё в порядке, но для новичка это кажется странным.
- Независимо от того, установлено ли значение
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;
});
Дайте знать, если эти предложения кажутся вам полезными улучшениями, и я могу создать pull request.
С уважением,