36 lines
1.2 KiB
Ruby
36 lines
1.2 KiB
Ruby
class Media < Tag
|
|
NAME = ArchiveConfig.MEDIA_CATEGORY_NAME
|
|
|
|
has_many :common_taggings, as: :filterable
|
|
has_many :fandoms, -> { where(type: 'Fandom') }, through: :common_taggings, source: :common_tag
|
|
|
|
after_create :expire_caches
|
|
after_update :expire_caches, if: -> { saved_change_to_name? || saved_change_to_type? || saved_change_to_canonical? }
|
|
after_destroy :expire_caches
|
|
|
|
def expire_caches
|
|
ActionController::Base.new.expire_fragment("menu-fandoms-version5")
|
|
ActionController::Base.new.expire_fragment("homepage-fandoms-version2")
|
|
end
|
|
|
|
def child_types
|
|
['Fandom']
|
|
end
|
|
|
|
# The media tag for unwrangled fandoms
|
|
def self.uncategorized
|
|
tag = self.find_or_create_by_name(ArchiveConfig.MEDIA_UNCATEGORIZED_NAME)
|
|
tag.update(canonical: true) unless tag.canonical
|
|
tag
|
|
end
|
|
|
|
# The list of media used for the menu on every page. All media except "No
|
|
# Media" and "Uncategorized Fandoms" are listed in order, and then
|
|
# "Uncategorized Fandoms" is tacked onto the list at the end.
|
|
def self.for_menu
|
|
canonical.by_name.where.not(
|
|
name: [ArchiveConfig.MEDIA_UNCATEGORIZED_NAME,
|
|
ArchiveConfig.MEDIA_NO_TAG_NAME]
|
|
).to_a + [uncategorized]
|
|
end
|
|
end
|