Files
danbooru/app/controllers/artists_controller.rb
evazion 2170961f47 artists: improve prefilling of new artist form (#4028)
* When creating an artist by clicking the '?' next to the artist tag in
  the tag list, prefill the new artist form by finding the artist's last
  upload and fetching its source data.

  Previously we filled the urls with the source of the artist's last
  upload, which was wrong because it was usually a direct image URL (#3078).

* Fix the other names field not escaping spaces within names to underscores.

* Fix the other names field being potentially prefilled with duplicate names.
2018-12-27 15:03:11 -06:00

115 lines
3.1 KiB
Ruby

class ArtistsController < ApplicationController
respond_to :html, :xml, :json, :js
before_action :member_only, :except => [:index, :show, :show_or_new, :banned]
before_action :builder_only, :only => [:destroy]
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
@artists = Artist.where("is_banned = ?", true).order("name")
respond_with(@artists) do |format|
format.xml do
render :xml => @artists.to_xml(:include => [:urls], :root => "artists")
end
format.json do
render :json => @artists.to_json(:include => [:urls])
end
end
end
def ban
@artist.ban!
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
@artists = Artist.includes(:urls).search(search_params).paginate(params[:page], :limit => params[:limit], :search_count => params[:search])
respond_with(@artists) do |format|
format.xml do
render :xml => @artists.to_xml(:include => [:urls], :root => "artists")
end
format.json do
render :json => @artists.to_json(:include => [:urls])
expires_in params[:expiry].to_i.days if params[:expiry]
end
end
end
def show
@artist = Artist.find(params[:id])
@post_set = PostSets::Artist.new(@artist)
respond_with(@artist, methods: [:domains], include: [:urls])
end
def create
@artist = Artist.create(artist_params)
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
if !@artist.deletable_by?(CurrentUser.user)
raise User::PrivilegeError
end
@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 @artist
redirect_to artist_path(@artist)
else
@artist = Artist.new(name: params[:name])
@post_set = PostSets::Artist.new(@artist)
respond_with(@artist)
end
end
private
def load_artist
@artist = Artist.find(params[:id])
end
def search_params
sp = params.fetch(:search, {})
sp[:name] = params[:name] if params[:name]
sp.permit!
end
def artist_params(context = nil)
permitted_params = %i[name other_names other_names_string group_name url_string notes]
permitted_params << :is_active if CurrentUser.is_builder?
permitted_params << :source if context == :new
params.fetch(:artist, {}).permit(permitted_params)
end
end