diff --git a/app/models/event.rb b/app/models/event.rb index 1e118095..47978416 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -223,6 +223,12 @@ class Event < ActiveRecord::Base (100 * result.values.count(true) / result.values.compact.count).to_s end + ## + # Returns the slug of an event + def slugify + "#{self.id}-#{self.title.downcase.gsub(/[^a-z1-9]+/, '-').chomp('-')}" + end + private ## diff --git a/app/models/event_type.rb b/app/models/event_type.rb index 9a5c4c84..50cfd34e 100644 --- a/app/models/event_type.rb +++ b/app/models/event_type.rb @@ -12,6 +12,13 @@ class EventType < ActiveRecord::Base LENGTH_STEP = 15 + ## + # Return the length in timestamp format (HH:MM) + # + def length_timestamp + [self.length / 60, self.length % 60].map { |t| t.to_s.rjust(2,'0') }.join(':') + end + private ## diff --git a/app/views/conference/_all_days.xml.haml b/app/views/conference/_all_days.xml.haml new file mode 100644 index 00000000..cee04c0c --- /dev/null +++ b/app/views/conference/_all_days.xml.haml @@ -0,0 +1,3 @@ +- @conference.program.events.group_by{ |event| event.start_time.to_date }.each_with_index do | day, index | + %day{ :date => day[0], :index => index+1 } + =render 'all_rooms', :events => day[1] diff --git a/app/views/conference/_all_rooms.xml.haml b/app/views/conference/_all_rooms.xml.haml new file mode 100644 index 00000000..add6f789 --- /dev/null +++ b/app/views/conference/_all_rooms.xml.haml @@ -0,0 +1,4 @@ +- events.group_by{ |event| event.room }.each do | room | + %room{ :name => room[0].name } + - room[1].each do | event | + = render 'event', :event => event diff --git a/app/views/conference/_event.xml.haml b/app/views/conference/_event.xml.haml new file mode 100644 index 00000000..f915d202 --- /dev/null +++ b/app/views/conference/_event.xml.haml @@ -0,0 +1,20 @@ +- event.public? + %event{ :guid => event.guid, :id => event.id } + %date=event.start_time.iso8601 + %start=event.start_time.strftime("%H:%M") + %duration=event.event_type.length_timestamp + %room=event.room.name + %type=event.event_type.name + %language="en" ## fix me, add language property to Event/Conference? + %slug=event.slugify + %title=event.title + %subtitle=event.subtitle + %track=event.track.name + %abstract=event.abstract + %recording + %license/ + %optout=false #fixme + %persons + - event.speakers.uniq.each do | speaker | + %person{ :id => speaker.id}= speaker.name + diff --git a/app/views/conference/schedule.xml.haml b/app/views/conference/schedule.xml.haml new file mode 100644 index 00000000..9c688dc0 --- /dev/null +++ b/app/views/conference/schedule.xml.haml @@ -0,0 +1,11 @@ +%schedule + %version=@conference.revision + %conference + %acronym=@conference.short_title + %title=@conference.title + %start=@conference.start_date + %end=@conference.end_date + %days=(@conference.end_date - @conference.start_date).to_i + 1 + %timeslot_duration="00:15" ## fixme + - if not @conference.venue.nil? and @conference.venue.rooms.any? + = render 'all_days'