Files
danbooru/app/controllers/artists_controller.rb
evazion b4ce2d83a6 models: remove belongs_to_creator macro.
The belongs_to_creator macro was used to initialize the creator_id field
to the CurrentUser. This made tests complicated because it meant you had
to create and set the current user every time you wanted to create an
object, when lead to the current user being set over and over again. It
also meant you had to constantly be aware of what the CurrentUser was in
many different contexts, which was often confusing. Setting creators
explicitly simplifies everything greatly.
2020-01-21 00:09:38 -06:00

99 lines
2.6 KiB
Ruby

class ArtistsController < ApplicationController
respond_to :html, :xml, :json, :js
before_action :member_only, :except => [:index, :show, :show_or_new, :banned]
before_action :admin_only, :only => [:ban, :unban]
before_action :load_artist, :only => [:ban, :unban, :show, :edit, :update, :destroy, :undelete]
def new
@artist = Artist.new_with_defaults(artist_params(:new))
respond_with(@artist)
end
def edit
respond_with(@artist)
end
def banned
redirect_to artists_path(search: { is_banned: "true", order: "updated_at" }, format: request.format.symbol)
end
def ban
@artist.ban!(banner: CurrentUser.user)
redirect_to(artist_path(@artist), :notice => "Artist was banned")
end
def unban
@artist.unban!
redirect_to(artist_path(@artist), :notice => "Artist was unbanned")
end
def index
# XXX
params[:search][:name] = params.delete(:name) if params[:name]
@artists = Artist.includes(:urls).paginated_search(params)
@artists = @artists.includes(:tag) if request.format.html?
@artists = @artists.includes(:urls) if !request.format.html?
if params[:redirect].to_s.truthy? && @artists.one? && @artists.first.name == Artist.normalize_name(params[:search][:any_name_or_url_matches])
redirect_to @artists.first
else
respond_with @artists
end
end
def show
@current_item = @artist = Artist.find(params[:id])
respond_with(@artist)
end
def create
@artist = Artist.create(artist_params.merge(creator: CurrentUser.user))
respond_with(@artist)
end
def update
@artist.update(artist_params)
flash[:notice] = @artist.valid? ? "Artist updated" : @artist.errors.full_messages.join("; ")
respond_with(@artist)
end
def destroy
@artist.update_attribute(:is_active, false)
redirect_to(artist_path(@artist), :notice => "Artist deleted")
end
def revert
@artist = Artist.find(params[:id])
@version = @artist.versions.find(params[:version_id])
@artist.revert_to!(@version)
respond_with(@artist)
end
def show_or_new
@artist = Artist.find_by_name(params[:name])
if params[:name].blank?
redirect_to new_artist_path(artist_params(:new))
elsif @artist.present?
redirect_to artist_path(@artist)
else
@artist = Artist.new(name: params[:name])
respond_with(@artist)
end
end
private
def load_artist
@artist = Artist.find(params[:id])
end
def artist_params(context = nil)
permitted_params = %i[name other_names other_names_string group_name url_string notes is_active]
permitted_params << :source if context == :new
params.fetch(:artist, {}).permit(permitted_params)
end
end