Signatures Discourse

Suis-je fou ou n’y a-t-il aucune validation sur l’URL de l’image de signature de l’entrée utilisateur du tout ?
En gros, un utilisateur peut entrer n’importe quoi et cela sera poussé à d’autres utilisateurs ?

Aussi, pourquoi la taille de la base de données de l’URL de la signature est-elle définie sur 32 000 ?
Pourquoi quelqu’un aurait-il besoin de 32 000 caractères pour une URL vers une image ?

Effrayant :ghost:

J’ai modifié le CSS comme suit afin de coder en dur une hauteur et une largeur maximales ;

.signature-img {
  max-width: 600px;
  max-height: 100px;
  width: auto;
  height: auto;
  display: block;
  margin: 5px 0;
}

J’ai changé la taille maximale de l’URL de signature à 250 dans plugin.rb

  register_user_custom_field_type("signature_url", :string, max_length: 250)
  register_user_custom_field_type("signature_raw", :string, max_length: 250)

J’ai ajouté ceci en bas de “on(:user_updated) do |user|” dans plugin.rb (je n’utiliserai pas le mode avancé)

    # Valider l'URL si pas en mode avancé
    if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
      url = user.custom_fields["signature_url"]

      # Validation stricte : uniquement HTTPS, uniquement certains types de fichiers image
      unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
        Rails.logger.warn("[discourse-signatures] Rejeté signature_url invalide pour l'utilisateur #{user.id}: #{url.inspect}")
        user.custom_fields["signature_url"] = nil
        user.save
      end
    end

Si je fais quelque chose de mal ici (je n’ai jamais travaillé avec Discourse auparavant), veuillez corriger et me montrer la bonne façon de le faire.

1 « J'aime »

Parce que 250 n’est pas suffisant…

C’est tout l’intérêt d’une signature. C’est pareil pour un forum, les gens saisissent des choses et d’autres personnes les voient. Monde de fous, hein ?

5 « J'aime »

Lorsque Discourse est mis à niveau vers la version 3.5.0.beta8 (la version 3.5.0.beta9-dev pose également problème), il est constaté que l’utilisateur a modifié sa signature et ne peut pas l’enregistrer (bien qu’elle s’affiche comme enregistrée, elle ne prend pas effet). Cela fonctionne toujours normalement sur la version 3.5.0.beta7. Nous espérons une correction rapide, car de nombreux plugins de la beta7 à la beta8 sont intégrés.

2 « J'aime »

Nous avons un cas d’utilisation spécifique pour les signatures et je me demande s’il serait relativement facile d’apporter quelques modifications.

  1. Je suis d’accord pour dire que j’aimerais voir les signatures pour des groupes spécifiques dans l’interface utilisateur, je ne suis pas doué en CSS.
  2. Nous utilisons notre Discourse à la fois comme une communauté et comme un système de tickets de support. Y a-t-il un moyen d’obtenir un paramètre pour « Afficher uniquement les signatures dans X catégories » ?

Nous n’avons vraiment besoin d’elles que dans notre section de support où la plupart de nos interactions se font par e-mail.

3 « J'aime »

4 messages ont été déplacés vers un nouveau sujet : Demande de fonctionnalité : inclure la signature dans les notifications par e-mail

Quelqu’un de bon en CSS sait comment :

  1. Limiter la possibilité d’avoir une signature à seulement certains groupes ?

  2. Limiter la taille maximale de l’image et de la taille du texte pour la signature afin de la rendre moins envahissante

Je crois que vous pouvez utiliser ceci :

Vous pouvez faire un clic droit > Inspecter pour obtenir un id/une classe d’un élément à masquer avec display:none. J’ai bien peur d’être sur mon téléphone maintenant, donc je ne peux pas vérifier les classes/ids :sweat_smile: .

Salut à tous.

Ce plugin est-il toujours disponible ?

Je n’arrive pas à le trouver…

Il n’est pas inclus dans le cœur, vous devrez donc l’installer séparément (install it separately).

Merci. Je suis nul pour comprendre ce genre de choses. Aucune idée de comment je ferais ça. Il devrait y avoir un paramètre. Ce serait tellement plus facile. Je ne vois pas pourquoi un groupe voudrait autoriser les signatures pour tout le monde. J’aimerais aussi qu’il y ait une option pour masquer le paramètre « Activer les signatures - Voir les signatures des utilisateurs sous les messages ».

Il devrait également y avoir une option pour limiter le nombre de caractères dans une signature texte et limiter la taille de l’image pour une bannière de signature.

