Discourse Signaturen

Bin ich verrückt oder gibt es überhaupt keine Validierung der URL des Benutzersignaturbildes?
Im Grunde kann ein Benutzer alles eingeben, und es wird an andere Benutzer weitergeleitet?

Außerdem, warum ist die DB-Größe der URL-Signatur auf 32.000 eingestellt?
Warum sollte jemand 32.000 Zeichen für eine URL zu einem Bild benötigen?

Gruselig :ghost:

Ich habe das CSS wie folgt geändert, um eine maximale Höhe und Breite festzulegen:

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

Ich habe die maximale Größe der Signatur-URL in plugin.rb auf 250 geändert

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

Ich habe dies am Ende von “on(:user_updated) do |user|” in plugin.rb hinzugefügt (ich werde den erweiterten Modus nicht verwenden)

    # Validieren Sie die URL, wenn nicht im erweiterten Modus
    if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
      url = user.custom_fields["signature_url"]

      # Strikte Validierung: nur HTTPS, nur bestimmte Bilddateitypen
      unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
        Rails.logger.warn("[discourse-signatures] Ungültige signature_url für Benutzer #{user.id} abgelehnt: #{url.inspect}")
        user.custom_fields["signature_url"] = nil
        user.save
      end
    end

Wenn ich hier etwas falsch mache (habe noch nie mit Discourse gearbeitet), korrigieren Sie es bitte und zeigen Sie mir den richtigen Weg.

1 „Gefällt mir“

Weil 250 nicht ausreichen…

Das ist die ganze Idee einer Signatur. Dasselbe gilt für ein Forum, Leute geben Dinge ein und andere Leute sehen es. Verrückte Welt, was?

5 „Gefällt mir“

Wenn Discourse auf 3.5.0.beta8 aktualisiert wird (3.5.0.beta9-dev ist ebenfalls ein Problem), wird festgestellt, dass der Benutzer die Signatur bearbeitet hat und sie nicht speichern kann (obwohl sie als gespeichert angezeigt wird, aber keine Wirkung zeigt). Auf 3.5.0.beta7 ist sie noch normal. Wir hoffen, dass dies bald behoben wird, da viele Plugins von beta7 zu beta8 integriert wurden.

2 „Gefällt mir“

Wir haben einen speziellen Anwendungsfall für Signaturen und ich frage mich, ob es relativ einfach wäre, einige Änderungen vorzunehmen.

  1. Ich stimme zu, dass ich Signaturen nur für bestimmte Gruppen in der Benutzeroberfläche sehen möchte. Ich bin nicht gut mit CSS.
  2. Wir nutzen unser Discourse sowohl als Community als auch als Support-Ticketsystem. Gibt es eine Möglichkeit, eine Einstellung zu erhalten, um “Signaturen nur in X-Kategorien anzuzeigen”?

Wir brauchen sie eigentlich nur in unserem Support-Bereich, wo die meisten unserer Interaktionen per E-Mail erfolgen.

3 „Gefällt mir“

4 Beiträge wurden in ein neues Thema verschoben: Feature-Anfrage: Signatur in E-Mail-Benachrichtigungen einschließen

Kennt sich jemand mit CSS aus und weiß, wie man:

  1. Die Möglichkeit, eine Signatur zu haben, auf bestimmte Gruppen beschränkt?

  2. Die maximale Bildgröße und Textgröße für die Signatur begrenzt, um sie weniger spamlastig zu halten?

Ich glaube, du kannst das hier verwenden:

Du kannst mit Rechtsklick > Untersuchen eine ID/Klasse eines Elements abrufen, um es mit display:none auszublenden. Ich fürchte, ich bin gerade auf meinem Handy und kann die Klassen/IDs nicht überprüfen :sweat_smile: .

Hallo zusammen.

Ist dieses Plugin noch verfügbar?

Ich kann es nicht finden…

Es ist nicht included-in-core, daher müssten Sie es separat installieren.

Danke. Ich bin schrecklich darin, so etwas herauszufinden. Keine Ahnung, wie ich das überhaupt machen würde. Sollte eine Einstellung sein. Viel einfacher. Ich verstehe nicht, warum irgendeine Gruppe Signaturen für alle zulassen möchte. Ich wünschte auch, es gäbe eine Option, die Einstellung „Signaturen aktivieren – Siehe Benutzersignaturen unter Beiträgen“ auszublenden.

Es sollte auch eine Option geben, die Zeichenanzahl in einer Textsignatur zu begrenzen und die Bildgröße für ein Banner-Sig zu begrenzen.

Ich wünschte, ich könnte CSS lol

Ok, für diejenigen, die ihre Signaturen für ihre Gruppe wirklich besser funktionieren lassen möchten (insbesondere wenn Sie die Optionen nutzen möchten, eine Signatur als Teil eines kostenpflichtigen Upgrades/Abonnements zu haben), hier ist Code (und die Begründung dafür), von dem ich denke, dass er es viel besser macht und Ihnen helfen kann, mehr Upgrades zu fördern. Ich habe unzählige Versuche gebraucht, aber es funktioniert. Achten Sie darauf, wo Sie die „XXXXX“-Teile ersetzen müssen.

