105 lines
3.6 KiB
Ruby
105 lines
3.6 KiB
Ruby
|
|
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
|