From 597381f2877a38f0c01de9097877db3db300dafd Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 22 Aug 2022 10:23:33 +0100 Subject: [PATCH 1/4] Add BOMs before CSV info --- app/controllers/case_logs_controller.rb | 3 ++- app/controllers/organisations_controller.rb | 6 ++++-- app/controllers/users_controller.rb | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 740dd2003..60ef7af3b 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -13,6 +13,7 @@ class CaseLogsController < ApplicationController all_logs = current_user.case_logs unpaginated_filtered_logs = filtered_case_logs(filtered_collection(all_logs, search_term)) + byte_order_mark = "\uFEFF" respond_to do |format| format.html do @@ -22,7 +23,7 @@ class CaseLogsController < ApplicationController end format.csv do - send_data unpaginated_filtered_logs.to_csv, filename: "logs-#{Time.zone.now}.csv" + send_data byte_order_mark + unpaginated_filtered_logs.to_csv, filename: "logs-#{Time.zone.now}.csv" end end end diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index cb600b004..c12c1856b 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -31,6 +31,7 @@ class OrganisationsController < ApplicationController def users organisation_users = @organisation.users.sorted_by_organisation_and_role unpaginated_filtered_users = filtered_collection(organisation_users, search_term) + byte_order_mark = "\uFEFF" respond_to do |format| format.html do @@ -45,7 +46,7 @@ class OrganisationsController < ApplicationController end end format.csv do - send_data unpaginated_filtered_users.to_csv, filename: "users-#{@organisation.name}-#{Time.zone.now}.csv" + send_data byte_order_mark + unpaginated_filtered_users.to_csv, filename: "users-#{@organisation.name}-#{Time.zone.now}.csv" end end end @@ -93,6 +94,7 @@ class OrganisationsController < ApplicationController organisation_logs = CaseLog.all.where(owning_organisation_id: @organisation.id) unpaginated_filtered_logs = filtered_case_logs(filtered_collection(organisation_logs, search_term)) + byte_order_mark = "\uFEFF" respond_to do |format| format.html do @@ -103,7 +105,7 @@ class OrganisationsController < ApplicationController end format.csv do - send_data unpaginated_filtered_logs.to_csv, filename: "logs-#{@organisation.name}-#{Time.zone.now}.csv" + send_data byte_order_mark + unpaginated_filtered_logs.to_csv, filename: "logs-#{@organisation.name}-#{Time.zone.now}.csv" end end else diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cd82742b6..b06b13feb 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -12,6 +12,8 @@ class UsersController < ApplicationController all_users = User.sorted_by_organisation_and_role filtered_users = filtered_users(all_users, search_term) + byte_order_mark = "\uFEFF" + @pagy, @users = pagy(filtered_users) @searched = search_term.presence @total_count = all_users.size @@ -20,7 +22,7 @@ class UsersController < ApplicationController format.html format.csv do if current_user.support? - send_data filtered_users.to_csv, filename: "users-#{Time.zone.now}.csv" + send_data byte_order_mark + filtered_users.to_csv, filename: "users-#{Time.zone.now}.csv" else head :unauthorized end From ff77c4c8bf407e731c48b8dce72a147564fa0beb Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 22 Aug 2022 11:24:10 +0100 Subject: [PATCH 2/4] add BOM to tests --- spec/requests/case_logs_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/case_logs_controller_spec.rb b/spec/requests/case_logs_controller_spec.rb index 4ca219c67..5c4ce4dca 100644 --- a/spec/requests/case_logs_controller_spec.rb +++ b/spec/requests/case_logs_controller_spec.rb @@ -755,7 +755,7 @@ RSpec.describe CaseLogsController, type: :request do it "downloads a CSV file with headers" do csv = CSV.parse(response.body) - expect(csv.first.first).to eq("id") + expect(csv.first.first).to eq("\uFEFFid") expect(csv.second.first).to eq(case_log.id.to_s) end From 8a712bacedc985dbc2ecf31ce8744250872e3f33 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 22 Aug 2022 12:19:52 +0100 Subject: [PATCH 3/4] DRYing --- app/controllers/application_controller.rb | 4 ++++ app/controllers/case_logs_controller.rb | 1 - app/controllers/organisations_controller.rb | 2 -- app/controllers/users_controller.rb | 1 - 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 78b367d80..5685796af 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -14,4 +14,8 @@ protected def user_for_paper_trail current_user end + + def byte_order_mark + "\uFEFF" + end end diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 1fd035ce7..a9b927725 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -13,7 +13,6 @@ class CaseLogsController < ApplicationController all_logs = current_user.case_logs unpaginated_filtered_logs = filtered_case_logs(filtered_collection(all_logs, search_term)) - byte_order_mark = "\uFEFF" respond_to do |format| format.html do diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index c12c1856b..81ba4f737 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -31,7 +31,6 @@ class OrganisationsController < ApplicationController def users organisation_users = @organisation.users.sorted_by_organisation_and_role unpaginated_filtered_users = filtered_collection(organisation_users, search_term) - byte_order_mark = "\uFEFF" respond_to do |format| format.html do @@ -94,7 +93,6 @@ class OrganisationsController < ApplicationController organisation_logs = CaseLog.all.where(owning_organisation_id: @organisation.id) unpaginated_filtered_logs = filtered_case_logs(filtered_collection(organisation_logs, search_term)) - byte_order_mark = "\uFEFF" respond_to do |format| format.html do diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b06b13feb..5ba0a7438 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -12,7 +12,6 @@ class UsersController < ApplicationController all_users = User.sorted_by_organisation_and_role filtered_users = filtered_users(all_users, search_term) - byte_order_mark = "\uFEFF" @pagy, @users = pagy(filtered_users) @searched = search_term.presence From 2905f06c884998009a9ee3c311ceebd00bb62e81 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 22 Aug 2022 12:26:19 +0100 Subject: [PATCH 4/4] remove added blank line --- app/controllers/users_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 5ba0a7438..9ab691a53 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -12,7 +12,6 @@ class UsersController < ApplicationController all_users = User.sorted_by_organisation_and_role filtered_users = filtered_users(all_users, search_term) - @pagy, @users = pagy(filtered_users) @searched = search_term.presence @total_count = all_users.size