Assinaturas do Discourse

Ok, para aqueles que realmente querem fazer suas assinaturas funcionarem melhor para o seu grupo (especialmente se você quiser usar as opções para ter uma assinatura como parte de um upgrade/assinatura paga), aqui está o código (e o raciocínio por trás dele) que eu acho que o torna muito melhor e pode ajudar você a impulsionar mais upgrades. Levei muitas tentativas, mas está funcionando. Preste atenção onde você precisa substituir as partes “XXXXX”.

Eu queria realizar as 2 coisas a seguir:
A) Eu queria desabilitar a capacidade de NÃO visualizar assinaturas. Isso significa que os usuários que fizerem o upgrade sabem que sua assinatura será vista por todos.

B) Eu queria que SOMENTE um determinado grupo tivesse a capacidade de criar uma assinatura.

  1. Vá em Admin > Aparência > Temas e componentes > Componentes > Instalar > Criar novo

  2. Adicione este código na aba <head>:

<script>
// Aguarda a estrutura básica da página carregar primeiro
document.addEventListener("DOMContentLoaded", function() {
    
    // Configura o observador
    const observer = new MutationObserver(function(mutations) {
        // Encontra todos os rótulos de controle na página
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // Procura pelo rótulo específico de Assinaturas
            if (label.textContent.trim() === 'Enable Signatures') {
                // Encontra o contêiner principal que contém o rótulo e a caixa de seleção e o oculta
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // AGORA começa a observar o body, já que sabemos que ele existe
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. Adicione este código na aba css (substitua XXXXX pelo nome do seu grupo):

/* Oculta a seção de assinatura 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;
}

/* Só mostra se a classe 'user-is-XXXXX' estiver presente no 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. Adicione este código na tag <head> abaixo do primeiro bloco acima (substitua XXXXX pelo nome do seu grupo):
<script>
(function() {
  const checkAccess = () => {
    // O Discourse armazena os grupos do usuário atual neste objeto global
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // Verifica se algum nome de grupo corresponde a "XXXXX"
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // Executa imediatamente
  checkAccess();

  // Executa sempre que o usuário navega entre as páginas
  document.addEventListener('discourse-ready', checkAccess);
  
  // Backup: Executa novamente após 1 segundo para capturar carregamentos lentos
  setTimeout(checkAccess, 1000);
})();
</script>
  1. Adicione este código na aba css abaixo do primeiro bloco acima (substitua XXXXX pelo nome do seu grupo):
/* Oculta a seção de assinatura 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;
}

/* Só mostra se a classe 'user-is-XXXXX' estiver presente no 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;
}

Pronto.

Eu não sou um desenvolvedor. Tudo o que sei é que isso está funcionando 100% no meu site.

Além disso, para o autor do plugin – adoraria a capacidade de limitar a contagem de caracteres da assinatura. Tentei tantas coisas, mas nada funcionou.

1 curtida