2024-08-03 17:15:26 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class AvoidPostingsController < ApplicationController
|
|
|
|
respond_to :html, :json
|
|
|
|
before_action :can_edit_avoid_posting_entries_only, except: %i[index show]
|
|
|
|
before_action :load_avoid_posting, only: %i[edit update destroy show delete undelete]
|
|
|
|
helper_method :search_params
|
|
|
|
|
|
|
|
def index
|
|
|
|
@avoid_postings = AvoidPosting.search(search_params).paginate(params[:page], limit: params[:limit])
|
|
|
|
respond_with(@avoid_postings)
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
respond_with(@avoid_posting)
|
|
|
|
end
|
|
|
|
|
|
|
|
def new
|
|
|
|
@avoid_posting = AvoidPosting.new(avoid_posting_params)
|
|
|
|
@avoid_posting.artist = Artist.new(avoid_posting_params[:artist_attributes])
|
|
|
|
respond_with(@artist)
|
|
|
|
end
|
|
|
|
|
|
|
|
def edit
|
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
@avoid_posting = AvoidPosting.new(avoid_posting_params)
|
|
|
|
artparams = avoid_posting_params.try(:[], :artist_attributes)
|
2024-08-04 15:35:46 -04:00
|
|
|
if artparams.present? && (artist = Artist.named(artparams[:name]))
|
2024-08-03 17:15:26 -04:00
|
|
|
@avoid_posting.artist = artist
|
|
|
|
notices = []
|
|
|
|
if artist.other_names.present? && (artparams.key?(:other_names_string) || artparams.key?(:other_names))
|
|
|
|
on = artparams[:other_names_string].try(:split) || artparams[:other_names]
|
|
|
|
artparams.delete(:other_names_string)
|
|
|
|
artparams.delete(:other_names)
|
|
|
|
if on.present?
|
|
|
|
artparams[:other_names] = (artist.other_names + on).uniq
|
|
|
|
notices << "Artist already had other names, the provided names were merged into the existing names."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if artist.group_name.present? && artparams.key?(:group_name)
|
|
|
|
if artparams[:group_name].blank?
|
|
|
|
artparams.delete(:group_name)
|
|
|
|
else
|
|
|
|
notices << "Artist's original group name was replaced."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if artist.linked_user_id.present? && artparams.key?(:linked_user_id)
|
|
|
|
if artparams[:linked_user_id].present?
|
|
|
|
notices << "Artist is already linked to \"#{artist.linked_user.name}\":/users/#{artist.linked_user_id}, no change was made."
|
|
|
|
end
|
|
|
|
artparams.delete(:linked_user_id)
|
|
|
|
end
|
|
|
|
notices = notices.join("\n")
|
|
|
|
# Remove period from last notice
|
|
|
|
flash[:notice] = notices[0..-2] if notices.present?
|
|
|
|
artist.update(artparams)
|
|
|
|
end
|
|
|
|
@avoid_posting.save
|
|
|
|
respond_with(@avoid_posting)
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
|
|
|
@avoid_posting.update(avoid_posting_params)
|
|
|
|
flash[:notice] = @avoid_posting.valid? ? "Avoid posting entry updated" : @avoid_posting.errors.full_messages.join("; ")
|
|
|
|
respond_with(@avoid_posting)
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@avoid_posting.destroy
|
2024-08-04 15:35:46 -04:00
|
|
|
redirect_to(artist_path(@avoid_posting.artist), notice: "Avoid posting entry destroyed")
|
2024-08-03 17:15:26 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def delete
|
|
|
|
@avoid_posting.update(is_active: false)
|
2024-08-04 15:35:46 -04:00
|
|
|
redirect_back(fallback_location: avoid_posting_path(@avoid_posting), notice: "Avoid posting entry deleted")
|
2024-08-03 17:15:26 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def undelete
|
|
|
|
@avoid_posting.update(is_active: true)
|
2024-08-04 15:35:46 -04:00
|
|
|
redirect_back(fallback_location: avoid_posting_path(@avoid_posting), notice: "Avoid posting entry undeleted")
|
2024-08-03 17:15:26 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def load_avoid_posting
|
|
|
|
id = params[:id]
|
|
|
|
if id =~ /\A\d+\z/
|
|
|
|
@avoid_posting = AvoidPosting.find(id)
|
|
|
|
else
|
2024-08-04 15:35:46 -04:00
|
|
|
@avoid_posting = AvoidPosting.joins(:artist).find_by!("artists.name": id)
|
2024-08-03 17:15:26 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def search_params
|
2024-08-12 05:39:53 -04:00
|
|
|
permitted_params = %i[creator_name creator_id any_name_matches artist_id artist_name any_other_name_matches group_name details is_active order]
|
2024-08-03 17:15:26 -04:00
|
|
|
permitted_params += %i[staff_notes] if CurrentUser.is_staff?
|
2024-08-04 15:35:46 -04:00
|
|
|
permitted_params += %i[ip_addr] if CurrentUser.is_admin?
|
2024-08-03 17:15:26 -04:00
|
|
|
permit_search_params permitted_params
|
|
|
|
end
|
|
|
|
|
|
|
|
def avoid_posting_params
|
|
|
|
permitted_params = %i[details staff_notes is_active]
|
|
|
|
permitted_params += [artist_attributes: [:id, :name, :other_names_string, :group_name, :linked_user_id, { other_names: [] }]]
|
|
|
|
|
|
|
|
params.fetch(:avoid_posting, {}).permit(permitted_params)
|
|
|
|
end
|
|
|
|
end
|