Rework of completion forms
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-08-11 09:26:42 +02:00
parent 84e3424fcf
commit 5dd8e97c6b
6 changed files with 193 additions and 67 deletions

View File

@@ -14,7 +14,6 @@ class CompletionsController < ApplicationController
authorize @contest
@completion = Completion.new
@completion.completed = true
if params[:contestant_id]
@completion.contestant_id = params[:contestant_id]
end
@@ -25,6 +24,8 @@ class CompletionsController < ApplicationController
@completion = Completion.new(completion_params)
@completion.contest = @contest
process_completion
if @completion.save
extend_completions!(@completion.contestant)
if @contestant && !params[:completion].key?(:message_id)
@@ -44,7 +45,10 @@ class CompletionsController < ApplicationController
authorize @contest
@completion.contestant_id = params[:contestant_id] if params[:contestant_id]
if @completion.update(completion_params)
@completion.update(completion_params)
process_completion
if @completion.update({})
extend_completions!(@completion.contestant)
if @contestant
redirect_to edit_contest_contestant_path(@contest, @contestant), notice: t("completions.edit.notice")
@@ -59,7 +63,9 @@ class CompletionsController < ApplicationController
def destroy
authorize @contest
contestant = @completion.contestant
@completion.destroy
extend_completions!(contestant)
if params[:contestant_id]
redirect_to contest_contestant_path(@contest, params[:contestant_id]), notice: t("completions.destroy.notice")
else

View File

@@ -41,6 +41,27 @@ module CompletionsConcern
else
contestant.update(display_time: display_time(completions[0].time_seconds), time_seconds: completions[0].time_seconds)
end
else
contestant.update(display_time: nil, time_seconds: nil)
end
end
def process_completion
if params.key?(:completed_radio) && params[:completed_radio] == "yes"
@completion.completed = true
end
if params.key?(:completed_radio) && params[:completed_radio] == "no"
@completion.completed = false
end
if params.key?(:pieces_radio)
@pieces_radio = params[:pieces_radio]
end
if @pieces_radio == "assembled"
begin
puzzle = Puzzle.find(@completion.puzzle_id)
@completion.remaining_pieces = puzzle.pieces - @completion.remaining_pieces
rescue
end
end
end
end

View File

@@ -221,10 +221,9 @@ class ContestantsController < ApplicationController
@contest = @contestant.contest
@puzzles = @contest.puzzles.where(hidden: false).or(@contest.puzzles.where(hidden: nil)).order(:id)
@completion = Completion.new
@completion.completed = true
@completion.code = @contest.code
render "completions/_form", locals: { completion: @completion, submit_text: t("helpers.buttons.create"), method: :post, url: "/public/p/#{params[:contestant_id]}" }
render "completions/_form", locals: { completion: @completion, submit_text: t("helpers.buttons.validate"), method: :post, url: "/public/p/#{params[:contestant_id]}" }
end
def post_public_completion
@@ -245,12 +244,14 @@ class ContestantsController < ApplicationController
@completion.contest = @contest
@completion.contestant = @contestant
process_completion
if @completion.save
extend_completions!(@completion.contestant)
redirect_to "/public/p/#{params[:contestant_id]}/updated"
else
@puzzles = @contest.puzzles
render "completions/_form", locals: { completion: @completion, submit_text: t("helpers.buttons.create"), method: :post, url: "/public/p/#{params[:contestant_id]}" }, status: :unprocessable_entity
render "completions/_form", locals: { completion: @completion, submit_text: t("helpers.buttons.validate"), method: :post, url: "/public/p/#{params[:contestant_id]}" }, status: :unprocessable_entity
end
end