app/controllers/admin/skins_controller.rb
class Admin::SkinsController < Admin::BaseController
def index
authorize Skin
@unapproved_skins = Skin.unapproved_skins.sort_by_recent
end
def index_rejected
authorize Skin
@rejected_skins = Skin.rejected_skins.sort_by_recent
end
def index_approved
authorize Skin
@approved_skins = Skin.approved_skins.usable.sort_by_recent
end
def update
authorize Skin, :index?
flash[:notice] = []
modified_skin_titles = []
%w(official rejected cached featured in_chooser).each do |action|
skins_to_set = params["make_#{action}"] ? Skin.where(id: params["make_#{action}"].map {|id| id.to_i}) : []
skins_to_unset = params["make_un#{action}"] ? Skin.where(id: params["make_un#{action}"].map {|id| id.to_i}) : []
skins_to_set.each do |skin|
# Silently fail if the user doesn't have permission to update:
next unless policy(skin).update?
case action
when "official"
skin.update_attribute(:official, true)
when "rejected"
skin.update_attribute(:rejected, true)
when "cached"
next unless skin.official? && !skin.is_a?(WorkSkin)
skin.cache!
when "featured"
next unless skin.official? && !skin.is_a?(WorkSkin)
skin.cache! unless skin.cached?
skin.update_attribute(:featured, true)
when "in_chooser"
next unless skin.official? && !skin.is_a?(WorkSkin)
skin.cache! unless skin.cached?
skin.update_attribute(:in_chooser, true)
end
skin.update_attribute(:admin_note, params[:skin_admin_note]["#{skin.id}"]) if params[:skin_admin_note] && params[:skin_admin_note]["#{skin.id}"]
modified_skin_titles << skin.title
end
skins_to_unset.each do |skin|
# Silently fail if the user doesn't have permission to update:
next unless policy(skin).update?
case action
when "official"
skin.clear_cache! # no cache for unofficial skins
skin.update_attribute(:official, false)
skin.remove_me_from_preferences
when "rejected"
skin.update_attribute(:rejected, false)
when "cached"
next unless skin.official? && !skin.is_a?(WorkSkin)
skin.clear_cache! if skin.cached?
when "featured"
next unless skin.official? && !skin.is_a?(WorkSkin)
skin.update_attribute(:featured, false)
when "in_chooser"
next unless skin.official? && !skin.is_a?(WorkSkin)
skin.update_attribute(:in_chooser, false)
end
modified_skin_titles << skin.title
end
end
flash[:notice] << ts("The following skins were updated: %{titles}", titles: modified_skin_titles.join(', '))
# set default
if params[:set_default].present? && params[:set_default] != AdminSetting.default_skin&.title
authorize Skin, :set_default?
skin = Skin.find_by(title: params[:set_default], official: true)
@admin_setting = AdminSetting.first
if skin && @admin_setting
@admin_setting.default_skin = skin
@admin_setting.last_updated_by = params[:last_updated_by]
if @admin_setting.save
flash[:notice] << ts("Default skin changed to %{title}", title: skin.title)
else
flash[:error] = ts("We couldn't save the default skin change.")
end
end
end
redirect_to admin_skins_path
end
end