Ich wollte die folgenden 2 Dinge erreichen:
A) Ich wollte die Möglichkeit deaktivieren, Signaturen NICHT anzuzeigen. Das bedeutet, dass Benutzer, die ein Upgrade durchführen, wissen, dass ihre Signatur von allen gesehen wird.

B) Ich wollte, dass NUR eine bestimmte Gruppe die Möglichkeit hat, eine Signatur zu erstellen.

  1. Gehen Sie zu Admin > Erscheinungsbild > Themes & Komponenten > Komponenten > Installieren > Neu erstellen

  2. Fügen Sie diesen Code in den -Tab ein:

<script>
// Warten Sie, bis die grundlegende Seitenstruktur zuerst geladen ist
document.addEventListener("DOMContentLoaded", function() {
    
    // Richten Sie den Beobachter ein
    const observer = new MutationObserver(function(mutations) {
        // Finden Sie alle Kontroll-Labels auf der Seite
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // Suchen Sie nach dem spezifischen Signaturen-Label
            if (label.textContent.trim() === 'Enable Signatures') {
                // Finden Sie den Hauptcontainer, der sowohl das Label als auch das Kontrollkästchen enthält, und blenden Sie ihn aus
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // JETZT beginnen Sie mit der Beobachtung des Körpers, da wir wissen, dass er existiert
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. Fügen Sie diesen Code in den css-Tab ein (ersetzen Sie XXXXX durch Ihren Gruppennamen):

/* Blenden Sie den Signaturen-Bereich für alle aus */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Nur anzeigen, wenn die Klasse 'user-is-XXXXX' auf dem Body vorhanden ist */
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. Fügen Sie diesen Code unter dem ersten Block oben in den -Tag ein (ersetzen Sie XXXXX durch Ihren Gruppennamen):
<script>
(function() {
  const checkAccess = () => {
    // Discourse speichert die Gruppen des aktuellen Benutzers in diesem globalen Objekt
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // Prüfen, ob ein Gruppenname mit "XXXXX" übereinstimmt
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // Sofort ausführen
  checkAccess();

  // Ausführen, wann immer der Benutzer zwischen Seiten navigiert
  document.addEventListener('discourse-ready', checkAccess);
  
  // Sicherung: Erneut nach 1 Sekunde ausführen, um langsame Ladevorgänge abzufangen
  setTimeout(checkAccess, 1000);
})();
</script>
  1. Fügen Sie diesen Code unter dem ersten Block oben in den css-Tab ein (ersetzen Sie XXXXX durch Ihren Gruppennamen):
/* Blenden Sie den Signaturen-Bereich für alle aus */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Nur anzeigen, wenn die Klasse 'user-is-XXXXX' auf dem Body vorhanden ist */
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;
}

Fertig.

Ich bin kein Entwickler. Alles, was ich weiß, ist, dass dies auf meiner Seite zu 100 % funktioniert.

Auch an den Plugin-Autor – ich würde LIEBEND gerne die Möglichkeit haben, die Zeichenanzahl für Signaturen zu begrenzen. Ich habe so viele Dinge versucht, aber nichts hat funktioniert.

1 „Gefällt mir“

Ich habe die am häufigsten gewünschten Funktionen in einem Branch zum Plugin hinzugefügt

Wenn ihr diesen Branch testen und Feedback geben könnt, kann ich ihn nächste Woche zusammenführen.

3 „Gefällt mir“

Bezüglich des Upgrades, falls es nächste Woche stattfindet, wie würde dies durchgeführt werden? :slight_smile:

Wie testen wir das? Entschuldigung für die Anfängerfrage. Ich würde das gegenüber dem bevorzugen, was ich mir oben ausgedacht habe. Wäre es außerdem möglich, eine Option hinzuzufügen, um Bildsignaturen zu deaktivieren und nur textbasierte zuzulassen? Danke!

Hallo Long! Hostest du deine Discourse-Seite selbst? Wenn ja, kannst du das Plugin mit den im ersten Beitrag verlinkten Anweisungen installieren.

Ich persönlich würde empfehlen, zu warten, bis Falcos Branch finalisiert und zusammengeführt wurde.

Ja, selbst gehostet. Ich habe das Plugin installiert. Sobald dieser Branch finalisiert und zusammengeführt ist, wird es automatisch aktualisiert? Danke!

1 „Gefällt mir“

Sie ändern Ihre Plugin-Zeile in der app.yml wie folgt:

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

Danke. Ich werde auf das aktualisierte Plugin warten. Das werde ich weniger wahrscheinlich vermasseln :rofl:

Das ist vielleicht eine dumme Frage, aber wenn das Update zusammengeführt wird, wird das Plugin dann automatisch aktualisiert und sehen wir die neuen Optionen in den Einstellungen?

Nein, ich glaube, Sie müssen es manuell aktualisieren.

2 „Gefällt mir“