Firmas de Discourse

Ok, para aquellos que realmente quieran que sus firmas funcionen mejor para su grupo (especialmente si quieren usar las opciones para que una firma sea parte de una mejora/suscripción pagada), aquí hay código (y el razonamiento detrás de él) que creo que lo hace mucho mejor y puede ayudarlo a impulsar más mejoras. Me tomó muchos intentos, pero está funcionando. Preste atención a dónde necesita reemplazar las partes “XXXXX”.

Quería lograr las siguientes 2 cosas:
A) Quería deshabilitar la capacidad de NO ver las firmas. Esto significa que aquellos usuarios que sí mejoran saben que su firma será vista por todos.

B) Quería que SOLO un cierto grupo tuviera la capacidad de crear una firma.

  1. Vaya a Admin > Apariencia > Temas y componentes > Componentes > Instalar > Crear nuevo

  2. Agregue este código a la pestaña <head>:

<script>
// Esperar a que se cargue primero la estructura básica de la página
document.addEventListener("DOMContentLoaded", function() {
    
    // Configurar el observador
    const observer = new MutationObserver(function(mutations) {
        // Encontrar todas las etiquetas de control en la página
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // Buscar la etiqueta específica de Firmas
            if (label.textContent.trim() === 'Enable Signatures') {
                // Encontrar el contenedor principal que contiene tanto la etiqueta como la casilla de verificación y ocultarlo
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // AHORA empezar a observar el body, ya que sabemos que existe
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. Agregue este código a la pestaña css (reemplace XXXXX con el nombre de su grupo):

/* Ocultar la sección de firma para todos */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Solo mostrar si la clase 'user-is-XXXXX' está presente en el body */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: block !important;
}
  1. Agregue este código a la etiqueta <head> debajo del primer bloque de arriba (reemplace XXXXX con el nombre de su grupo):
<script>
(function() {
  const checkAccess = () => {
    // Discourse almacena los grupos del usuario actual en este objeto global
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // Comprobar si algún nombre de grupo coincide con "XXXXX"
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // Ejecutar inmediatamente
  checkAccess();

  // Ejecutar cada vez que el usuario navega entre páginas
  document.addEventListener('discourse-ready', checkAccess);
  
  // Copia de seguridad: Ejecutar de nuevo después de 1 segundo para capturar cargas lentas
  setTimeout(checkAccess, 1000);
})();
</script>
  1. Agregue este código a la pestaña css debajo del primer bloque de arriba (reemplace XXXXX con el nombre de su grupo):
/* Ocultar la sección de firma para todos */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Solo mostrar si la clase 'user-is-XXXXX' está presente en el body */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: block !important;
}

Hecho.

No soy desarrollador. Todo lo que sé es que esto está funcionando al 100% en mi sitio.

Además, para el autor del complemento: ME ENCANTARÍA la capacidad de limitar el recuento de caracteres de la firma. Intenté muchas cosas pero nada funcionó.

1 me gusta