osem-fcy/app/helpers/conference_helper.rb

108 lines
3.3 KiB
Ruby

# frozen_string_literal: true
DEFAULT_LOGO = Rails.configuration.conference[:default_logo_filename]
DEFAULT_COLOR = Rails.configuration.conference[:default_color]
module ConferenceHelper
# Return true if only call_for_papers or call_for_tracks or call_for_booths is open
def one_call_open(*calls)
calls.one? { |call| call.try(:open?) }
end
# Return true if exactly two of those calls are open: call_for_papers , call_for_tracks , call_for_booths
def two_calls_open(*calls)
calls.count{ |call| call.try(:open?) } == 2
end
# URL for sponsorship emails
def sponsorship_mailto(conference)
[
'mailto:',
conference.contact.sponsor_email,
'?subject=',
url_encode(conference.short_title),
'%20Sponsorship'
].join
end
def short_ticket_description(ticket)
return unless ticket.description
markdown(ticket.description.split("\n").first&.strip)
end
def conference_logo_url(conference)
if conference.picture.present?
conference.picture.thumb.url
elsif conference.organization.picture.present?
conference.organization.picture.thumb.url
else
DEFAULT_LOGO
end
end
def conference_color(conference)
if conference.color.present?
conference.color
else
DEFAULT_COLOR
end
end
# adds events to icalendar for proposals in a conference
def icalendar_proposals(calendar, proposals, conference)
proposals.each do |proposal|
calendar.event do |e|
e.dtstart = proposal.time
e.dtend = proposal.time + proposal.event_type.length * 60
e.duration = "PT#{proposal.event_type.length}M"
e.created = proposal.created_at
e.last_modified = proposal.updated_at
e.summary = proposal.title
e.description = proposal.abstract
e.uid = proposal.guid
e.url = conference_program_proposal_url(conference.short_title, proposal.id)
v = conference.venue
if v
e.geo = v.latitude, v.longitude if v.latitude && v.longitude
location = ''
location += "#{proposal.room.name} - " if proposal.room.name
location += " - #{v.street}, " if v.street
location += "#{v.postalcode} #{v.city}, " if v.postalcode && v.city
location += "#{v.country_name}, " if v.country_name
e.location = location
end
e.categories = conference.title, "Difficulty: #{proposal.difficulty_level.title}", "Track: #{proposal.track.name}"
end
end
calendar
end
def get_happening_now_events_schedules(conference)
events_schedules = filter_events_schedules(conference, :happening_now?)
events_schedules ||= []
events_schedules
end
def get_happening_next_events_schedules(conference)
events_schedules = filter_events_schedules(conference, :happening_later?)
if events_schedules.empty?
return []
end
# events_schedules have been sorted by start_time in selected_event_schedules
happening_next_time = events_schedules[0].start_time
events_schedules = events_schedules.select { |s| s.start_time == happening_next_time }
events_schedules
end
private
def filter_events_schedules(conference, filter)
conference.program.selected_event_schedules(
includes: [:room, { event: %i[track event_type speakers submitter] }]
).select(&filter)
end
end