Preferências de e-mail ainda aparecem quando os e-mails estão desativados

Existem algumas coisas estranhas que acontecem do ponto de vista da UX quando todos os e-mails estão desabilitados.
Eu classificaria isso como bugs.

  1. Todos, incluindo pessoas que não são da equipe, recebem uma mensagem sobre o sistema não enviar e-mails. Parece não haver como silenciar essa notificação. Não consigo imaginar um motivo pelo qual os usuários seriam alertados sobre isso o tempo todo. Talvez fosse aceitável mostrar isso apenas para a equipe ou administradores. Pode ter sido uma decisão consciente em algum momento. Apenas não consegui encontrar uma discussão sobre isso.

a partir de https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/components/global-notice.js#L99

   if (
        this.siteSettings.disable_emails === "yes" ||
        this.siteSettings.disable_emails === "non-staff"
      ) {
        notices.push(
          Notice.create({
            text: I18n.t("emails_are_disabled"), // "Todos os e-mails de saída foram desabilitados globalmente por um administrador. Nenhuma notificação por e-mail de qualquer tipo será enviada."
            id: "alert-emails-disabled",
          })
        );
      }

Acho que a condição deve ser alterada para

if (
        this.get("currentUser.staff") && // ou currentUser.admin
        (this.siteSettings.disable_emails === "yes" ||
        this.siteSettings.disable_emails === "non-staff") 
      ) {
          …

Ou, pelo menos, ter uma configuração para decidir quem recebe essa notificação. (ex: todos/equipe/admin/ninguém)

também FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub nessa correção, a ideia parece ser que os e-mails desabilitados deveriam ser mostrados apenas para a equipe, mas os testes https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 verificam que todos veem a notificação

em uma observação menor: acho todos os test("quando … um pouco confusos. Por exemplo: “Quando habilitado” realmente testa disable_emails = "yes", o que, embora eu entenda os testes para uma mudança nas configurações, na verdade testa se os e-mails estão desabilitados, e vice-versa, “Quando desabilitado” testa se os e-mails estão habilitados. Acho que eles se referem mais aos valores sendo definidos do que ao efeito final, o que provavelmente é a convenção no projeto. Nesse caso, está totalmente certo. Apenas estranho para um recém-chegado.

  1. Se disable_emails estiver definido como “yes” ou “non-staff”, a seção de e-mails ainda aparece na página de preferências do usuário para todos. O que é estranho, porque dentro do template existem verificações que desabilitam partes dele quando resumos ou listas de e-mail estão desabilitados.

Como você pode ver, não há verificação 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>

Na minha versão, tenho algo assim: (não sei se é assim que vocês fariam, btw) Estou aberto a sugestões :wink:

      {{#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}}

onde show-emails-preferences é definido em um helper da seguinte forma:

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;
});

Me avise se alguma dessas ideias parece melhorias válidas, e posso criar um PR

Abraços

1 curtida

Esqueci de mencionar que também envolvo todo o template
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs#L1
com

  {{#if (show-emails-preferences model siteSettings.disable_emails)}}
    {{#unless siteSettings.disable_mailing_list_mode}}
…

O Discourse não funciona sem e-mail.

Você não pode registrar uma conta, redefinir sua senha, receber notificações ou usar logins por e-mail. É um elemento essencial. Esse banner está lá porque está dizendo a todos que o site está com problemas.

Não é um bug que você não possa desativar esse aviso. É um recurso.

E quanto ao uso de apenas SSO para autenticação?
É uma das funcionalidades do Discourse que permite desabilitar logins por e-mail e permitir o SSO como único sistema de autenticação.
Você pode definir tanto “habilitar logins locais” e “habilitar logins locais via e-mail” como falso.
Além disso, defina “desabilitar e-mails” como “sim”.
Talvez não funcione como um produto autônomo, mas pode funcionar como parte de um sistema maior. Além disso, se fosse verdade que “o Discourse não funciona sem e-mail”, por que haveria todas essas configurações para quebrar o sistema?

“Esse banner está lá porque está informando a todos que o site está quebrado.”
Novamente, não acho que “todos” precisem saber.
Pelo menos na minha opinião, apenas a equipe ou os administradores precisam saber. Não os consumidores do produto.

Aliás, é assim que estamos usando. Temos um site principal onde você faz login, logout, registro, redefinição de senha, etc.
A única maneira de acessar o Discourse é via SSO. Dessa forma, podemos provisionar permissões facilmente por meio de grupos.

1 curtida

@pfaffman, falando de outro assunto, o que você achou desse método?

É esse o nível/caminho certo (falando sobre a maneira Discourse) de fazer as coisas?

Não tenho tido muito tempo para explorar o código profundamente e extrair uma “maneira Discourse” estrita de codificar as coisas.

Sim, pode ser que você esteja no caminho certo. Acabei de encontrar uma instância do Discourse que tem o SSO ativado, mas também exibe o banner “E-mail desabilitado”, mesmo sem eu estar logado.

Com o SSO, eles não precisam se preocupar com redefinição de senha, então, além das notificações por e-mail que as pessoas não receberão, não vejo motivo para sermos obrigados a mostrar esse banner para todos se o SSO estiver ativado.

Talvez possamos, pelo menos, atualizar o sistema para não exibir o banner se o SSO estiver ativado e você não estiver logado?

2 curtidas

@blake Pessoalmente, acho que é uma notificação que deveria ser exibida apenas para a Equipe.
Um usuário comum não poderá fazer nada a respeito, exceto talvez abrir um tópico perguntando por que está vendo a mensagem e o que ela significa.
Ela está apenas sendo exibida para as pessoas erradas, é só isso :wink:

By the way: eu a ocultei no meu site via CSS, mas consigo ver um caso em que a mensagem deveria aparecer, então essa não seria a solução correta no código da distribuição.