namespace :open_conference_ware do namespace :export do def write_file(name, data) File.open(name,'w') {|f| f.write( data )} end # -[ Speakers ]--------------- namespace :speakers do def speakers scope = ENV["EVENT"] ? Event.find_by_slug(ENV["EVENT"]).proposals : Proposal return scope.confirmed.populated.map(&:users).flatten.sort_by(&:last_name).uniq end desc "Exports basic speaker badge information to speakers.csv" task :brief => :environment do write_file( 'speakers.csv', speakers.to_comma(:brief) ) puts "Basic speaker information written to speakers.csv" end desc "Exports full speaker information to speakers.csv" task :full => :get_speakers do write_file( 'speakers.csv', speakers.to_comma(:full) ) puts "Full speaker information written to speakers.csv" end end desc "See: export:speakers:brief" task :speakers => 'speakers:brief' # -[ Users ]--------------- namespace :users do def users User.order('last_name') end desc "Exports basic user information to users.csv" task :brief => :environment do write_file( 'users.csv', users.to_comma(:brief) ) puts "Basic user information written to users.csv" end desc "Exports full user information to speakers.csv" task :full => :get_speakers do write_file( 'users.csv', users.to_comma(:full) ) puts "Full user information written to users.csv" end end desc "See: export:users:brief" task :users => 'users:brief' # -[ Sessions ]------------ desc "Export session information CSV for schedule monitor cards" task :session_card_csv => :environment do event = ENV['EVENT'].nil? ? OpenConferenceWare::Event.current : OpenConferenceWare::Event.find_by_slug(ENV['EVENT']) CSV.open('session_cards.csv','w') do |csv| csv << %w(room start_time title speakers) event.proposals.confirmed.order('start_time ASC').each do |session| row = [] row << session.room.ergo.name row << session.start_time.strftime("%A, %B %d, %I:%M%p") row << session.title row << session.users.map{|u| u.fullname}.join(', ') csv << row end end end namespace :room_schedule do desc "Export per-room schedule PDF" task :pdf => :environment do event = ENV['EVENT'].nil? ? OpenConferenceWare::Event.current : OpenConferenceWare::Event.find_by_slug(ENV['EVENT']) Prawn::Document.generate('RoomSchedule.pdf', :page_size => 'LETTER', :margin => [18,18,18,18]) do |pdf| pdf.font_families.update( "HelveticaNeueLTPro" => { :bold => "HelveticaNeueLTPro-BdCn.ttf", :normal => "HelveticaNeueLTPro-Lt.ttf", :condensed => "HelveticaNeueLTPro-Cn.ttf", :ltcondensed => "HelveticaNeueLTPro-LtCn.ttf", :boldnormal => "HelveticaNeueLTPro-Bd.ttf", :roman => "HelveticaNeueLTPro-Roman.ttf" }) event.rooms.each do |room| room.proposals.confirmed.group_by{|p| p.start_time.to_date}.each do |day, sessions| pdf.font "HelveticaNeueLTPro", :style => :boldnormal, :size => 30 pdf.fill_color "000000" pdf.text "#{room.name}: #{day.strftime("%A, %B %d, %Y")}", :kerning => true sessions.sort_by{|s| s.start_time }.each do |session| pdf.font "HelveticaNeueLTPro", :style => :boldnormal, :size => 14 pdf.fill_color 88, 55, 0, 0 # speaker blue pdf.text "#{session.start_time.strftime("%I:%M%p").gsub(/^0/,'')} \u002D #{session.end_time.strftime("%I:%M%p").gsub(/^0/,'')}", :kerning => true pdf.font "HelveticaNeueLTPro", :style => :boldnormal, :size => 18 pdf.fill_color "000000" pdf.text session.title, :kerning => true pdf.font "HelveticaNeueLTPro", :style => :boldnormal, :size => 12 pdf.fill_color 74, 0, 44, 0 # volunteer green pdf.text session.users.map{|u| u.fullname}.join(', '), :kerning => true pdf.move_down 2 pdf.font "HelveticaNeueLTPro", :style => :roman, :size => 10 pdf.fill_color "000000" pdf.text session.excerpt, :kerning => true pdf.move_down 15 end pdf.start_new_page end end end end desc "Export per-room schedule CSV" task :csv => :environment do event = ENV['EVENT'].nil? ? OpenConferenceWare::Event.current : OpenConferenceWare::Event.find_by_slug(ENV['EVENT']) CSV.open('RoomSchedule.csv','w') do |csv| csv << ['room', 'day'] + (1..10).map{|n| ["s#{n}_start_time", "s#{n}_end_time", "s#{n}_title", "s#{n}_presenters", "s#{n}_excerpt", "s#{n}_track", "s#{n}_session_type"] }.flatten event.rooms.each do |room| room.proposals.confirmed.group_by{|p| p.start_time.to_date}.each do |day, sessions| row = [] end end end end desc "Export per-room schedule XML" task :xml => :environment do xml = "" xm = Builder::XmlMarkup.new(:target => xml, :indent => 2) event = ENV['EVENT'].nil? ? OpenConferenceWare::Event.current : OpenConferenceWare::Event.find_by_slug(ENV['EVENT']) xm.instruct! xm.Root do event.rooms.each do |room| room.proposals.confirmed.group_by{|p| p.start_time.to_date}.each do |day, sessions| xm.room_schedule do xm.schedule_title "#{room.name}: #{day.strftime("%A, %B %d, %Y")}" sessions.sort_by{|s| s.start_time }.each do |session| xm.session('id' => session.id) do # xm.start_time session.start_time.strftime("%I:%M%p") # xm.end_time session.end_time.strftime("%I:%M%p") xm.start_and_end "#{session.start_time.strftime("%I:%M%p")} - #{session.start_time.strftime("%I:%M%p")}" xm.title session.title xm.presenters session.users.map{|u| u.fullname}.join(', ') xm.excerpt do xm.cdata! session.excerpt end # xm.session_type session.session_type && session.session_type.title # xm.track session.track.title # xm.description session.description end end end end end end File.write('RoomSchedule.xml', xml) end end end end