73 lines
2.2 KiB
Ruby
73 lines
2.2 KiB
Ruby
|
|
# 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
|