otwarchive-symphonyarchive/app/controllers/external_authors_controller.rb

105 lines
3.6 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class ExternalAuthorsController < ApplicationController
before_action :load_user
before_action :check_ownership, only: [:edit]
before_action :check_user_status, only: [:edit]
before_action :get_external_author_from_invitation, only: [:claim, :complete_claim]
before_action :users_only, only: [:complete_claim]
def load_user
@user = User.find_by(login: params[:user_id])
@check_ownership_of = @user
end
def index
if @user && current_user == @user
@external_authors = @user.external_authors
elsif logged_in? && current_user.archivist
@external_authors = ExternalCreatorship.where(archivist_id: current_user).collect(&:external_author).uniq
elsif logged_in?
redirect_to user_external_authors_path(current_user)
else
flash[:notice] = "You can't see that information."
redirect_to root_path
end
end
def edit
@external_author = ExternalAuthor.find(params[:id])
end
def get_external_author_from_invitation
token = params[:invitation_token] || (params[:user] && params[:user][:invitation_token])
@invitation = Invitation.find_by(token: token)
unless @invitation
flash[:error] = ts("You need an invitation to do that.")
redirect_to root_path
return
end
@external_author = @invitation.external_author
return if @external_author
flash[:error] = ts("There are no stories to claim on this invitation. Did you want to sign up instead?")
redirect_to signup_path(@invitation.token)
end
def claim
end
def complete_claim
# go ahead and give the user the works
@external_author.claim!(current_user)
@invitation.mark_as_redeemed(current_user) if @invitation
flash[:notice] = t('external_author_claimed', default: "We have added the stories imported under %{email} to your account.", email: @external_author.email)
redirect_to user_external_authors_path(current_user)
end
def update
@invitation = Invitation.find_by(token: params[:invitation_token])
@external_author = ExternalAuthor.find(params[:id])
unless (@invitation && @invitation.external_author == @external_author) || @external_author.user == current_user
flash[:error] = "You don't have permission to do that."
redirect_to root_path
return
end
flash[:notice] = ""
if params[:imported_stories] == "nothing"
flash[:notice] += "Okay, we'll leave things the way they are! You can use the email link any time if you change your mind. "
elsif params[:imported_stories] == "orphan"
# orphan the works
@external_author.orphan(params[:remove_pseud])
flash[:notice] += "Your imported stories have been orphaned. Thank you for leaving them in the archive! "
elsif params[:imported_stories] == "delete"
# delete the works
@external_author.delete_works
flash[:notice] += "Your imported stories have been deleted. "
end
if @invitation &&
params[:imported_stories].present? &&
params[:imported_stories] != "nothing"
@invitation.mark_as_redeemed
end
if @external_author.update(external_author_params[:external_author] || {})
flash[:notice] += "Your preferences have been saved."
redirect_to @user ? user_external_authors_path(@user) : root_path
else
flash[:error] = "There were problems saving your preferences."
render action: "edit"
end
end
private
def external_author_params
params.permit(
:id, :user_id, :utf8, :_method, :authenticity_token, :invitation_token,
:imported_stories, :commit, :remove_pseud,
external_author: [
:email, :do_not_email, :do_not_import
]
)
end
end