* 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.
115 lines
3.1 KiB
Ruby
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
|