102 lines
3.5 KiB
Ruby
102 lines
3.5 KiB
Ruby
|
|
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
|