42 lines
1.9 KiB
Ruby
42 lines
1.9 KiB
Ruby
|
|
class ChallengeRequestsController < ApplicationController
|
||
|
|
|
||
|
|
before_action :load_collection
|
||
|
|
before_action :check_visibility
|
||
|
|
|
||
|
|
def check_visibility
|
||
|
|
unless @collection
|
||
|
|
flash.now[:notice] = ts("Collection could not be found")
|
||
|
|
redirect_to '/' and return
|
||
|
|
end
|
||
|
|
unless @collection.challenge_type == "PromptMeme" || (@collection.challenge_type == "GiftExchange" && @collection.challenge.user_allowed_to_see_requests_summary?(current_user))
|
||
|
|
flash.now[:notice] = ts("You are not allowed to view the requests summary!")
|
||
|
|
redirect_to collection_path(@collection) and return
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def index
|
||
|
|
@show_request_fandom_tags = @collection.challenge.request_restriction.allowed("fandom").positive?
|
||
|
|
|
||
|
|
# sorting
|
||
|
|
set_sort_order
|
||
|
|
direction = (@sort_direction.casecmp("ASC").zero? ? "ASC" : "DESC")
|
||
|
|
|
||
|
|
# actual content, do the efficient method unless we need the full query
|
||
|
|
|
||
|
|
if @sort_column == "fandom"
|
||
|
|
query = "SELECT prompts.*, GROUP_CONCAT(tags.name) AS tagnames FROM prompts INNER JOIN set_taggings ON prompts.tag_set_id = set_taggings.tag_set_id
|
||
|
|
INNER JOIN tags ON tags.id = set_taggings.tag_id
|
||
|
|
WHERE prompts.type = 'Request' AND tags.type = 'Fandom' AND prompts.collection_id = " + @collection.id.to_s + " GROUP BY prompts.id ORDER BY tagnames " + @sort_direction
|
||
|
|
@requests = Prompt.paginate_by_sql(query, page: params[:page], per_page: ArchiveConfig.ITEMS_PER_PAGE)
|
||
|
|
elsif @sort_column == "prompter" && !@collection.prompts.where(anonymous: true).exists?
|
||
|
|
@requests = @collection.prompts.where("type = 'Request'").
|
||
|
|
joins(challenge_signup: :pseud).
|
||
|
|
order("pseuds.name #{direction}").
|
||
|
|
paginate(page: params[:page])
|
||
|
|
else
|
||
|
|
@requests = @collection.prompts.where("type = 'Request'").order(@sort_order).paginate(page: params[:page], per_page: ArchiveConfig.ITEMS_PER_PAGE)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|