otwarchive-symphonyarchive/app/controllers/creatorships_controller.rb

73 lines
2.2 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
# frozen_string_literal: true
# A controller for viewing co-creator requests -- that is, creatorships where
# the creator hasn't yet approved it.
class CreatorshipsController < ApplicationController
before_action :load_user
before_action :check_ownership
# Show all of the creatorships associated with the current user. Displays a
# form where the user can select multiple creatorships and perform actions
# (accept, reject) in bulk.
def show
@page_subtitle = ts("Co-Creator Requests")
@creatorships = @creatorships.unapproved.order(id: :desc).
paginate(page: params[:page])
end
# Update the selected creatorships.
def update
@creatorships = @creatorships.where(id: params[:selected])
if params[:accept]
accept_update
elsif params[:reject]
reject_update
end
redirect_to user_creatorships_path(@user, page: params[:page])
end
private
# When the user presses "Accept" on the co-creator request listing, this is
# the code that runs.
def accept_update
flash[:notice] = []
@creatorships.each do |creatorship|
creatorship.accept!
link = view_context.link_to(title_for_creation(creatorship.creation),
creatorship.creation)
flash[:notice] << ts("You are now listed as a co-creator on %{link}.",
link: link).html_safe
end
end
# When the user presses "Reject" on the co-creator request listing, this is
# the code that runs. Note that rejection is equivalent to destroying the
# request.
def reject_update
@creatorships.each(&:destroy)
flash[:notice] = ts("Requests rejected.")
end
# A helper method used to display a nicely formatted title for a creation.
helper_method :title_for_creation
def title_for_creation(creation)
if creation.is_a?(Chapter)
"Chapter #{creation.position} of #{creation.work.title}"
else
creation.title
end
end
# Load the user, and set @creatorships equal to all co-creator requests for
# that user.
def load_user
@user = User.find_by!(login: params[:user_id])
@check_ownership_of = @user
@creatorships = Creatorship.unapproved.for_user(@user)
end
end