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