Restrict offline participation to single-puzzle
Some checks failed
CI / scan_ruby (push) Failing after 17s
CI / scan_js (push) Successful in 13s
CI / lint (push) Successful in 14s
CI / test (push) Has been cancelled

contests
This commit is contained in:
sto
2025-11-07 09:30:04 +01:00
parent ae5082fff6
commit a1736ff076
7 changed files with 20 additions and 9 deletions

View File

@@ -48,7 +48,7 @@ class ContestPolicy < ApplicationPolicy
end end
def offline? def offline?
record.offline_form record.offline_form && record.puzzles.length < 2
end end
def offline_new? def offline_new?

View File

@@ -17,9 +17,18 @@ h4.mt-5 = t("contests.form.general")
= form.label :public = form.label :public
.row.mb-3 .row.mb-3
.col .col
.form-check.form-switch - if @contest.puzzles.length <= 1
= form.check_box :offline_form, class: "form-check-input" .form-check.form-switch
= form.label :offline_form = form.check_box :offline_form, class: "form-check-input"
= form.label :offline_form
.form-text = t("activerecord.attributes.contest.offline_form_warning")
.form-text = t("activerecord.attributes.contest.offline_form_description")
- else
.form-check.form-switch
= form.check_box :offline_form_fake, class: "form-check-input", disabled: true
= form.label :offline_form
.form-text = t("activerecord.attributes.contest.offline_form_warning")
.form-text = t("activerecord.attributes.contest.offline_form_description")
.row.mb-3 .row.mb-3
.col .col
.form-check.form-switch .form-check.form-switch

View File

@@ -29,7 +29,7 @@ javascript:
categorySelectEl.addEventListener('change', (e) => { categorySelectEl.addEventListener('change', (e) => {
updateParams(); updateParams();
}) })
- if @contest.offline_form - if @contest.offline_form && @contest.puzzles.length < 2
.row .row
.col .col
input type="checkbox" id="offline" style="padding: 5px;" input type="checkbox" id="offline" style="padding: 5px;"

View File

@@ -68,7 +68,7 @@ css:
- @contest.puzzles.each do |puzzle| - @contest.puzzles.each do |puzzle|
= image_tag(puzzle.image, class: "img-fluid ms-3 me-3", style: "max-height: 220px") if puzzle.image.attached? = image_tag(puzzle.image, class: "img-fluid ms-3 me-3", style: "max-height: 220px") if puzzle.image.attached?
= render "category_selector" = render "selectors"
.d-flex.flex-column style="overflow-y: auto" .d-flex.flex-column style="overflow-y: auto"
table.table.table-striped.table-hover table.table.table-striped.table-hover

View File

@@ -20,7 +20,7 @@ javascript:
- else - else
a.btn.btn-success.disabled a.btn.btn-success.disabled
= t("contests.show.public_scoreboard_disabled") = t("contests.show.public_scoreboard_disabled")
- if @contest.offline_form - if @contest.offline_form && @contest.puzzles.length < 2
a.ms-3.btn.btn-success href="/public/#{@contest.slug}/offline" a.ms-3.btn.btn-success href="/public/#{@contest.slug}/offline"
= t("contests.show.open_offline_form") = t("contests.show.open_offline_form")
- else - else

View File

@@ -54,7 +54,8 @@ en:
lang: Language for the public scoreboard lang: Language for the public scoreboard
name: Name name: Name
offline_form: Enable the offline participation form offline_form: Enable the offline participation form
offline_form_description: Offline participants will have to fill the form by providing an image taken of the undone puzzle, and validate their finish time with an upload of an image of the completed puzzle offline_form_description: Offline participants will have to fill the form by providing an image taken of the puzzle before starting solving it, and validate their finish time with an upload of an image of the completed puzzle
offline_form_warning: Only for single-puzzle contests
public: Enable the public scoreboard public: Enable the public scoreboard
team: Team contest team: Team contest
team_description: For UI display purposes mainly team_description: For UI display purposes mainly

View File

@@ -25,7 +25,8 @@ fr:
lang: Langue pour le classement public lang: Langue pour le classement public
name: Nom name: Nom
offline_form: Activer le formulaire de participation hors-ligne offline_form: Activer le formulaire de participation hors-ligne
offline_form_description: Les participant.e.s hors-ligne pourront participer en prenant une photo du puzzle non fait, puis valider leur temps avec une photo du puzzle une fois complété offline_form_description: Les participant.e.s hors-ligne pourront participer en prenant une photo du puzzle avant de le commencer, puis valider leur temps avec une photo du puzzle une fois complété
offline_form_warning: Activable uniquement pour les concours avec un seul puzzle
public: Activer le classement public public: Activer le classement public
team: Concours par équipes team: Concours par équipes
team_description: Principalement pour des raisons d'affichage team_description: Principalement pour des raisons d'affichage