Migliore pratica per automatizzare i titoli per combinazioni di gruppi e livelli di fiducia

Ciao!

Ho modificato il plugin per adattarlo alle mie esigenze e vorrei condividere ciò che ho fatto, il mio attuale flusso di lavoro e alcune domande/richieste di consulenza.


1. Le mie modifiche

Percorso e contenuto del file:

File: app/jobs/scheduled/update-all-titles.rb

# frozen_string_literal: true

module AddTitleBasedOnTrustLevel
  class UpdateTitles < ::Jobs::Scheduled
    every SiteSetting.update_title_frequency.hours

    def execute(args)
      group_titles = JSON.parse(SiteSetting.group_trust_level_titles || "{}")

      User.find_each do |user|
        # Salta amministratori e moderatori, non aggiornare i loro titoli
        next if user.admin? || user.moderator?

        group_id = user.primary_group_id
        next unless group_id

        group = Group.find_by(id: group_id)
        next unless group

        group_key = group.name.downcase
        tl = user.trust_level

        titles = group_titles[group_key]
        next unless titles.is_a?(Array)
        next unless tl >= 1 && tl <= 4

        new_title = titles[tl]
        next unless new_title.present?

        user.update_column(:title, new_title) if user.title != new_title
      end
    end
  end
end

File: config/settings.yml

plugins:
  add_title_based_on_trust_level_enabled:
    default: false
    client: true
  group_trust_level_titles:
    default: '{"designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"], "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]}'
    type: string
    client: true
    multiline: true
  update_title_frequency:
    default: 24
    type: integer

2. Come ho testato

Attualmente sto eseguendo manualmente questa logica tramite la console di Rails per verificare se la funzione funziona. Aggiorna correttamente i titoli degli utenti in blocco secondo i miei requisiti.


3. Problema di inserimento delle impostazioni del plugin

Non c’è un pulsante “Impostazioni” per questo plugin nella pagina /admin/plugins. Al momento, per modificare la configurazione, devo visitare direttamente /admin/plugins/add-title-based-on-trust-level/settings.
C’è un modo per far apparire il pulsante o il link delle impostazioni nella pagina dei plugin per un accesso più facile?


4. Le mie impostazioni attuali

Questa è la mia attuale configurazione JSON (allegherò anche uno screenshot):

{
  "designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"],
  "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]
}


5. Domande / Possibili miglioramenti

  • Questo approccio (iterare su ogni utente e aggiornare il suo titolo) rischia problemi di prestazioni se ci sono molti utenti? Esiste una migliore best practice per questo?
  • Qualche consiglio sull’ottimizzazione, sia per il job pianificato che per l’interfaccia utente delle impostazioni di amministrazione?
  • C’è qualcosa di insicuro o problematico nel mio metodo di cui dovrei essere cauto?

Grazie mille per il tuo grande lavoro e per questo utile plugin!
Se hai suggerimenti, o se prevedi di migliorare la configurazione dei titoli per gruppo+livello di fiducia in futuro, mi piacerebbe sentire i tuoi pensieri.

2 Mi Piace