# Настройки электронной почты по-прежнему отображаются, когда электронная почта отключена

**URL:** <https://meta.discourse.org/t/email-preferences-still-show-when-emails-are-disabled/182364>\
**Category:** Bug\
**Created:** [07.Март.2021 02:17:32 UTC](https://meta.discourse.org/t/email-preferences-still-show-when-emails-are-disabled/182364 "2021-03-07T02:17:32Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![dscat](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dscat/32/203656_2.png) [@dscat](https://meta.discourse.org/u/dscat)\
**Post date:** [07.Март.2021 02:17:33 UTC](https://meta.discourse.org/t/email-preferences-still-show-when-emails-are-disabled/182364/1 "2021-03-07T02:17:33Z")

</div>

С точки зрения UX возникает несколько странных ситуаций, когда отправка всех писем отключена.  
Я бы классифицировал их как баги.

1. Уведомление о том, что система не отправляет письма, получают все пользователи, включая тех, кто не является сотрудниками. Похоже, нет способа отключить это уведомление. Я не могу придумать причину, по которой обычные пользователи должны постоянно получать такие оповещения. Возможно, было бы нормально показывать его только сотрудникам или администраторам. Возможно, это было осознанным решением, принятым ранее, но я не смог найти обсуждения по этому вопросу.

из [https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/components/global-notice.js#L99](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/components/global-notice.js#L99)

```plaintext
   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",
          })
        );
      }

```

Я считаю, что условие должно быть изменено на:

```plaintext
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/commit/acc121fd27e53fb70c888b58939027fbefba9c6f) идея заключалась в том, что уведомление об отключённых письмах должно показываться только сотрудникам, но тесты по ссылке [https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24](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` проверяет включение писем. Думаю, они относятся скорее к устанавливаемым значениям, чем к конечному эффекту, что, вероятно, является принятой практикой в проекте. В таком случае всё в порядке, но для новичка это кажется странным.

1. Независимо от того, установлено ли значение `disable_emails` в “yes” или “non-staff”, раздел электронной почты всё равно отображается на странице настроек пользователя для всех. Это странно, поскольку внутри шаблона есть проверки, отключающие отдельные части при отключении дайджестов или рассылки.

Как видите, здесь нет проверки: [https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences.hbs#L18](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences.hbs#L18)

```plaintext
    <li class="nav-emails">
      {{#link-to "preferences.emails"}}
        {{i18n "user.preferences_nav.emails"}}
      {{/link-to}}
    </li>

```

В моей версии я сделал что-то вроде этого (не знаю, так ли вы делаете, кстати). Открыт к предложениям 😉

```plaintext
      {{#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` определён в хелпере следующим образом:

```plaintext
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.

С уважением,

---

_[View the full topic](https://meta.discourse.org/t/email-preferences-still-show-when-emails-are-disabled/182364)._
