Remove the ability to edit an artist's wiki page directly from the artist edit page. Instead the artist edit page has a link to open the wiki edit page if you need to edit the wiki too. Fixes an error being thrown when renaming an artist with a wiki page. The problem is that changing the artist's name breaks the artist's association with the old wiki page. Rails really wants nested associations to be based on immutable IDs, not on mutable names, so dealing with this correctly is difficult. We don't really want to encourage people to create wiki pages for artists to begin with, since they're usually just used to duplicate the artist urls. Making it less convenient to edit artist wiki pages is an intentional change to discourage creating unnecessary artist wikis. Finally, this fixes an exploit where it was possible to edit locked wiki pages through the artist edit page.
93 lines
2.3 KiB
Ruby
93 lines
2.3 KiB
Ruby
class ArtistsController < ApplicationController
|
|
respond_to :html, :xml, :json, :js
|
|
|
|
def new
|
|
@artist = authorize Artist.new_with_defaults(permitted_attributes(Artist))
|
|
respond_with(@artist)
|
|
end
|
|
|
|
def edit
|
|
@artist = authorize Artist.find(params[:id])
|
|
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 = authorize Artist.find(params[:id])
|
|
@artist.ban!(banner: CurrentUser.user)
|
|
redirect_to(artist_path(@artist), :notice => "Artist was banned")
|
|
end
|
|
|
|
def unban
|
|
@artist = authorize Artist.find(params[:id])
|
|
@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 = authorize Artist.paginated_search(params)
|
|
@artists = @artists.includes(:urls, :tag) if request.format.html?
|
|
|
|
respond_with(@artists)
|
|
end
|
|
|
|
def show
|
|
@artist = authorize Artist.find(params[:id])
|
|
respond_with(@artist)
|
|
end
|
|
|
|
def create
|
|
@artist = authorize Artist.new(permitted_attributes(Artist))
|
|
@artist.save
|
|
respond_with(@artist)
|
|
end
|
|
|
|
def update
|
|
@artist = authorize Artist.find(params[:id])
|
|
@artist.update(permitted_attributes(@artist))
|
|
flash[:notice] = @artist.valid? ? "Artist updated" : @artist.errors.full_messages.join("; ")
|
|
respond_with(@artist)
|
|
end
|
|
|
|
def destroy
|
|
@artist = authorize Artist.find(params[:id])
|
|
@artist.update_attribute(:is_deleted, true)
|
|
redirect_to(artist_path(@artist), :notice => "Artist deleted")
|
|
end
|
|
|
|
def revert
|
|
@artist = authorize 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(permitted_attributes(Artist))
|
|
elsif @artist.present?
|
|
redirect_to artist_path(@artist)
|
|
else
|
|
@artist = Artist.new(name: params[:name])
|
|
respond_with(@artist)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def item_matches_params(artist)
|
|
if params[:search][:any_name_or_url_matches]
|
|
artist.name == Artist.normalize_name(params[:search][:any_name_or_url_matches])
|
|
else
|
|
true
|
|
end
|
|
end
|
|
end
|