Events: implement creation of new contests
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled

This commit is contained in:
sto
2026-07-28 13:13:46 +02:00
parent 75784fec65
commit d52a058328
5 changed files with 25 additions and 5 deletions

View File

@@ -10,7 +10,7 @@ class ContestsController < ApplicationController
def index def index
authorize :contest authorize :contest
@contests = current_user.contests.includes([ :contestants, puzzles: [ :image_attachment ] ]).order(created_at: :desc) @contests = current_user.contests.where(event: nil).includes([ :contestants, puzzles: [ :image_attachment ] ]).order(created_at: :desc)
@title = I18n.t("contests.index.title", username: current_user.username) @title = I18n.t("contests.index.title", username: current_user.username)
end end
@@ -125,6 +125,9 @@ class ContestsController < ApplicationController
authorize :contest authorize :contest
@contest = Contest.new @contest = Contest.new
if params.key?(:event)
@contest.event_id = params[:event]
end
@title = I18n.t("contests.new.title") @title = I18n.t("contests.new.title")
@nonav = true @nonav = true
end end
@@ -136,6 +139,18 @@ class ContestsController < ApplicationController
@contest.lang = @current_user.lang @contest.lang = @current_user.lang
@contest.ranking_mode = "actual" @contest.ranking_mode = "actual"
@contest.user_id = current_user.id @contest.user_id = current_user.id
# Check if the provided event_id exists and belongs to the current user. If not, remove
# the link to the event.
begin
event = Event.find(@contest.event_id)
if current_user != event.user
@contest.event_id = nil
end
rescue
@contest.event_id = nil
end
if @contest.save if @contest.save
redirect_to "/contests/#{@contest.id}/settings/general", notice: t("contests.new.notice") redirect_to "/contests/#{@contest.id}/settings/general", notice: t("contests.new.notice")
else else
@@ -274,7 +289,7 @@ class ContestsController < ApplicationController
end end
def new_contest_params def new_contest_params
params.expect(contest: [ :name, :duration ]) params.expect(contest: [ :name, :duration, :event_id ])
end end
def settings_general_params def settings_general_params

View File

@@ -1,4 +1,5 @@
= form_with model: @contest do |form| = form_with model: @contest do |form|
= form.hidden_field :event_id
.row.mb-3 .row.mb-3
.col .col
.form-floating .form-floating

View File

@@ -1,10 +1,10 @@
.row .row
.col .col
h4.mb-3 h4.mb-3
= t("contests.index.manage_contests") = t("events.index.manage_contests")
.float-end .float-end
a.btn.btn-primary.mb-4 href=new_contest_path a.btn.btn-primary.mb-4 href=new_contest_path(event: @event.id)
= t("contests.index.new_contest") = t("events.index.new_contest")
.row.row-cols-1.row-cols-md-3.g-4 .row.row-cols-1.row-cols-md-3.g-4
- @contests.each do |contest| - @contests.each do |contest|

View File

@@ -293,9 +293,11 @@ en:
index: index:
contest: contest contest: contest
contests: contests contests: contests
manage_contests: Contests in this event
message: New feature! Events offer to groupe multiple contests in one management space. This also offers, if activated, to have a single scoreboard link for all contests of an event. message: New feature! Events offer to groupe multiple contests in one management space. This also offers, if activated, to have a single scoreboard link for all contests of an event.
my_contests_outside_events: My contests not linked to any event my_contests_outside_events: My contests not linked to any event
new: Create a new event new: Create a new event
new_contest: Add a contest to this event
subtitle: My events subtitle: My events
title: Welcome %{username}! title: Welcome %{username}!
new: new:

View File

@@ -264,9 +264,11 @@ fr:
index: index:
contest: épreuve contest: épreuve
contests: épreuves contests: épreuves
manage_contests: Épreuves de cet événement
message: Nouvelle fonctionalité ! Les événements permettent de regrouper plusieurs concours/épreuves en un seul espace de gestion. Cela permet aussi, si souhaité, d'avoir un lien de classement commun à toutes les épreuces d'un même événement. message: Nouvelle fonctionalité ! Les événements permettent de regrouper plusieurs concours/épreuves en un seul espace de gestion. Cela permet aussi, si souhaité, d'avoir un lien de classement commun à toutes les épreuces d'un même événement.
my_contests_outside_events: Mes concours non associés à un événement my_contests_outside_events: Mes concours non associés à un événement
new: Créer un nouvel événement new: Créer un nouvel événement
new_contest: Ajouter une épreuve à cet événement
subtitle: Mes événements subtitle: Mes événements
title: Bienvenue %{username} ! title: Bienvenue %{username} !
new: new: