diff --git a/app/jobs/regular/export_csv_file.rb b/app/jobs/regular/export_csv_file.rb index 6e4a0b7979e..70aee66d36b 100644 --- a/app/jobs/regular/export_csv_file.rb +++ b/app/jobs/regular/export_csv_file.rb @@ -21,17 +21,13 @@ module Jobs when 'user' query = ::AdminUserIndexQuery.new user_data = query.find_users_query.to_a - - data = Hash.new do |hash, key| - hash[key] = {} - end + data = Array.new user_data.each do |user| - id = user['id'] - email = user['email'] - data[id] = email + user_array = Array.new + user_array.push(user['id']).push(user['name']).push(user['username']).push(user['email']) + data.push(user_array) end - data = data.to_a end if data && data.length > 0 @@ -55,7 +51,7 @@ module Jobs # write to CSV file CSV.open(File.expand_path("#{ExportCsv.base_directory}/#{@file_name}", __FILE__), "w") do |csv| data.each do |value| - csv << [value[1]] + csv << value end end end diff --git a/app/jobs/scheduled/clean_up_exports.rb b/app/jobs/scheduled/clean_up_exports.rb new file mode 100644 index 00000000000..27469d10a96 --- /dev/null +++ b/app/jobs/scheduled/clean_up_exports.rb @@ -0,0 +1,9 @@ +module Jobs + class CleanUpExports < Jobs::Scheduled + every 2.day + + def execute(args) + ExportCsv.remove_old_exports # delete exported CSV files older than 2 days + end + end +end diff --git a/app/jobs/scheduled/weekly.rb b/app/jobs/scheduled/weekly.rb index 9a079efb05e..156cfd74e45 100644 --- a/app/jobs/scheduled/weekly.rb +++ b/app/jobs/scheduled/weekly.rb @@ -11,7 +11,6 @@ module Jobs Post.calculate_avg_time Topic.calculate_avg_time ScoreCalculator.new.calculate - ExportCsv.remove_old_exports # delete exported CSV files older than 2 days end end end diff --git a/app/models/export_csv.rb b/app/models/export_csv.rb index ffebf6c1eee..034ce40e4f7 100644 --- a/app/models/export_csv.rb +++ b/app/models/export_csv.rb @@ -10,10 +10,12 @@ class ExportCsv end def self.remove_old_exports - dir = Dir.new(ExportCsv.base_directory) - dir.each do |file| - if (File.mtime(File.join(ExportCsv.base_directory, file)) < 2.days.ago) - File.delete(File.join(ExportCsv.base_directory, file)) + if Dir.exists?(ExportCsv.base_directory) + dir = Dir.new(ExportCsv.base_directory) + dir.each do |file| + if (File.mtime(File.join(ExportCsv.base_directory, file)) < 2.days.ago) + File.delete(File.join(ExportCsv.base_directory, file)) + end end end end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 91932a880e4..4f13c4f1c90 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1407,6 +1407,8 @@ en: Download CSV file: %{file_name} + CSV file download link will expire after 48 hours. + csv_export_failed: subject_template: "Export failed" text_body_template: "The export has failed. Please check the logs." diff --git a/spec/jobs/clean_up_exports_spec.rb b/spec/jobs/clean_up_exports_spec.rb new file mode 100644 index 00000000000..b418c8539d3 --- /dev/null +++ b/spec/jobs/clean_up_exports_spec.rb @@ -0,0 +1,9 @@ +require 'spec_helper' + +require_dependency 'jobs/scheduled/clean_up_exports' + +describe Jobs::CleanUpExports do + it "runs correctly without crashing" do + Jobs::CleanUpExports.new.execute(nil) + end +end