discourse/plugins/discourse-narrative-bot/lib/discourse_narrative_bot/certificate_generator.rb
2023-01-07 11:11:37 +00:00

81 lines
1.9 KiB
Ruby

# frozen_string_literal: true
module DiscourseNarrativeBot
class CertificateGenerator
def initialize(user, date, avatar_url)
@user = user
@avatar_url = avatar_url
date =
begin
Date.parse(date)
rescue ArgumentError => e
if e.message == "invalid date"
Date.parse(Date.today.to_s)
else
raise e
end
end
@date = I18n.l(date, format: :date_only)
@discobot_user = ::DiscourseNarrativeBot::Base.new.discobot_user
end
def new_user_track
svg_default_width = 538.583
logo_container = logo_group(55, svg_default_width, 280)
ApplicationController.render(
inline: read_template("new_user"),
assigns: assign_options(svg_default_width, logo_container),
)
end
def advanced_user_track
svg_default_width = 722.8
logo_container = logo_group(40, svg_default_width, 350)
ApplicationController.render(
inline: read_template("advanced_user"),
assigns: assign_options(svg_default_width, logo_container),
)
end
private
def read_template(filename)
File.read(File.expand_path("../templates/#{filename}.svg.erb", __FILE__))
end
def assign_options(width, logo_group)
{
width: width,
discobot_user: @discobot_user,
date: @date,
avatar_url: @avatar_url,
logo_group: logo_group,
name: name,
}
end
def name
@user.username.titleize
end
def logo_group(size, width, height)
return unless SiteSetting.site_logo_small_url.present?
uri = URI(SiteSetting.site_logo_small_url)
logo_uri =
if uri.host.blank? || uri.scheme.blank?
URI("#{Discourse.base_url}/#{uri.path}")
else
uri
end
{ size: size, width: width, height: height, logo_uri: logo_uri }
end
end
end