diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index 8ded131c0..2bfb6dbff 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -1,9 +1,13 @@ module Admin class ContactVersionsController < BaseController + include ApplicationHelper include ObjectVersionsHelper load_and_authorize_resource class: Version::ContactVersion + MODEL = Contact + CSV_HEADER = ['Name', 'ID', 'Ident', 'Registrar', 'Action', 'Created at'].freeze + def index params[:q] ||= {} @@ -56,5 +60,19 @@ module Admin def create_where_string(key, value) " AND object->>'#{key}' ~* '#{value}'" end + + private + + def render_by_format(page, filename) + respond_to do |format| + format.html { render page } + format.csv do + raw_csv = csv_generate(MODEL, CSV_HEADER) + send_data raw_csv, + filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end + end end end diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 8cc69d619..7dacecb8f 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -4,6 +4,9 @@ module Admin load_and_authorize_resource class: Version::DomainVersion + MODEL = Domain + CSV_HEADER = ['Name', 'Registrant', 'Registrar', 'Action', 'Created at'].freeze + def index params[:q] ||= {} @@ -93,7 +96,7 @@ module Admin respond_to do |format| format.html { render page } format.csv do - raw_csv = csv_generate + raw_csv = csv_generate(MODEL, CSV_HEADER) send_data raw_csv, filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv", type: "#{Mime[:csv]}; charset=utf-8" diff --git a/app/helpers/object_versions_helper.rb b/app/helpers/object_versions_helper.rb index d4baadd45..65b54f71e 100644 --- a/app/helpers/object_versions_helper.rb +++ b/app/helpers/object_versions_helper.rb @@ -13,15 +13,15 @@ module ObjectVersionsHelper version.object.to_h.select { |key, _value| field_names.include?(key) } end - def csv_generate + def csv_generate(model, header) CSV.generate do |csv| - csv << CSV_HEADER + csv << header @versions.each do |version| - attributes = only_present_fields(version, Domain) - domain = Domain.new(attributes) - attach_existing_fields(version, domain) unless version.event == 'destroy' + attributes = only_present_fields(version, model) + history_object = model.new(attributes) + attach_existing_fields(version, history_object) unless version.event == 'destroy' - csv << create_row(domain, version) + csv << create_row(history_object, version) end end end @@ -46,10 +46,28 @@ module ObjectVersionsHelper end end - def create_row(domain, version) - name = domain.name - registrant = registrant_name(domain, version) - registrar = domain.registrar + def create_row(history_object, version) + if history_object.is_a?(Domain) + domain_history_row(history_object, version) + else + contact_history_row(history_object, version) + end + end + + def contact_history_row(history_object, version) + name = history_object.name + code = history_object.code + ident = ident_for(history_object) + registrar = history_object.registrar + event = version.event + created_at = version.created_at.to_formatted_s(:db) + [name, code, ident, registrar, event, created_at] + end + + def domain_history_row(history_object, version) + name = history_object.name + registrant = registrant_name(history_object, version) + registrar = history_object.registrar event = version.event created_at = version.created_at.to_formatted_s(:db) [name, registrant, registrar, event, created_at]