Las preferencias de correo electrónico todavía se muestran cuando los correos electrónicos están deshabilitados

Hay un par de cosas extrañas que ocurren desde el punto de vista de la UX cuando todos los correos electrónicos están deshabilitados.
Las calificaría como errores.

  1. Todos, incluidas las personas que no son personal, reciben un mensaje sobre que el sistema no está enviando correos electrónicos. Parece que no hay forma de silenciar esta notificación. No puedo imaginar una razón por la que los usuarios deban ser alertados sobre esto todo el tiempo. Quizás estaría bien mostrarlo solo al personal o a los administradores. Puede que haya sido una decisión consciente en algún momento, pero simplemente no pude encontrar una discusión al respecto.

Desde 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 los correos electrónicos salientes han sido deshabilitados globalmente por un administrador. No se enviarán notificaciones por correo electrónico de ningún tipo."
            id: "alert-emails-disabled",
          })
        );
      }

Creo que la condición debería cambiarse a

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

O al menos tener una configuración para decidir quién recibe esta notificación (por ejemplo: todos/personal/admin/nadie).

Además, en FIX: Show 'emails disabled' to staff users when disabled for non-staf… · discourse/discourse@acc121f · GitHub, en esta corrección, parece que la idea era que el aviso de correos deshabilitados solo debería mostrarse al personal, pero las pruebas en https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/tests/acceptance/email-notice-test.js#L24 verifican que todos vean el aviso.

Como nota menor: encuentro que todos los test("cuando … son un poco confusos. Por ejemplo: “Cuando está habilitado” realmente prueba disable_emails = "yes", lo cual, aunque entiendo que se prueban cambios en la configuración, en realidad está probando que los correos estén deshabilitados, y viceversa: “Cuando está deshabilitado” prueba que los correos estén habilitados. Supongo que se refieren más a los valores establecidos que al efecto final, lo cual probablemente sea la convención en el proyecto. En ese caso, está perfectamente bien. Solo es extraño para alguien nuevo.

  1. Tanto si disable_emails está establecido en “yes” como en “non-staff”, la sección de correos electrónicos sigue apareciendo en la página de preferencias del usuario para todos. Esto es extraño porque dentro de la plantilla hay comprobaciones que deshabilitan partes de ella cuando los resúmenes o las listas de correo están deshabilitados.

Como puedes ver, no hay ninguna comprobación en 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>

En mi versión tengo algo así: (no sé si así es como lo harían ustedes, por cierto). Estoy abierto a sugerencias :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}}

Donde show-emails-preferences está definido en un helper de la siguiente manera:

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

Háganme saber si alguna de estas mejoras parece valiosa, y puedo hacer una PR.

Saludos

1 me gusta

Olvidé mencionar que también envolvo toda la plantilla
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 no puede funcionar sin correo electrónico.

No puedes registrar una cuenta, restablecer tu contraseña, recibir notificaciones ni usar inicio de sesión por correo electrónico. Es un elemento esencial. Ese banner está ahí porque le está diciendo a todos que el sitio está roto.

No es un error que no puedas desactivar esa advertencia. Es una característica.

¿Qué pasa cuando solo usas SSO para la autenticación?
Es una de las funciones de Discourse: permitir deshabilitar los inicios de sesión por correo electrónico y usar SSO como único sistema de autenticación.

Puedes establecer tanto “enable local logins” (habilitar inicios de sesión locales) como “enable local logins via email” (habilitar inicios de sesión locales mediante correo) en false (falso).

También puedes configurar “disable emails” (deshabilitar correos) en “yes” (sí).

Quizás no funcione como un producto independiente por sí solo, pero sí puede hacerlo como parte de un sistema más grande. Además, si fuera cierto que “Discourse no puede funcionar sin correo electrónico”, ¿por qué tendrías todas estas configuraciones para romper el sistema?

“Ese banner está ahí porque le está diciendo a todos que el sitio está roto.”
De nuevo, no creo que “todos” necesiten saberlo.
Al menos en mi opinión, solo el personal o los administradores deben saberlo. No los consumidores del producto.

Por cierto, así es como lo estamos usando. Tenemos un sitio web principal donde se realizan el inicio/cierre de sesión, el registro, la recuperación de contraseña, etc.
La única forma de acceder a Discourse es mediante SSO. De esta manera, podemos asignar permisos fácilmente a través de grupos.

1 me gusta

@pfaffman, por otro lado, ¿qué te pareció ese método?

¿Es ese el nivel o la forma correcta (hablando del “modo Discourse”) de hacer las cosas?

No he tenido mucho tiempo para explorar el código en profundidad y extraer un “modo Discourse” estricto de codificar.

Sí, puede que tengas razón. Acabo de encontrar una instancia de Discourse en la que SSO está habilitado, pero también muestra el banner de “El correo electrónico está deshabilitado” y ni siquiera he iniciado sesión.

Con SSO no tendrán que preocuparse por restablecimientos de contraseña, así que, aparte de las notificaciones por correo electrónico que la gente no recibirá, no sé por qué DEBEMOS mostrar este banner a todos si SSO está habilitado.

¿Quizás podríamos al menos actualizarlo para que no muestre el banner si SSO está habilitado y no has iniciado sesión?

2 Me gusta

@blake Personalmente creo que es una notificación que debería mostrarse solo al personal. Un usuario normal no podrá hacer nada al respecto, excepto quizás abrir un tema preguntando por qué ve el mensaje y qué significa. Simplemente se está mostrando a las personas equivocadas, eso es todo :wink:

Por cierto: lo he ocultado en mi sitio mediante CSS, pero puedo ver un caso en el que el mensaje debería mostrarse, por lo que esa no sería la solución correcta en el código de la distribución.