Le preferenze email sono ancora visibili quando le email sono disabilitate

Ci sono alcune stranezze dal punto di vista dell’esperienza utente (UX) quando tutte le email sono disabilitate.
Le classificherei come bug.

  1. Tutti, inclusi gli utenti non staff, ricevono un messaggio sul fatto che il sistema non invia email. Sembra non ci sia modo di disattivare questa notifica. Non riesco a immaginare un motivo per cui gli utenti dovrebbero essere avvisati di ciò continuamente. Forse potrebbe essere accettabile mostrarlo solo allo staff o agli amministratori. Potrebbe essere stata una decisione consapevole in passato, ma non sono riuscito a trovare una discussione a riguardo.

Da 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"), // "Tutte le email in uscita sono state disabilitate globalmente da un amministratore. Non verranno inviate notifiche email di alcun tipo."
            id: "alert-emails-disabled",
          })
        );
      }

Penso che la condizione dovrebbe essere modificata in:

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

O almeno prevedere una impostazione per decidere chi riceve questa notifica (es: tutti/staff/admin/nessuno).

Inoltre, in FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub, in questa correzione, l’idea sembrava che il messaggio sulle email disabilitate dovesse essere mostrato solo allo staff, ma i test https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 verificano che tutti vedano la notifica.

Per una nota minore: trovo un po’ confusi tutti i test("when …. Ad esempio: “When enabled” verifica effettivamente disable_emails = "yes", il che, sebbene abbia senso per testare un cambiamento nelle impostazioni, in realtà testa che le email siano disabilitate, e viceversa “When disabled” testa che le email siano abilitate. Immagino si riferiscano più ai valori impostati che all’effetto finale, che probabilmente è la convenzione del progetto. In tal caso va benissimo. Solo un po’ strano per un nuovo arrivato.

  1. Sia che disable_emails sia impostato su “yes” che su “non-staff”, la sezione email appare comunque nella pagina delle preferenze utente per tutti. È strano perché all’interno del template ci sono controlli che disabilitano parti di essa quando i digest o le mailing list sono disabilitati.

Come potete vedere, non c’è alcun controllo 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>

Nella mia versione ho qualcosa del genere: (non so se è così che lo fareste voi, comunque) sono aperto a suggerimenti :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}}

dove show-emails-preferences è definito in un helper come segue:

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

Fatemelo sapere se queste sembrano migliorie utili, e posso preparare una PR.

Saluti

1 Mi Piace

Ho dimenticato di menzionare che avvolgo anche l’intero template
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs#L1
con

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

Discourse non può funzionare senza email.

Non puoi registrare un account, reimpostare la password, ricevere notifiche o utilizzare l’accesso tramite email. È un elemento essenziale. Quel banner è lì perché sta dicendo a tutti che il sito è rotto.

Non è un bug il fatto che non si possa disabilitare quell’avviso. È una funzionalità.

E se si utilizza solo l’SSO per l’autenticazione?
È una delle funzionalità di Discourse che permette di disabilitare l’accesso tramite email e di utilizzare l’SSO come unico sistema di autenticazione.
Puoi impostare sia “abilita accessi locali” che “abilita accessi locali via email” su false.
Inoltre, imposta “disabilita email” su “sì”.
Forse non funzionerebbe come prodotto autonomo, ma può farlo come parte di un sistema più ampio. Inoltre, se fosse vero che “Discourse non può funzionare senza email”, perché esisterebbero tutte queste impostazioni per interrompere il sistema?

“Quel banner è presente perché sta comunicando a tutti che il sito è rotto.”
Di nuovo, non credo che “tutti” debbano saperlo.
Almeno a mio avviso, solo il personale o gli amministratori devono esserne a conoscenza, non gli utenti finali del prodotto.

A proposito, è così che lo utilizziamo noi. Abbiamo un sito web principale dove si effettuano login, logout, registrazione, reset della password, ecc.
L’unico modo per accedere a Discourse è tramite SSO. In questo modo possiamo assegnare facilmente le autorizzazioni tramite i gruppi.

1 Mi Piace

@pfaffman a parte, cosa ne pensi di quel metodo?

È il livello/modo giusto (parlando dello stile Discourse) per fare le cose?

Non ho avuto molto tempo per esplorare a fondo il codice e individuare uno stile di codifica “Discourse” rigoroso.

Sì, potresti avere ragione. Ho appena incontrato un’istanza di Discourse che ha l’SSO abilitato, ma mostra comunque il banner “Email disabilitata” e non sono nemmeno loggato.

Con l’SSO non dovranno preoccuparsi del ripristino delle password, quindi a parte le notifiche via email che le persone non riceveranno, non sono sicuro del motivo per cui DOBBIAMO mostrare questo banner a tutti se l’SSO è abilitato.

Forse potremmo almeno aggiornarlo in modo da non mostrare il banner se l’SSO è abilitato e non sei loggato?

2 Mi Piace

@blake Personalmente penso che sia una notifica che dovrebbe essere mostrata solo allo Staff. Un utente normale non potrà farci nulla, al massimo aprire un argomento per chiedere perché vede quel messaggio e cosa significhi. Sta semplicemente venendo mostrata alle persone sbagliate, tutto qui :wink:

A proposito: l’ho nascosta sul mio sito tramite CSS, ma capisco che ci sia un caso in cui il messaggio dovrebbe essere visibile, quindi quella non sarebbe la soluzione corretta nel codice della distribuzione.