diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index 35e6b709..7f3bbfbd 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -61,11 +61,7 @@ class ConferencesController < ApplicationController @booths = @conference.confirmed_booths.order('title') end if splashpage.include_happening_now - events_schedules_list = get_happening_now_events_schedules(@conference) - @events_schedules_limit = EVENTS_PER_PAGE - @events_schedules_length = events_schedules_list.length - @pagy, @events_schedules = pagy_array(events_schedules_list, items: @events_schedules_limit, link_extra: 'data-remote="true"') - @happening_now_url = happening_now_conference_schedule_path(conference_id: @conference.short_title, format: :json) + load_happening_now end end if splashpage.include_registrations || splashpage.include_tickets @@ -151,4 +147,17 @@ class ConferencesController < ApplicationController def current_user_has_unpaid_tickets? current_user && current_user_tickets.unpaid.any? end + + def load_happening_now + events_schedules_list = get_happening_now_events_schedules(@conference) + @is_happening_next = false + if events_schedules_list.empty? + events_schedules_list = get_happening_next_events_schedules(@conference) + @is_happening_next = true + end + @events_schedules_limit = EVENTS_PER_PAGE + @events_schedules_length = events_schedules_list.length + @pagy, @events_schedules = pagy_array(events_schedules_list, items: @events_schedules_limit, link_extra: 'data-remote="true"') + @happening_now_url = happening_now_conference_schedule_path(conference_id: @conference.short_title, format: :json) + end end diff --git a/app/helpers/conference_helper.rb b/app/helpers/conference_helper.rb index cf2c06ce..9c22ac5f 100644 --- a/app/helpers/conference_helper.rb +++ b/app/helpers/conference_helper.rb @@ -85,4 +85,20 @@ module ConferenceHelper events_schedules ||= [] events_schedules end + + def get_happening_next_events_schedules(conference) + events_schedules = conference.program.selected_event_schedules( + includes: [:room, { event: %i[track event_type speakers submitter] }] + ).select(&:happening_next?) + + 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 end diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 036a89f2..4ab7baad 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -70,6 +70,14 @@ class EventSchedule < ApplicationRecord event_time_range.overlaps?(now_range) end + def happening_next? + # TODO: Save start_time with local timezone info when making an event schedule + in_tz_start = start_time.in_time_zone(timezone) + in_tz_start -= in_tz_start.utc_offset + + in_tz_start >= Time.now + end + def self.withdrawn_or_canceled_event_schedules(schedule_ids) EventSchedule .unscoped diff --git a/app/views/conferences/_about_and_happening_now.haml b/app/views/conferences/_about_and_happening_now.haml index c048b28d..ead36206 100644 --- a/app/views/conferences/_about_and_happening_now.haml +++ b/app/views/conferences/_about_and_happening_now.haml @@ -3,7 +3,8 @@ = render 'happening_now', conference: conference, events_schedules: events_schedules, pagy: pagy, events_schedules_length: events_schedules_length, - events_schedules_limit: events_schedules_limit + events_schedules_limit: events_schedules_limit, + is_happening_next: is_happening_next = content_for :about do #about diff --git a/app/views/conferences/_happening_now.haml b/app/views/conferences/_happening_now.haml index 66355a82..61ef9e83 100644 --- a/app/views/conferences/_happening_now.haml +++ b/app/views/conferences/_happening_now.haml @@ -1,7 +1,11 @@ - if conference.splashpage.include_program && conference.splashpage.include_happening_now - if events_schedules.any? .row - %h2.text-center{ style: 'margin-bottom:30px' } Happening Now + %h2.text-center{ style: 'margin-bottom:30px' } + - if is_happening_next + Happening Next + - else + Happening Now - events_schedules.each do |event_schedule| = render 'schedules/event', conference: conference, event_schedule: event_schedule, event: event_schedule.event, is_brief: true - if events_schedules_length > events_schedules_limit diff --git a/app/views/conferences/show.html.haml b/app/views/conferences/show.html.haml index 3a73c0b0..21581351 100644 --- a/app/views/conferences/show.html.haml +++ b/app/views/conferences/show.html.haml @@ -49,7 +49,8 @@ = render 'about_and_happening_now', conference: @conference, events_schedules: @events_schedules, pagy: @pagy, events_schedules_length: @events_schedules_length, - events_schedules_limit: @events_schedules_limit + events_schedules_limit: @events_schedules_limit, + is_happening_next: @is_happening_next -# calls for content, or program - if @conference.splashpage.include_cfp diff --git a/lib/tasks/demo_data_for_development.rake b/lib/tasks/demo_data_for_development.rake index b3e15ae1..026f3e20 100644 --- a/lib/tasks/demo_data_for_development.rake +++ b/lib/tasks/demo_data_for_development.rake @@ -1,4 +1,5 @@ # frozen_string_literal: true + require 'webmock' namespace :data do