otwarchive-symphonyarchive/app/controllers/admin/user_creations_controller.rb

102 lines
3.5 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
class Admin::UserCreationsController < Admin::BaseController
before_action :get_creation, only: [:hide, :set_spam, :destroy]
before_action :can_be_marked_as_spam, only: [:set_spam]
def get_creation
raise "Redshirt: Attempted to constantize invalid class initialize #{params[:creation_type]}" unless %w(Bookmark ExternalWork Series Work).include?(params[:creation_type])
@creation_class = params[:creation_type].constantize
@creation = @creation_class.find(params[:id])
end
def can_be_marked_as_spam
unless @creation_class && @creation_class == Work
flash[:error] = ts("You can only mark works as spam currently.")
redirect_to polymorphic_path(@creation) and return
end
end
# Removes an object from public view
def hide
authorize @creation
@creation.hidden_by_admin = (params[:hidden] == "true")
@creation.save(validate: false)
action = @creation.hidden_by_admin? ? "hide" : "unhide"
AdminActivity.log_action(current_admin, @creation, action: action)
flash[:notice] = @creation.hidden_by_admin? ?
ts("Item has been hidden.") :
ts("Item is no longer hidden.")
if @creation_class == ExternalWork || @creation_class == Bookmark
redirect_to(request.env["HTTP_REFERER"] || root_path)
else
redirect_to polymorphic_path(@creation)
end
end
def set_spam
authorize @creation
action = "mark as " + (params[:spam] == "true" ? "spam" : "not spam")
AdminActivity.log_action(current_admin, @creation, action: action, summary: @creation.inspect)
if params[:spam] == "true"
unless @creation.hidden_by_admin
@creation.notify_of_hiding_for_spam if @creation_class == Work
@creation.hidden_by_admin = true
end
@creation.mark_as_spam!
flash[:notice] = ts("Work was marked as spam and hidden.")
else
@creation.mark_as_ham!
@creation.update_attribute(:hidden_by_admin, false)
flash[:notice] = ts("Work was marked not spam and unhidden.")
end
redirect_to polymorphic_path(@creation)
end
def destroy
authorize @creation
AdminActivity.log_action(current_admin, @creation, action: "destroy", summary: @creation.inspect)
@creation.destroy
flash[:notice] = ts("Item was successfully deleted.")
if @creation_class == Bookmark || @creation_class == ExternalWork
redirect_to bookmarks_path
else
redirect_to works_path
end
end
def confirm_remove_pseud
@work = authorize Work.find(params[:id])
@orphan_pseuds = @work.orphan_pseuds
return unless @orphan_pseuds.empty?
flash[:error] = t(".must_have_orphan_pseuds")
redirect_to work_path(@work) and return
end
def remove_pseud
@work = authorize Work.find(params[:id])
pseuds = params[:pseuds]
orphan_account = User.orphan_account
if pseuds.blank?
pseuds = @work.orphan_pseuds
if pseuds.length > 1
flash[:error] = t(".must_select_pseud")
redirect_to work_path(@work) and return
end
else
pseuds = Pseud.find(pseuds).select { |p| p.user_id == orphan_account.id }
end
orphan_pseud = orphan_account.default_pseud
pseuds.each do |pseud|
pseud.change_ownership(@work, orphan_pseud)
end
unless pseuds.empty?
AdminActivity.log_action(current_admin, @work, action: "remove orphan_account pseuds")
flash[:notice] = t(".success", pseuds: pseuds.map(&:byline).to_sentence, count: pseuds.length)
end
redirect_to work_path(@work)
end
end