Attribuer de nouveaux tags à un groupe de tags

J’essaie de trouver un moyen de faire en sorte que les tags créés par les utilisateurs dans une catégorie spécifique soient automatiquement attribués à un groupe de tags spécifié. J’ai cherché et je n’ai rien trouvé de disponible pour le moment.

Ce code vous semble-t-il faire ce que je veux ?

enabled_site_setting :auto_tag_to_group_enabled

# Plugin settings
register_site_setting :auto_tag_to_group_enabled, default: true
register_site_setting :auto_tag_category_name, default: "RestrictedCategory"
register_site_setting :auto_tag_group_name, default: "RestrictedTags"

after_initialize do
  module ::DiscourseAutoTagToGroup
    class Engine < ::Rails::Engine
      engine_name "discourse_auto_tag_to_group"
      isolate_namespace DiscourseAutoTagToGroup
    end
  end

  require_dependency "topic"
  class ::Topic
    after_save :auto_assign_new_tags_to_group, if: :auto_tag_to_group_conditions_met?

    private

    def auto_tag_to_group_conditions_met?
      # Check if plugin is enabled and topic has tags
      # Vérifier si le plugin est activé et si le sujet a des tags
      SiteSetting.auto_tag_to_group_enabled && self.tags.present?
    end

    def auto_assign_new_tags_to_group
      # Get the configured category and tag group names
      # Récupérer les noms de catégorie et de groupe de tags configurés
      target_category_name = SiteSetting.auto_tag_category_name
      target_tag_group_name = SiteSetting.auto_tag_group_name

      # Find the category and tag group
      # Trouver la catégorie et le groupe de tags
      target_category = Category.find_by(name: target_category_name)
      target_tag_group = TagGroup.find_by(name: target_tag_group_name)

      # Exit if category or tag group not found
      # Quitter si la catégorie ou le groupe de tags n'est pas trouvé
      return unless target_category && target_tag_group
      return unless self.category_id == target_category.id

      # Get the timestamp of the topic creation
      # Obtenir l'horodatage de la création du sujet
      topic_created_at = self.created_at

      self.tags.each do |tag|
        # Check if the tag was created close to the topic creation time
        # Vérifier si le tag a été créé près de l'heure de création du sujet
        # Allow a small window (e.g., 1 minute) to account for processing delays
        # Autoriser une petite fenêtre (par exemple, 1 minute) pour tenir compte des retards de traitement
        if tag.created_at && tag.created_at >= (topic_created_at - 1.minute)
          # Check if tag is already in the target tag group
          # Vérifier si le tag est déjà dans le groupe de tags cible
          unless TagGroupMembership.exists?(tag_id: tag.id, tag_group_id: target_tag_group.id)
            # Add the tag to the tag group
            # Ajouter le tag au groupe de tags
            TagGroupMembership.create!(tag_id: tag.id, tag_group_id: target_tag_group.id)
          end
        end
      end
    end
  end
end

J’ai également rencontré une exigence similaire. L’avez-vous résolue ?

Non. Faites-moi savoir si vous trouvez quelque chose.