Estoy intentando encontrar una manera de que las etiquetas creadas por los usuarios en una categoría específica se asignen automáticamente a un grupo de etiquetas especificado. Busqué y no encontré nada disponible actualmente.
¿Este código parece que haría lo que quiero?
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
# Comprobar si el plugin está habilitado y el tema tiene etiquetas
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
# Obtener los nombres de categoría y grupo de etiquetas configurados
target_category_name = SiteSetting.auto_tag_category_name
target_tag_group_name = SiteSetting.auto_tag_group_name
# Find the category and tag group
# Encontrar la categoría y el grupo de etiquetas
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
# Salir si no se encuentra la categoría o el grupo de etiquetas
return unless target_category && target_tag_group
return unless self.category_id == target_category.id
# Get the timestamp of the topic creation
# Obtener la marca de tiempo de la creación del tema
topic_created_at = self.created_at
self.tags.each do |tag|
# Check if the tag was created close to the topic creation time
# Comprobar si la etiqueta se creó cerca del momento de creación del tema
# Allow a small window (e.g., 1 minute) to account for processing delays
# Permitir una pequeña ventana (por ejemplo, 1 minuto) para tener en cuenta los retrasos en el procesamiento
if tag.created_at && tag.created_at >= (topic_created_at - 1.minute)
# Check if tag is already in the target tag group
# Comprobar si la etiqueta ya está en el grupo de etiquetas de destino
unless TagGroupMembership.exists?(tag_id: tag.id, tag_group_id: target_tag_group.id)
# Add the tag to the tag group
# Agregar la etiqueta al grupo de etiquetas
TagGroupMembership.create!(tag_id: tag.id, tag_group_id: target_tag_group.id)
end
end
end
end
end
end