Signatures Discourse

Sono pazzo qui o non c’è alcuna validazione sull’URL dell’immagine della firma dell’input dell’utente?
In pratica, un utente può inserire qualsiasi cosa e verrà inviata ad altri utenti?

Inoltre, perché la dimensione del database dell’URL della firma è impostata su 32_000?
Perché qualcuno avrebbe bisogno di 32.000 caratteri per un URL di un’immagine?

Spettrale :ghost:

Ho modificato il css in questo modo per codificare in modo fisso un’altezza e una larghezza massime;

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

Ho cambiato la dimensione massima dell’URL della firma a 250 in plugin.rb

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

Ho aggiunto questo in fondo a “on(:user_updated) do |user|” in plugin.rb (non utilizzerò la modalità avanzata)

    # Valida l'URL se non in modalità avanzata
    if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
      url = user.custom_fields["signature_url"]

      # Validazione rigorosa: solo HTTPS, solo determinati tipi di file immagine
      unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
        Rails.logger.warn("[discourse-signatures] Rifiutato signature_url non valido per l'utente #{user.id}: #{url.inspect}")
        user.custom_fields["signature_url"] = nil
        user.save
      end
    end

Se sto facendo qualcosa di sbagliato qui (non ho mai lavorato con Discourse prima), per favore correggilo e mostrami il modo giusto per farlo.

1 Mi Piace

Perché 250 non sono abbastanza…

Questa è l’idea di una firma. La stessa cosa vale per un forum, le persone inseriscono cose e altre persone le vedono. Mondo pazzo, eh?

5 Mi Piace

Quando Discourse viene aggiornato alla versione 3.5.0.beta8 (anche la versione 3.5.0.beta9-dev presenta problemi), si scopre che l’utente ha modificato la firma e non riesce a salvarla (anche se viene visualizzato il salvataggio, non ha effetto); tutto è ancora normale sulla versione 3.5.0.beta7. Speriamo che venga risolto presto, poiché molti plugin dalla beta7 alla beta8 sono integrati.

2 Mi Piace

Abbiamo un caso d’uso specifico per le firme e mi chiedo se sarebbe relativamente facile apportare alcune modifiche.

  1. Concordo sul fatto che vorrei vedere le firme solo per gruppi specifici nell’interfaccia utente, non sono bravo con il CSS.
  2. Stiamo utilizzando il nostro Discourse sia come community che come sistema di ticket di supporto. Esiste un modo per ottenere un’impostazione per “Visualizza solo le firme in X categorie”?

Abbiamo davvero bisogno delle firme solo nella nostra sezione di supporto, dove la maggior parte delle nostre interazioni avviene via e-mail.

3 Mi Piace

4 messaggi sono stati spostati in un nuovo argomento: Richiesta di funzionalità: includere la firma nelle notifiche e-mail

Qualcuno esperto di CSS sa come:

  1. Limitare la possibilità di avere una firma solo a gruppi specifici?

  2. Limitare la dimensione massima dell’immagine e la dimensione del testo per la firma per mantenerla meno invadente (spammy)

Credo tu possa usare questo:

Puoi fare clic destro > Ispeziona per ottenere un id/classe di un elemento da nascondere con display:none. Temo di essere al telefono ora quindi non posso controllare le classi/id :sweat_smile: .

Ciao ragazzi.

Questo plugin è ancora disponibile?

Non riesco a trovarlo…

Non è #incluso-nel-core, quindi dovrai installarlo separatamente.

Grazie. Sono pessimo a capire queste cose. Non ho idea di come potrei farlo. Dovrebbe esserci un’impostazione. Molto più facile. Non capisco perché un gruppo vorrebbe consentire le firme per tutti. Vorrei anche che ci fosse un’opzione per nascondere l’impostazione “Abilita firme - Vedi le firme degli utenti sotto i post”.

Dovrebbe esserci anche un’opzione per limitare il conteggio dei caratteri in una firma di testo e limitare le dimensioni dell’immagine per una firma banner.

Magari conoscessi il css lol

