osem-fcy/app/controllers/admin/emails_controller.rb

98 lines
4.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2014-08-06 21:14:00 +03:00
module Admin
class EmailsController < Admin::BaseController
2014-08-12 11:51:59 +03:00
load_and_authorize_resource :conference, find_by: :short_title
load_and_authorize_resource class: EmailSettings
2013-01-14 08:49:49 +01:00
2014-08-06 21:14:00 +03:00
def update
2016-03-31 16:51:16 +02:00
if @conference.email_settings.update(email_params)
redirect_to admin_conference_emails_path(
@conference.short_title),
notice: 'Email settings have been successfully updated.'
else
redirect_to admin_conference_emails_path(
@conference.short_title),
error: "Updating email settings failed. #{@conference.email_settings.errors.to_a.join('. ')}."
end
2014-08-06 21:14:00 +03:00
end
2013-01-14 08:49:49 +01:00
2014-08-06 21:14:00 +03:00
def index
2014-08-12 11:51:59 +03:00
authorize! :index, @conference.email_settings
2014-08-06 21:14:00 +03:00
@settings = @conference.email_settings
end
2015-10-28 18:05:15 +02:00
2025-10-10 17:16:25 +02:00
def bulk
authorize! :index, @conference.email_settings
@registrations = @conference.registrations.includes(:user, :qanswers)
@questions = @conference.questions.includes(:qanswers)
end
def send_bulk
authorize! :index, @conference.email_settings
subject = params[:subject]
body = params[:body]
filter_type = params[:filter_type]
if subject.blank? || body.blank?
redirect_to bulk_admin_conference_emails_path(@conference.short_title), alert: 'Subject and body are required.'
return
end
recipients = get_filtered_recipients(filter_type)
if recipients.empty?
redirect_to bulk_admin_conference_emails_path(@conference.short_title), alert: 'No recipients found with the selected filter.'
return
end
recipients.each do |user|
Mailbot.bulk_mail(@conference, user, subject, body).deliver_later
end
redirect_to bulk_admin_conference_emails_path(@conference.short_title),
notice: "Bulk email sent to #{recipients.count} recipients."
end
2015-10-28 18:05:15 +02:00
private
2025-10-10 17:16:25 +02:00
def get_filtered_recipients(filter_type)
registrations = @conference.registrations.includes(:user, :qanswers)
case filter_type
when 'no_questions_answered'
registrations.select { |r| r.qanswers.empty? }.map(&:user)
when 'some_questions_answered'
registrations.select { |r| r.qanswers.any? && r.qanswers.count < @conference.questions.count }.map(&:user)
when 'all_questions_answered'
registrations.select { |r| r.qanswers.count >= @conference.questions.count }.map(&:user)
when 'all_registered'
registrations.map(&:user)
else
[]
end
end
def bulk_email_params
params.permit(:subject, :body, :filter_type)
end
2015-10-28 18:05:15 +02:00
def email_params
2018-08-22 16:08:39 +03:00
params.require(:email_settings).permit(:send_on_registration,
:send_on_accepted, :send_on_rejected, :send_on_confirmed_without_registration,
:send_on_submitted_proposal,
:submitted_proposal_subject, :submitted_proposal_body,
2015-10-28 18:05:15 +02:00
:registration_subject, :accepted_subject, :rejected_subject, :confirmed_without_registration_subject,
:registration_body, :accepted_body, :rejected_body, :confirmed_without_registration_body,
:send_on_conference_dates_updated, :conference_dates_updated_subject, :conference_dates_updated_body,
:send_on_conference_registration_dates_updated, :conference_registration_dates_updated_subject, :conference_registration_dates_updated_body,
:send_on_venue_updated, :venue_updated_subject, :venue_updated_body,
2016-03-31 16:51:16 +02:00
:send_on_cfp_dates_updated, :cfp_dates_updated_subject, :cfp_dates_updated_body,
:send_on_program_schedule_public, :program_schedule_public_subject, :program_schedule_public_body,
:send_on_booths_acceptance, :booths_acceptance_subject, :booths_acceptance_body,
:send_on_booths_rejection, :booths_rejection_subject, :booths_rejection_body)
2015-10-28 18:05:15 +02:00
end
2013-01-14 08:49:49 +01:00
end
end