otwarchive-symphonyarchive/app/controllers/fandoms_controller.rb

57 lines
2.3 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
class FandomsController < ApplicationController
before_action :load_collection
def index
if @collection
@media = Media.canonical.by_name - [Media.find_by(name: ArchiveConfig.MEDIA_NO_TAG_NAME)] - [Media.find_by(name: ArchiveConfig.MEDIA_UNCATEGORIZED_NAME)]
@page_subtitle = t(".collection_page_title", collection_title: @collection.title)
@medium = Media.find_by_name(params[:media_id]) if params[:media_id]
@counts = SearchCounts.fandom_ids_for_collection(@collection)
@fandoms = (@medium ? @medium.fandoms : Fandom.all).where(id: @counts.keys).by_name
elsif params[:media_id]
@medium = Media.find_by_name!(params[:media_id])
@page_subtitle = @medium.name
@fandoms = if @medium == Media.uncategorized
@medium.fandoms.in_use.by_name
else
@medium.fandoms.canonical.by_name.with_count
end
else
flash[:notice] = t(".choose_media")
redirect_to media_index_path and return
end
@fandoms_by_letter = @fandoms.group_by { |f| f.sortable_name[0].upcase }
end
def show
@fandom = Fandom.find_by_name(params[:id])
if @fandom.nil?
flash[:error] = ts("Could not find fandom named %{fandom_name}", fandom_name: params[:id])
redirect_to media_index_path and return
end
@characters = @fandom.characters.canonical.by_name
end
def unassigned
join_string = "LEFT JOIN wrangling_assignments
ON (wrangling_assignments.fandom_id = tags.id)
LEFT JOIN users
ON (users.id = wrangling_assignments.user_id)"
conditions = "canonical = 1 AND users.id IS NULL"
unless params[:media_id].blank?
@media = Media.find_by_name(params[:media_id])
if @media
join_string << " INNER JOIN common_taggings
ON (tags.id = common_taggings.common_tag_id)"
conditions << " AND common_taggings.filterable_id = #{@media.id}
AND common_taggings.filterable_type = 'Tag'"
end
end
@fandoms = Fandom.joins(join_string).
where(conditions).
order(params[:sort] == 'count' ? "count DESC" : "sortable_name ASC").
with_count.
paginate(page: params[:page], per_page: 250)
end
end