diff --git a/app/assets/javascripts/fullcalendar.js b/app/assets/javascripts/fullcalendar.js index ad054c3f..3a0d88ac 100644 --- a/app/assets/javascripts/fullcalendar.js +++ b/app/assets/javascripts/fullcalendar.js @@ -6,6 +6,7 @@ $( document ).ready(function() { var calendar = new FullCalendar.Calendar(calendarEl, { schedulerLicenseKey: fullcalData.data('schedulerLicenseKey'), nowIndicator: true, + now: fullcalData.data('now'), expandRows: true, allDaySlot: false, slotMinTime: fullcalData.data('startHour') + ':00:00', @@ -14,7 +15,7 @@ $( document ).ready(function() { start: fullcalData.data('startDate'), end: fullcalData.data('endDate') }, - timeZone: 'UTC', // TODO: Events are stored in conference's timezone implicitly (UTC+0) in the database + timeZone: fullcalData.data('timezone'), initialDate: fullcalData.data('day'), initialView: 'resourceTimeGridDay', resources: fullcalData.data('rooms'), diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index 757ac9ad..3ada7d70 100644 --- a/app/controllers/schedules_controller.rb +++ b/app/controllers/schedules_controller.rb @@ -94,6 +94,7 @@ class SchedulesController < ApplicationController @rooms = FullCalendarFormatter.rooms_to_resources(@conference.venue.rooms) if @conference.venue @event_schedules = FullCalendarFormatter.event_schedules_to_resources(event_schedules) + @now = Time.now.in_time_zone(@conference.timezone).strftime('%FT%T%:z') @scheduler_license_key = Rails.configuration.fullcalendar[:license_key] end diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index f8a41d64..7be7a7d2 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -133,6 +133,14 @@ class EventSchedule < ApplicationRecord other.schedule_id == schedule_id end + def start_time_in_conference_timezone + time_in_conference_timezone(start_time) + end + + def end_time_in_conference_timezone + time_in_conference_timezone(end_time) + end + private def replaced_event_schedules @@ -187,4 +195,10 @@ class EventSchedule < ApplicationRecord errors.add(:schedule, "must be one of #{event.track.name} track's schedules") unless event.track.schedules.include?(schedule) end + + def time_in_conference_timezone(time) + time_in_tz = time.in_time_zone(timezone) + time_in_tz -= time_in_tz.utc_offset + time_in_tz + end end diff --git a/app/services/full_calendar_formatter.rb b/app/services/full_calendar_formatter.rb index 30f504f4..499b8e04 100644 --- a/app/services/full_calendar_formatter.rb +++ b/app/services/full_calendar_formatter.rb @@ -29,8 +29,8 @@ class FullCalendarFormatter { id: event_schedule.event.guid, title: event_schedule.event.title, - start: event_schedule.start_time, - end: event_schedule.end_time, + start: event_schedule.start_time_in_conference_timezone, + end: event_schedule.end_time_in_conference_timezone, resourceId: event_schedule.room.guid, url: url, borderColor: event_type_color, diff --git a/app/views/schedules/vertical_schedule.haml b/app/views/schedules/vertical_schedule.haml index b238b1a6..6e8be368 100644 --- a/app/views/schedules/vertical_schedule.haml +++ b/app/views/schedules/vertical_schedule.haml @@ -8,6 +8,6 @@ #vert-schedule-full-calendar #fullcalendar{ data: { rooms: @rooms, events: @event_schedules, day: @day, 'start-hour': @conference.start_hour, 'end-hour': @conference.end_hour, - 'start-date': @conference.start_date, - 'end-date': @conference.end_date + 1.day, + 'start-date': @conference.start_date, 'end-date': @conference.end_date + 1.day, + 'timezone': @conference.timezone, 'now': @now, 'scheduler-license-key': @scheduler_license_key } } diff --git a/spec/services/full_calendar_formatter_spec.rb b/spec/services/full_calendar_formatter_spec.rb index 0fb1c649..63af2d08 100644 --- a/spec/services/full_calendar_formatter_spec.rb +++ b/spec/services/full_calendar_formatter_spec.rb @@ -45,8 +45,8 @@ describe FullCalendarFormatter do { id: event_schedule1.event.guid, title: event_schedule1.event.title, - start: event_schedule1.start_time, - end: event_schedule1.end_time, + start: event_schedule1.start_time_in_conference_timezone, + end: event_schedule1.end_time_in_conference_timezone, resourceId: room1.guid, url: Rails.application.routes.url_helpers.conference_program_proposal_path(conference.short_title, event1.id), borderColor: event1.event_type.color, @@ -56,8 +56,8 @@ describe FullCalendarFormatter do { id: event_schedule2.event.guid, title: event_schedule2.event.title, - start: event_schedule2.start_time, - end: event_schedule2.end_time, + start: event_schedule2.start_time_in_conference_timezone, + end: event_schedule2.end_time_in_conference_timezone, resourceId: room2.guid, url: Rails.application.routes.url_helpers.conference_program_proposal_path(conference.short_title, event2.id), borderColor: event2.event_type.color,