Implement track scheduling
Add track association to schedule Show schedules in admin sidebar to track organizers Allow track organizers to manage the schedules of their tracks Don't allow self-organized track events to be dragged or unscheduled in a conference schedule Make scheduled events of self-organized tracks appear semitransparent in conference schedules Make the rooms of confirmed self_organized tracks appear semitransparent and don't allow events to be scheduled to it in the conference schedules during the dates of its track Create admin/SchedulesController#new action Add a button in admin/Schedules#index to create schedules for tracks Add self_organized scope to Track Modify Schedules#show to handle track schedules and show a unified schedule Allow track organizers to create new schedules for their tracks Correctly identify scheduled and unscheduled events in Schedules#events Fix Event#room and Event#time for when the event is scheduled in a track schedule Modify Program#selected_event_schedules to include the event_schedules of selected track schedules Modify Track#revoke_role_and_cleanup to destroy the track's schedules and revert its events' state to new Add tabs for conference and track schedules in admin/Schedules#index Add button to Create/Show a tracks schedule in Tracks#index and #show Fix concurrent_events in application_helper because of changes in Program#selected_event_schedules Do not take into account cfp_active in Event#valid_track Modify EventsController#get_tracks accordingly Enforce cfp_active of track to be enabled for proposals in ProposalsController#create and #update Add support for multiple schedules per track Add selected_schedule_id to Track Load EventSchedules of selected track schedules for conference schedules in admin/SchedulesController#show Modify SchedulesController#show to take into account only the selected track schedules Create Event#selected_schedule_id and use it in Event#scheduled? and Event#time Validate that an EventSchedule for an event of a self-organized track belongs to one of the track's schedules Add 'Manage' button in Tracks#index, #show that sends you to the admin side of things Add admin/TracksController#update_selected_schedule to update the selected_schedule_id of tracks
This commit is contained in:
parent
af7efdb6fe
commit
7eea930269
37 changed files with 443 additions and 118 deletions
|
|
@ -7,7 +7,9 @@ class Track < ActiveRecord::Base
|
|||
belongs_to :program
|
||||
belongs_to :submitter, class_name: 'User'
|
||||
belongs_to :room
|
||||
belongs_to :selected_schedule, class_name: 'Schedule'
|
||||
has_many :events, dependent: :nullify
|
||||
has_many :schedules
|
||||
|
||||
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
||||
|
|
@ -38,6 +40,7 @@ class Track < ActiveRecord::Base
|
|||
scope :accepted, -> { where(state: 'accepted') }
|
||||
scope :confirmed, -> { where(state: 'confirmed') }
|
||||
scope :cfp_active, -> { where(cfp_active: true) }
|
||||
scope :self_organized, -> { where.not(submitter: nil) }
|
||||
|
||||
state_machine initial: :pending do
|
||||
state :new
|
||||
|
|
@ -102,7 +105,10 @@ class Track < ActiveRecord::Base
|
|||
submitter.add_role 'track_organizer', self
|
||||
end
|
||||
|
||||
# Revokes the track organizer role and removes the track from events that have it set
|
||||
##
|
||||
# Revokes the track organizer role, destroys the track's schedule, removes the
|
||||
# track from events that have it set and reverts their state to new
|
||||
#
|
||||
def revoke_role_and_cleanup
|
||||
role = Role.find_by(name: 'track_organizer', resource: self)
|
||||
|
||||
|
|
@ -112,8 +118,14 @@ class Track < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
self.selected_schedule_id = nil
|
||||
save!
|
||||
|
||||
schedules.each(&:destroy!)
|
||||
|
||||
events.each do |event|
|
||||
event.track = nil
|
||||
event.state = 'new'
|
||||
event.save!
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue