Graag een update en bedankt aan iedereen die heeft geholpen.
Met de laatste wijzigingen werkt de plugin nu precies zoals ik bedoeld had! Het kent correct verschillende titels toe op basis van de primaire groep en het vertrouwensniveau van de gebruiker.
Ik plaats hieronder de definitieve werkende code. Het lijkt correct, maar aangezien ik geen ontwikkelaar ben, vroeg ik me af of er gebieden zijn voor verbetering of optimalisatie die ik misschien heb gemist.
app/jobs/scheduled/update-all-titles.rb
# frozen_string_literal: true
module ::Jobs
class AssignGroupBasedTitles < ::Jobs::Scheduled
every SiteSetting.update_title_frequency.hours
def execute(args)
return unless SiteSetting.add_title_by_group_trust_enabled
rules_json_string = SiteSetting.group_based_title_rules
return if rules_json_string.blank?
begin
# Parseer de JSON-tekenreeks handmatig naar een Ruby-array.
rules = JSON.parse(rules_json_string)
rescue JSON::ParserError
# Als de JSON ongeldig is, log dan een fout en sluit af om te voorkomen dat de taak mislukt.
Rails.logger.error("Group-Based Titles Plugin: Kon group_based_title_rules JSON niet parsen.")
return
end
# Veiligheidscontrole om ervoor te zorgen dat de geparseerde regels een niet-lege array zijn.
return unless rules.is_a?(Array) && rules.present?
User.transaction do
rules.each do |rule|
group_id = rule["group_id"]
trust_level = rule["trust_level"]
title = rule["title"]
next if group_id.blank? || trust_level.blank? || title.blank?
User.where(primary_group_id: group_id, trust_level: trust_level)
.where.not(title: title)
.update_all(title: title)
end
end
end
end
end
config/settings.yml
plugins:
add_title_by_group_trust_enabled:
default: true
client: true
group_based_title_rules:
type: objects
default: []
schema:
properties:
group_id:
type: integer
name: "Gebruikersgroep"
component: "group-chooser"
trust_level:
type: integer
name: "Vertrouwensniveau"
min: 1
max: 4
title:
type: string
name: "Titel"
update_title_frequency:
default: 24
type: integer
plugin.rb
# frozen_string_literal: true
# name: add-title-by-group-trust-level
# about: Kent titels toe op basis van primaire groep en vertrouwensniveau.
# version: 2.1.0
# authors: Your Name
enabled_site_setting :add_title_by_group_trust_enabled
after_initialize do
require_relative "./app/jobs/scheduled/update-all-titles.rb"
end