Class: Cms::FeedbackFormsController

Inherits:
ContentBlockController
  • Object
show all
Defined in:
app/controllers/cms/feedback_forms_controller.rb

Instance Method Summary collapse

Instance Method Details

#downloadObject



3
4
5
6
# File 'app/controllers/cms/feedback_forms_controller.rb', line 3

def download
  @feedback_form = FeedbackForm.find(params[:id])
  render_csv(@feedback_form.feedback_submissions)
end

#render_csv(objects) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/controllers/cms/feedback_forms_controller.rb', line 8

def render_csv(objects)
  columns = {}
  rows = []

  # Iterate through to find all the possible columns, just in case multiple versions of a form have been submitted.
  objects.each do |obj|
    next if obj.feedback_content.blank?
    row = YAML.load(obj.feedback_content)
    next if row.blank?
    rows << row
    row['user_agent'] = obj.user_agent
    row['ip_address'] = obj.ip_address
    row.keys.each do |column|
      columns[column] = 1
    end
  end

  csv_output = ''
  sorted_columns = columns.keys.sort
  CSV::Writer.generate(csv_output) do |csv|
    csv << sorted_columns
    rows.each do |row|
      row_array = []
      sorted_columns.each do |col|
        row_array << row[col] || ''
      end
      csv << row_array
    end
  end
  send_data(csv_output,
            :type => 'application/octet-stream',
            :filename => "feedback-submissions-#{Time.now.to_s(:number)}.csv")
end