* On posts, automatically trigger "Fetch source data" when clicking the Edit tab, instead of triggering the artist finder button. This way we find both the artist and the translated tags in one ajax call. * Remove the "Artist" finder button next to the source field. This isn't necessary given that "Fetch source data" finds the artist itself. * Remove the /artists/finder.json API endpoint. This is no longer used after removing the "Artist" finder button.
114 lines
3.0 KiB
Ruby
114 lines
3.0 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)
|
|
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
|
|
permitted_params = %i[name other_names other_names_comma group_name url_string notes]
|
|
permitted_params << :is_active if CurrentUser.is_builder?
|
|
|
|
params.fetch(:artist, {}).permit(permitted_params)
|
|
end
|
|
end
|