[feat]Splashpage will display happening next event if no event is happening now

This commit is contained in:
Jimmy 2021-04-17 00:00:52 +08:00
parent 19af4e4f12
commit 2f8cee3c4f
No known key found for this signature in database
GPG key ID: FAE75C760A4A5CC6
7 changed files with 48 additions and 8 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,4 +1,5 @@
# frozen_string_literal: true
require 'webmock'
namespace :data do