Add contestant export feature
Some checks failed
CI / scan_ruby (push) Failing after 1m5s
CI / scan_js (push) Successful in 13s
CI / lint (push) Successful in 13s
CI / test (push) Successful in 36s

This commit is contained in:
sto
2025-10-28 10:19:19 +01:00
parent 916c7af738
commit 1fa7bf10ec
7 changed files with 27 additions and 1 deletions

View File

@@ -111,6 +111,19 @@ class ContestantsController < ApplicationController
end
end
def export
authorize @contest
@contestants = @contest.contestants.sort_by { |contestant| [ -contestant.completions.size, contestant.time_seconds ] }
respond_to do |format|
format.csv do
response.headers["Content-Type"] = "text/csv"
response.headers["Content-Disposition"] = "attachment; filename=export.csv"
end
end
end
private
def set_contest

View File

@@ -43,6 +43,10 @@ class ContestPolicy < ApplicationPolicy
record.user.id == user.id || user.admin?
end
def export?
record.user.id == user.id || user.admin?
end
def scoreboard?
true
end

View File

@@ -0,0 +1,4 @@
= CSV.generate_line [t("helpers.rank"), t("activerecord.attributes.contestant.name"), t("activerecord.attributes.contestant.display_time"), t("activerecord.attributes.contestant.completions")]
- @contestants.each_with_index do |contestant, index|
= CSV.generate_line([index + 1, contestant.name, contestant.display_time, contestant.completions.length])

View File

@@ -40,8 +40,10 @@ javascript:
= t("contestants.plural").capitalize
a.ms-3.btn.btn-sm.btn-primary href=new_contest_contestant_path(@contest) style="margin-top: -3px"
| + #{t("helpers.buttons.add")}
a.ms-2.btn-sm.btn.btn-primary href=contest_import_path(@contest) style="margin-top: -3px"
a.ms-2.btn.btn-sm.btn.btn-primary href=contest_import_path(@contest) style="margin-top: -3px"
| #{t("helpers.buttons.import")}
a.ms-2.btn.btn-sm.btn.btn-primary href="/contests/#{@contest.id}/export.csv" style="margin-top: -3px"
| #{t("helpers.buttons.export")}
- if @contest.categories.size > 0
.row
.col

View File

@@ -204,6 +204,7 @@ en:
create: "Create"
delete: "Delete"
edit: "Edit"
export: Export
import: CSV Import
open: Open
refresh: Refresh

View File

@@ -175,6 +175,7 @@ fr:
create: "Créer"
delete: "Supprimer"
edit: "Modifier"
export: Exporter
import: Importer un CSV
open: Détails
refresh: Rafraîchir

View File

@@ -20,6 +20,7 @@ Rails.application.routes.draw do
post "import", to: "contestants#upload_csv"
get "import/:id", to: "contestants#convert_csv"
post "import/:id", to: "contestants#finalize_import"
get "export", to: "contestants#export"
end
resources :passwords, param: :token
resource :session