1require 'csv'
 
2
 
3class Archived::PetitionsController < ApplicationController
 
4  before_action :redirect_to_valid_state, only: [:index]
 
5  before_action :fetch_parliament, only: [:index]
 
6  before_action :fetch_petitions, only: [:index]
 
7  before_action :fetch_petition, only: [:show]
 
8
 
 9  before_action :set_cors_headers, only: [:index, :show], if: :json_request?
 
10  after_action :set_content_disposition, if: :csv_request?, only: [:index]
 
 
12  helper_method :archived_petition_facets
 
 
14  def index
 
15    respond_to do |format|
 
16      format.html
 
17      format.json
 
18      format.csv
 
19    end
 
20  end
 
 
22  def show
 
23    respond_to do |format|
 
24      format.html
 
25      format.json
 
26    end
 
27  end
 
 
29  private
 
 
31  def parliament_id
 
32    params[:parliament].to_i
 
33  end
 
 
35  def petition_id
 
36    params[:id].to_i
 
37  end
 
 
39  def fetch_parliament
 
40    if params.key?(:parliament)
 
41      @parliament = Parliament.archived.find(parliament_id)
 
42    else
 
43      @parliament = Parliament.archived.first
 
44    end
 
45  end
 
 
47  def fetch_petitions
 
48    @petitions = @parliament.petitions.search(params)
 
49  end
 
 
51  def fetch_petition
 
52    @petition = Archived::Petition.visible.find(petition_id)
 
53    @parliament = @petition.parliament
 
 
55    unless @parliament.archived?
 
56      redirect_to petition_url(petition_id)
 
57    end
 
58  end
 
 
60  def csv_filename
 
61    "#{@petitions.scope}-petitions-#{@parliament.period}.csv"
 
62  end
 
 
64  def redirect_to_valid_state
 
65    if state_present? && !valid_state?
 
66      redirect_to archived_petitions_url(search_params(state: :all))
 
67    end
 
68  end
 
 
70  def state_present?
 
71    params[:state].present?
 
72  end
 
 
74  def valid_state?
 
75    archived_petition_facets.include?(params[:state].to_sym)
 
76  end
 
 
78  def search_params(overrides = {})
 
79    params.permit(:page, :parliament, :q, :state).merge(overrides)
 
80  end
 
 
82  def archived_petition_facets
 
83    I18n.t :archived, scope: :"petitions.facets", default: []
 
84  end
 
 
86  def set_content_disposition
 
87    response.headers['Content-Disposition'] = "attachment; filename=#{csv_filename}"
 
88  end
 
89end