diff --git a/app/controllers/admin/events_controller.rb b/app/controllers/admin/events_controller.rb
index abe426b8..94b9653a 100644
--- a/app/controllers/admin/events_controller.rb
+++ b/app/controllers/admin/events_controller.rb
@@ -23,11 +23,22 @@ module Admin
@tracks_distribution_confirmed = @conference.tracks_distribution(:confirmed)
@event_distribution = @conference.event_distribution
@scheduled_event_distribution = @conference.scheduled_event_distribution
+ @file_name = "events_for_#{@conference.short_title}"
+ @event_export_option = params[:event_export_option]
respond_to do |format|
format.html
# Explicity call #to_json to avoid the use of EventSerializer
format.json { render json: Event.where(state: :confirmed, program: @program).to_json }
+ format.xlsx do
+ response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\""
+ render 'events'
+ end
+ format.pdf {render 'events'}
+ format.csv do
+ response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\""
+ render 'events'
+ end
end
end
diff --git a/app/views/admin/comments/index.html.haml b/app/views/admin/comments/index.html.haml
index 9a141c85..dd504f65 100644
--- a/app/views/admin/comments/index.html.haml
+++ b/app/views/admin/comments/index.html.haml
@@ -1,6 +1,9 @@
-%h1 Comments
-%br
.row
+ .col-md-12
+ .page-header
+ %h1
+ Comments
+ = "(#{@comments.length})" if @comments.any?
.col-md-12
%ul.nav.nav-tabs#commentsTable
%li.active
diff --git a/app/views/admin/events/_all_events.csv.haml b/app/views/admin/events/_all_events.csv.haml
new file mode 100644
index 00000000..b61859da
--- /dev/null
+++ b/app/views/admin/events/_all_events.csv.haml
@@ -0,0 +1,19 @@
+- headers = ['Event ID',
+ 'Title',
+ 'Abstract',
+ 'Start time',
+ 'Submitter',
+ 'Speaker',
+ 'Event Type',
+ 'Track',
+ 'Difficulty Level',
+ 'Room',
+ 'State']
+= CSV.generate_line ["All Events"]
+= CSV.generate_line headers
+- @events.each do |event|
+ = CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
+ event.submitter.name, event.speaker_names, event.event_type.title,
+ (event.track.present? ? event.track.name : ''),
+ (event.difficulty_level.present? ? event.difficulty_level.title : ''),
+ (event.room.present? ? event.room.name : ''), event.state]).html_safe
diff --git a/app/views/admin/events/_all_events.pdf.prawn b/app/views/admin/events/_all_events.pdf.prawn
new file mode 100644
index 00000000..e53a1018
--- /dev/null
+++ b/app/views/admin/events/_all_events.pdf.prawn
@@ -0,0 +1,34 @@
+prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
+ events_array = []
+ header_array = ['Event ID',
+ 'Title',
+ 'Abstract',
+ 'Start time',
+ 'Submitter',
+ 'Speaker',
+ 'Event Type',
+ 'Track',
+ 'Difficulty Level',
+ 'Room',
+ 'State'
+ ]
+ events_array << header_array
+ @events.each do |event|
+ row = []
+ row << event.id
+ row << event.title
+ row << event.abstract
+ row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
+ row << event.submitter.name
+ row << event.speaker_names
+ row << event.event_type.title
+ row << (event.track.present? ? event.track.name : '')
+ row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
+ row << (event.room.present? ? event.room.name : '')
+ row << event.state
+ events_array << row
+ end
+
+ pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
+ pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1}
+end
diff --git a/app/views/admin/events/_all_events.xlsx.axlsx b/app/views/admin/events/_all_events.xlsx.axlsx
new file mode 100644
index 00000000..66232784
--- /dev/null
+++ b/app/views/admin/events/_all_events.xlsx.axlsx
@@ -0,0 +1,21 @@
+wb.add_worksheet(name: 'all events') do |sheet|
+ bold_style = wb.styles.add_style(b: true)
+ row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State']
+ sheet.add_row row, style: bold_style
+
+ @events.each do |event|
+ row = []
+ row << event.id
+ row << event.title
+ row << event.abstract
+ row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
+ row << event.submitter.name
+ row << event.speaker_names
+ row << event.event_type.title
+ row << (event.track.present? ? event.track.name : '')
+ row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
+ row << (event.room.present? ? event.room.name : '')
+ row << event.state
+ sheet.add_row row
+ end
+end
diff --git a/app/views/admin/events/_all_with_comments.csv.haml b/app/views/admin/events/_all_with_comments.csv.haml
new file mode 100644
index 00000000..cdf79339
--- /dev/null
+++ b/app/views/admin/events/_all_with_comments.csv.haml
@@ -0,0 +1,23 @@
+- headers = ['Event ID',
+ 'Title',
+ 'Abstract',
+ 'Start time',
+ 'Submitter',
+ 'Speaker',
+ 'Event Type',
+ 'Track',
+ 'Difficulty Level',
+ 'Room',
+ 'State',
+ 'Comments']
+= CSV.generate_line ["Events with Comments"]
+= CSV.generate_line headers
+- @events.each do |event|
+ - all_comments = ''
+ - event.root_comments.each do |comment|
+ - all_comments << "#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}\n"
+ = CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
+ event.submitter.name, event.speaker_names, event.event_type.title,
+ (event.track.present? ? event.track.name : ''),
+ (event.difficulty_level.present? ? event.difficulty_level.title : ''),
+ (event.room.present? ? event.room.name : ''), event.state, all_comments]).html_safe
diff --git a/app/views/admin/events/_all_with_comments.pdf.prawn b/app/views/admin/events/_all_with_comments.pdf.prawn
new file mode 100644
index 00000000..2df27759
--- /dev/null
+++ b/app/views/admin/events/_all_with_comments.pdf.prawn
@@ -0,0 +1,53 @@
+prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
+ events_array = []
+ header_array = ['Event ID',
+ 'Title',
+ 'Abstract',
+ 'Start time',
+ 'Submitter',
+ 'Speaker',
+ 'Event Type',
+ 'Track',
+ 'Difficulty Level',
+ 'Room',
+ 'State'
+ ]
+ events_array << header_array
+ @events.each do |event|
+ row = []
+ row << event.id
+ row << event.title
+ row << event.abstract
+ row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
+ row << event.submitter.name
+ row << event.speaker_names
+ row << event.event_type.title
+ row << (event.track.present? ? event.track.name : '')
+ row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
+ row << (event.room.present? ? event.room.name : '')
+ row << event.state
+ events_array << row
+ end
+
+ pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
+ pdf.move_down 10
+ pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1, position: :center}
+ pdf.start_new_page
+ pdf.text "#{@conference.short_title} Comments", font_size: 25, align: :center
+ pdf.move_down 20
+ @events.each do |event|
+ if event.root_comments.any?
+ if event.time.present?
+ pdf.text "#{event.title} by #{event.speaker_names} on #{event.time.strftime("%m/%d/%Y")} at #{event.time.strftime("%I:%M%p")} ", inline_format: true
+ else
+ pdf.text "#{event.title} by #{event.speaker_names} ", inline_format: true
+ end
+ pdf.move_down 5
+ event.root_comments.each do |comment|
+ pdf.text " #{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}", font_size: 10, style: :normal, inline_format: true, align: :justify
+ pdf.move_down 3
+ end
+ pdf.move_down 20
+ end
+ end
+end
diff --git a/app/views/admin/events/_all_with_comments.xlsx.axlsx b/app/views/admin/events/_all_with_comments.xlsx.axlsx
new file mode 100644
index 00000000..038dfea5
--- /dev/null
+++ b/app/views/admin/events/_all_with_comments.xlsx.axlsx
@@ -0,0 +1,28 @@
+wb.use_shared_strings = true
+wb.add_worksheet(name: 'events with comments') do |sheet|
+ bold_style = wb.styles.add_style(b: true )
+ cell_style = wb.styles.add_style(alignment: { wrap_text: true, vertical: :top })
+row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State', 'Comments']
+ sheet.add_row row, style: bold_style
+
+ @events.each do |event|
+ all_comments = ''
+ event.root_comments.each do |comment|
+ all_comments << "#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}\n"
+ end
+ row = []
+ row << event.id
+ row << event.title
+ row << event.abstract
+ row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
+ row << event.submitter.name
+ row << event.speaker_names
+ row << event.event_type.title
+ row << (event.track.present? ? event.track.name : '')
+ row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
+ row << (event.room.present? ? event.room.name : '')
+ row << event.state
+ row << all_comments.strip
+ sheet.add_row row, style: cell_style
+ end
+end
diff --git a/app/views/admin/events/_confirmed_events.csv.haml b/app/views/admin/events/_confirmed_events.csv.haml
new file mode 100644
index 00000000..4edbbaa3
--- /dev/null
+++ b/app/views/admin/events/_confirmed_events.csv.haml
@@ -0,0 +1,19 @@
+- headers = ['Event ID',
+ 'Title',
+ 'Abstract',
+ 'Start time',
+ 'Submitter',
+ 'Speaker',
+ 'Event Type',
+ 'Track',
+ 'Difficulty Level',
+ 'Room',
+ 'State']
+= CSV.generate_line ["Confirmed Events"]
+= CSV.generate_line headers
+- @events.confirmed.each do |event|
+ = CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
+ event.submitter.name, event.speaker_names, event.event_type.title,
+ (event.track.present? ? event.track.name : ''),
+ (event.difficulty_level.present? ? event.difficulty_level.title : ''),
+ (event.room.present? ? event.room.name : ''), event.state]).html_safe
diff --git a/app/views/admin/events/_confirmed_events.pdf.prawn b/app/views/admin/events/_confirmed_events.pdf.prawn
new file mode 100644
index 00000000..ea838b94
--- /dev/null
+++ b/app/views/admin/events/_confirmed_events.pdf.prawn
@@ -0,0 +1,35 @@
+prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
+ events_array = []
+ header_array = ['Event ID',
+ 'Title',
+ 'Abstract',
+ 'Start time',
+ 'Submitter',
+ 'Speaker',
+ 'Event Type',
+ 'Track',
+ 'Difficulty Level',
+ 'Room',
+ 'State'
+ ]
+ events_array << header_array
+ @events.confirmed.each do |event|
+ row = []
+ row << event.id
+ row << event.title
+ row << event.abstract
+ row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
+ row << event.submitter.name
+ row << event.speaker_names
+ row << event.event_type.title
+ row << (event.track.present? ? event.track.name : '')
+ row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
+ row << (event.room.present? ? event.room.name : '')
+ row << event.state
+ events_array << row
+ end
+
+ pdf.text "#{@conference.short_title} Confirmed Events", font_size: 25, align: :center
+ pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1}
+
+end
diff --git a/app/views/admin/events/_confirmed_events.xlsx.axlsx b/app/views/admin/events/_confirmed_events.xlsx.axlsx
new file mode 100644
index 00000000..34c40b36
--- /dev/null
+++ b/app/views/admin/events/_confirmed_events.xlsx.axlsx
@@ -0,0 +1,21 @@
+wb.add_worksheet(name: 'confirmed events') do |sheet|
+ bold_style = wb.styles.add_style(b: true)
+ row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State']
+ sheet.add_row row, style: bold_style
+
+ @events.confirmed.each do |event|
+ row = []
+ row << event.id
+ row << event.title
+ row << event.abstract
+ row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
+ row << event.submitter.name
+ row << event.speaker_names
+ row << event.event_type.title
+ row << (event.track.present? ? event.track.name : '')
+ row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
+ row << (event.room.present? ? event.room.name : '')
+ row << event.state
+ sheet.add_row row
+ end
+end
diff --git a/app/views/admin/events/events.csv.haml b/app/views/admin/events/events.csv.haml
new file mode 100644
index 00000000..e440a49e
--- /dev/null
+++ b/app/views/admin/events/events.csv.haml
@@ -0,0 +1,6 @@
+- if @event_export_option == 'confirmed'
+ = render 'confirmed_events'
+- elsif @event_export_option == 'all'
+ = render 'all_events'
+- elsif @event_export_option == 'all_with_comments'
+ = render 'all_with_comments'
diff --git a/app/views/admin/events/events.pdf.prawn b/app/views/admin/events/events.pdf.prawn
new file mode 100644
index 00000000..65813f3c
--- /dev/null
+++ b/app/views/admin/events/events.pdf.prawn
@@ -0,0 +1,7 @@
+if @event_export_option == 'confirmed'
+ render 'confirmed_events'
+elsif @event_export_option == 'all'
+ render 'all_events'
+elsif @event_export_option == 'all_with_comments'
+ render 'all_with_comments'
+end
diff --git a/app/views/admin/events/events.xlsx.axlsx b/app/views/admin/events/events.xlsx.axlsx
new file mode 100644
index 00000000..abfd1365
--- /dev/null
+++ b/app/views/admin/events/events.xlsx.axlsx
@@ -0,0 +1,8 @@
+wb = xlsx_package.workbook
+if @event_export_option == 'confirmed'
+ render partial: 'confirmed_events', locals: {:wb => wb}
+elsif @event_export_option == 'all'
+ render partial: 'all_events', locals: {:wb => wb}
+elsif @event_export_option == 'all_with_comments'
+ render partial: 'all_with_comments', locals: {:wb => wb}
+end
diff --git a/app/views/admin/events/index.html.haml b/app/views/admin/events/index.html.haml
index 75349458..4fbad664 100644
--- a/app/views/admin/events/index.html.haml
+++ b/app/views/admin/events/index.html.haml
@@ -3,8 +3,33 @@
.page-header
%h1
Events
- - if @events.any?
- = "(#{@events.length})"
+ = "(#{@events.length})" if @events.any?
+ .btn-group.pull-right
+ - if can? :read, Event
+ .btn-group
+ %button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", :type => "button", :class => 'btn btn-success'}
+ Export PDF
+ %span.caret
+ %ul.dropdown-menu{:role => "menu"}
+ %li= link_to 'All Events', admin_conference_program_events_path(@conference.short_title, format: :pdf, event_export_option: 'all')
+ %li= link_to 'Confirmed Events', admin_conference_program_events_path(@conference.short_title, format: :pdf, event_export_option: 'confirmed')
+ %li= link_to 'All Events with Comments', admin_conference_program_events_path(@conference.short_title, format: :pdf, event_export_option: 'all_with_comments')
+ .btn-group
+ %button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", :type => "button", :class => 'btn btn-success'}
+ Export CSV
+ %span.caret
+ %ul.dropdown-menu{:role => "menu"}
+ %li= link_to 'All', admin_conference_program_events_path(@conference.short_title, format: :csv, event_export_option: 'all')
+ %li= link_to 'Confirmed', admin_conference_program_events_path(@conference.short_title, format: :csv, event_export_option: 'confirmed')
+ %li= link_to 'All with Comments', admin_conference_program_events_path(@conference.short_title, format: :csv, event_export_option: 'all_with_comments')
+ .btn-group
+ %button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", :type => "button", :class => 'btn btn-success'}
+ Export XLS
+ %span.caret
+ %ul.dropdown-menu{:role => "menu"}
+ %li= link_to 'All', admin_conference_program_events_path(@conference.short_title, format: :xlsx, event_export_option: 'all')
+ %li= link_to 'Confirmed', admin_conference_program_events_path(@conference.short_title, format: :xlsx, event_export_option: 'confirmed')
+ %li= link_to 'All with Comments', admin_conference_program_events_path(@conference.short_title, format: :xlsx, event_export_option: 'all_with_comments')
%p.text-muted
All the submissions of your speakers
.row