J’aimerais connaître le CSS lol

Ok, pour ceux qui veulent vraiment améliorer leurs signatures pour leur groupe (surtout si vous souhaitez utiliser les options pour qu’une signature fasse partie d’une mise à niveau/abonnement payant), voici le code (et la raison d’être) que je pense rendre cela bien meilleur, et qui peut vous aider à générer plus de mises à niveau. Cela m’a pris beaucoup d’essais, mais ça fonctionne. Faites attention aux endroits où vous devez remplacer les parties “XXXXX”.

Je voulais accomplir les 2 choses suivantes :
A) Je voulais désactiver la possibilité de NE PAS voir les signatures. Cela signifie que les utilisateurs qui effectuent une mise à niveau savent que leur signature sera vue par tout le monde.

B) Je voulais qu’UN SEUL groupe ait la possibilité de créer une signature.

  1. Allez dans Admin > Apparence > Thèmes et composants > Composants > Installer > Créer nouveau

  2. Ajoutez ce code dans l’onglet < head > :

<script>
// Attendre que la structure de base de la page se charge en premier
document.addEventListener("DOMContentLoaded", function() {
    
    // Configurer le observateur
    const observer = new MutationObserver(function(mutations) {
        // Trouver toutes les étiquettes de contrôle sur la page
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // Rechercher l'étiquette spécifique Signatures
            if (label.textContent.trim() === 'Enable Signatures') {
                // Trouver le conteneur principal contenant à la fois l'étiquette et la case à cocher et le masquer
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // MAINTENANT commencer à observer le corps, car nous savons qu'il existe
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. Ajoutez ce code dans l'onglet css (remplacez XXXXX par le nom de votre groupe) :

/* Masquer la section de signature pour tout le monde */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Afficher uniquement si la classe 'user-is-XXXXX' est présente sur le corps */
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. Ajoutez ce code dans la balise < head > sous le premier bloc ci-dessus (remplacez XXXXX par le nom de votre groupe) :
<script>
(function() {
  const checkAccess = () => {
    // Discourse stocke les groupes de l'utilisateur actuel dans cet objet global
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // Vérifier si un nom de groupe correspond à "XXXXX"
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // Exécuter immédiatement
  checkAccess();

  // Exécuter chaque fois que l'utilisateur navigue entre les pages
  document.addEventListener('discourse-ready', checkAccess);
  
  // Sauvegarde : Exécuter à nouveau après 1 seconde pour les chargements lents
  setTimeout(checkAccess, 1000);
})();
</script>
  1. Ajoutez ce code dans l’onglet css sous le premier bloc ci-dessus (remplacez XXXXX par le nom de votre groupe) :
/* Masquer la section de signature pour tout le monde */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Afficher uniquement si la classe 'user-is-XXXXX' est présente sur le corps */
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;
}

Fait.

Je ne suis pas développeur. Tout ce que je sais, c’est que cela fonctionne à 100 % sur mon site.

Aussi, à l’auteur du plugin – J’ADORERAIS la possibilité de limiter le nombre de caractères de la signature. J’ai essayé tant de choses mais rien n’a fonctionné.

1 « J'aime »

J’ai ajouté les fonctionnalités les plus demandées au plugin dans une branche

Si vous pouvez tester cette branche et me faire part de vos commentaires, je pourrai la fusionner la semaine prochaine.

3 « J'aime »

Concernant la mise à niveau si elle a lieu la semaine prochaine, comment cela serait-il fait ? :slight_smile:

Comment testons-nous cela ? Désolé pour la question de débutant. Je préférerais cela à ce que j’ai proposé ci-dessus. De plus, serait-il possible d’ajouter une option pour désactiver les signatures d’images et n’autoriser que celles basées sur du texte ? Merci !

Salut Long ! Hébergez-vous vous-même votre site Discourse ? Si oui, vous pouvez installer le plugin en suivant les instructions liées dans le premier message.

Personnellement, je recommanderais d’attendre que la branche de Falco soit finalisée et fusionnée.

Oui, auto-hébergement. J’ai le plugin installé. Une fois que cette branche sera finalisée et fusionnée, elle se mettra à jour automatiquement ? Merci !

1 « J'aime »

Vous modifiez votre ligne de plugin dans app.yml pour qu’elle ressemble à ceci

- sudo -E -u discourse git clone -b feature/group-category-restrictions git@github.com:discourse/discourse-signatures.git

Merci. J’attendrai le plugin mis à jour. Il est moins probable que je gâche ça :rofl: