# 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