otwarchive-symphonyarchive/app/controllers/invite_requests_controller.rb

125 lines
3.8 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
class InviteRequestsController < ApplicationController
before_action :admin_only, only: [:manage, :destroy]
# GET /invite_requests
# Set browser page title to Invitation Requests
def index
@invite_request = InviteRequest.new
@page_subtitle = t(".page_title")
end
# GET /invite_requests/1
def show
@invite_request = InviteRequest.find_by(email: params[:email])
if @invite_request.present?
@position_in_queue = @invite_request.position
else
@invitation = Invitation.unredeemed.from_queue.find_by(invitee_email: params[:email])
end
respond_to do |format|
format.html
format.js
end
end
def resend
@invitation = Invitation.unredeemed.from_queue.find_by(invitee_email: params[:email])
if @invitation.nil?
flash[:error] = t("invite_requests.resend.not_found")
elsif !@invitation.can_resend?
flash[:error] = t("invite_requests.resend.not_yet",
count: ArchiveConfig.HOURS_BEFORE_RESEND_INVITATION)
else
@invitation.send_and_set_date(resend: true)
if @invitation.errors.any?
flash[:error] = @invitation.errors.full_messages.first
else
flash[:notice] = t("invite_requests.resend.success", email: @invitation.invitee_email)
end
end
redirect_to status_invite_requests_path
end
# POST /invite_requests
def create
unless AdminSetting.current.invite_from_queue_enabled?
flash[:error] = t(".queue_disabled.html",
closed_bold: helpers.tag.strong(t("invite_requests.create.queue_disabled.closed")),
news_link: helpers.link_to(t("invite_requests.create.queue_disabled.news"), admin_posts_path(tag: 143)))
redirect_to invite_requests_path
return
end
@invite_request = InviteRequest.new(invite_request_params)
@invite_request.ip_address = request.remote_ip
if @invite_request.save
flash[:notice] = t(".success",
date: l(@invite_request.proposed_fill_time.to_date, format: :long),
return_address: ArchiveConfig.RETURN_ADDRESS)
redirect_to invite_requests_path
else
render action: :index
end
end
def manage
authorize(InviteRequest)
@invite_requests = InviteRequest.all
if params[:query].present?
query = "%#{params[:query]}%"
@invite_requests = InviteRequest.where(
"simplified_email LIKE ? OR ip_address LIKE ?",
query, query
)
# Keep track of the fact that this has been filtered, so the position
# will not cleanly correspond to the page that we're on and the index of
# the request on the page:
@filtered = true
end
@invite_requests = @invite_requests.order(:id).page(params[:page])
end
def destroy
@invite_request = InviteRequest.find(params[:id])
authorize @invite_request
if @invite_request.destroy
success_message = ts("Request for %{email} was removed from the queue.", email: @invite_request.email)
respond_to do |format|
format.html { redirect_to manage_invite_requests_path(page: params[:page], query: params[:query]), notice: success_message }
format.json { render json: { item_success_message: success_message }, status: :ok }
end
else
error_message = ts("Request could not be removed. Please try again.")
respond_to do |format|
format.html do
flash.keep
redirect_to manage_invite_requests_path(page: params[:page], query: params[:query]), flash: { error: error_message }
end
format.json { render json: { errors: error_message }, status: :unprocessable_entity }
end
end
end
def status
@page_subtitle = t(".browser_title")
end
private
def invite_request_params
params.require(:invite_request).permit(
:email, :query
)
end
end