Ok, per coloro che vogliono davvero migliorare le loro firme per il loro gruppo (specialmente se si desidera utilizzare le opzioni per avere una firma come parte di un aggiornamento/abbonamento a pagamento), ecco il codice (e la logica dietro di esso) che penso lo renda molto migliore e possa aiutarvi a promuovere più aggiornamenti. Mi ci sono voluti un sacco di tentativi, ma funziona. Prestate attenzione a dove dovete sostituire le parti “XXXXX”.

Volevo ottenere le seguenti 2 cose:
A) Volevo disabilitare la possibilità di NON visualizzare le firme. Ciò significa che gli utenti che effettuano l’aggiornamento sanno che la loro firma sarà vista da tutti.

B) Volevo che SOLO un certo gruppo avesse la possibilità di creare una firma.

  1. Vai su Admin > Appearance > Themes & components > Components > Install > Create new

  2. Aggiungi questo codice nella scheda <head>:

<script>
// Aspetta che si carichi prima la struttura base della pagina
document.addEventListener("DOMContentLoaded", function() {
    
    // Imposta il watcher
    const observer = new MutationObserver(function(mutations) {
        // Trova tutte le etichette di controllo sulla pagina
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // Cerca l'etichetta specifica "Signatures"
            if (label.textContent.trim() === 'Enable Signatures') {
                // Trova il contenitore principale che contiene sia l'etichetta che la casella di controllo e nascondilo
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // ORA inizia a osservare il body, poiché sappiamo che esiste
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. Aggiungi questo codice nella scheda css (sostituisci XXXXX con il nome del tuo gruppo):

/* Nascondi la sezione firma per tutti */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Mostrala solo se la classe 'user-is-XXXXX' è presente sul 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. Aggiungi questo codice nel tag <head> sotto il primo blocco sopra (sostituisci XXXXX con il nome del tuo gruppo):
<script>
(function() {
  const checkAccess = () => {
    // Discourse memorizza i gruppi dell'utente corrente in questo oggetto globale
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // Controlla se qualche nome di gruppo corrisponde a "XXXXX"
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // Esegui immediatamente
  checkAccess();

  // Esegui ogni volta che l'utente naviga tra le pagine
  document.addEventListener('discourse-ready', checkAccess);
  
  // Backup: Esegui di nuovo dopo 1 secondo per catturare caricamenti lenti
  setTimeout(checkAccess, 1000);
})();
</script>
  1. Aggiungi questo codice nella scheda css sotto il primo blocco sopra (sostituisci XXXXX con il nome del tuo gruppo):
/* Nascondi la sezione firma per tutti */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Mostrala solo se la classe 'user-is-XXXXX' è presente sul 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;
}

Fatto.

Non sono uno sviluppatore. Tutto quello che so è che funziona al 100% sul mio sito.

Inoltre, all’autore del plugin: ADOREREI la possibilità di limitare il conteggio dei caratteri della firma. Ho provato tante cose ma niente ha funzionato.

1 Mi Piace

Ho aggiunto le funzionalità più richieste al plugin in un branch

Se potete provare questo branch e dare un feedback, posso unirlo la prossima settimana.

3 Mi Piace

Riguardo all’aggiornamento, se fosse la prossima settimana, come verrebbe fatto? :slight_smile:

Come possiamo testarlo? Scusa per la domanda da principiante. Preferirei questa soluzione a quella che ho proposto sopra. Inoltre, sarebbe possibile aggiungere un’opzione per disattivare le firme immagine e consentire solo quelle basate su testo? Grazie!

Ciao Long! Stai auto-ospitando il tuo sito Discourse? In tal caso, puoi installare il plugin seguendo le istruzioni collegate nel primo post.

Personalmente, consiglierei di aspettare che il branch di Falco sia finalizzato e unito.

Sì, self-hosting. Ho installato il plugin. Una volta che quel branch sarà finalizzato e unito, si aggiornerà automaticamente? Grazie!

1 Mi Piace

Modifichi la riga del tuo plugin su app.yml in questo modo

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

Grazie. Attenderò il plugin aggiornato. È meno probabile che lo rovini :rofl:

Questa potrebbe essere una domanda stupida, ma quando l’aggiornamento viene unito, il plugin si aggiorna automaticamente e vedremo le nuove opzioni nelle impostazioni?

No, credo che dovrai aggiornarlo manualmente.

2 Mi Piace