Les préférences d'e-mail s'affichent toujours lorsque les e-mails sont désactivés

Il y a quelques choses étranges qui se produisent d’un point de vue UX lorsque tous les e-mails sont désactivés.
Je qualifierais ces problèmes de bugs.

  1. Tout le monde, y compris les personnes non membres du personnel, reçoit un message indiquant que le système n’envoie pas d’e-mails. Il semble qu’il n’y ait aucun moyen de désactiver cette notification. Je ne vois aucune raison pour laquelle les utilisateurs seraient alertés de cela en permanence. Peut-être que ce serait acceptable de l’afficher uniquement au personnel ou aux administrateurs. Cela a peut-être été une décision consciente à un moment donné. Je n’ai simplement pas pu trouver de discussion à ce sujet.

à 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"), // "Tous les e-mails sortants ont été désactivés globalement par un administrateur. Aucune notification par e-mail ne sera envoyée."
            id: "alert-emails-disabled",
          })
        );
      }

Je pense que la condition de garde devrait être modifiée en

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

Ou tout au moins prévoir un paramètre pour décider qui reçoit cette notification. (par exemple : tout le monde / personnel / administrateur / personne)

aussi FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub dans cette correction, l’idée semble être que les e-mails désactivés devraient être affichés uniquement au personnel, mais les tests https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 vérifient que tout le monde voit la notification

sur une note mineure : je trouve tous les test("when … un peu confus. par exemple : “When enabled” teste réellement disable_emails = "yes", ce qui, bien que je comprenne qu’il s’agisse de tests pour un changement dans les paramètres, teste en réalité les e-mails désactivés, et inversement When disabled teste les e-mails activés. Je suppose qu’ils se réfèrent davantage aux valeurs définies qu’à l’effet final, ce qui est probablement la convention du projet. Dans ce cas, c’est tout à fait acceptable. Juste étrange du point de vue d’un nouvel arrivant.

  1. que disable_emails soit défini sur “yes” ou “non-staff”, la section e-mails apparaît toujours dans la page des préférences de l’utilisateur pour tout le monde. Ce qui est étrange car dans le modèle, il y a des vérifications qui désactivent certaines parties lorsque les résumés ou les listes de diffusion sont désactivés.

Comme vous pouvez le voir, il n’y a pas de vérification 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>

Dans ma version, j’ai quelque chose comme ça : (je ne sais pas si c’est ainsi que vous feriez, d’ailleurs) Je suis ouvert aux suggestions :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}}

show-emails-preferences est défini dans un helper comme suit :

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

Faites-moi savoir si l’une de ces propositions semble être une amélioration valable, et je peux préparer une PR

Salutations

1 « J'aime »

J’ai oublié de mentionner que j’encapsule également tout le modèle
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/templates/preferences/emails.hbs#L1
avec

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

Discourse ne peut pas fonctionner sans e-mail.

Vous ne pouvez pas créer de compte, réinitialiser votre mot de passe, recevoir des notifications ou utiliser la connexion par e-mail. C’est un élément essentiel. Cette bannière est là parce qu’elle indique à tous que le site est en panne.

Ce n’est pas un bug que vous ne puissiez pas désactiver cet avertissement. C’est une fonctionnalité.

Que se passe-t-il lorsque vous utilisez uniquement l’authentification SSO ?
C’est l’une des fonctionnalités de Discourse : interconnexions de connexion par e-mail et autoriser le SSO comme seul système d’authentification.
Vous pouvez définir à la fois « activer les connexions locales » et « activer les connexions locales via e-mail » sur faux.
Ainsi que « désactiver les e-mails » sur « oui ».
Peut-être que cela ne fonctionnerait pas en tant que produit autonome, mais cela peut le faire dans le cadre d’un système plus vaste. De plus, si cela était vrai, « Discourse ne peut pas fonctionner sans e-mail », pourquoi auriez-vous tous ces paramètres pour casser le système ?

« Cette bannière est là parce qu’elle informe tout le monde que le site est cassé. »
Encore une fois, je ne pense pas que « tout le monde » ait besoin de le savoir.
Du moins à mon avis, seul le personnel ou l’administrateur doit le savoir. Pas les consommateurs du produit.

D’ailleurs, c’est ainsi que nous l’utilisons. Nous avons un site web principal où vous effectuez votre connexion/déconnexion/inscription/réinitialisation du mot de passe, etc.
Le seul moyen d’accéder à Discourse est via SSO. De cette façon, nous pouvons facilement attribuer des autorisations via des groupes.

1 « J'aime »

@pfaffman, sur une note à part, qu’avez-vous pensé de cette méthode ?

Est-ce le bon niveau/la bonne approche (en parlant de la façon Discourse) de faire les choses ?

Je n’ai pas eu beaucoup de temps pour explorer le code en profondeur et dégager une « façon Discourse » stricte de coder les choses.

Oui, vous avez peut-être raison. Je viens de rencontrer une instance Discourse qui a le SSO activé, mais qui affiche également la bannière « L’e-mail est désactivé », et je ne suis même pas connecté.

Avec le SSO, ils n’auront pas à s’inquiéter des réinitialisations de mot de passe. Donc, en dehors des notifications par e-mail que les gens ne recevront pas, je ne vois pas pourquoi nous DEVONS afficher cette bannière à tout le monde si le SSO est activé.

Peut-être devrions-nous au moins mettre à jour le système pour qu’il n’affiche pas la bannière si le SSO est activé et que vous n’êtes pas connecté ?

2 « J'aime »

@blake Personnellement, je pense que c’est une notification qui devrait être affichée uniquement au personnel.
Un utilisateur ordinaire ne pourra rien y faire, si ce n’est peut-être ouvrir un sujet pour demander pourquoi il voit ce message et ce qu’il signifie.
C’est simplement affiché aux mauvaises personnes, c’est tout :wink:

Au fait : je l’ai masqué sur mon site via CSS, mais je vois un cas où le message devrait s’afficher, donc ce ne serait pas la bonne solution dans le code de la distribution.