|
|
|
@ -178,64 +178,70 @@ class ChallengesController < ApplicationController
|
|
|
|
|
|
|
|
|
|
# tab 0:过关任务的更新; 1:评测设置的更新; 2:表示参考答案的更新;
|
|
|
|
|
def update
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
tab = params[:tab].to_i
|
|
|
|
|
@challenge.update_attributes(challenge_params)
|
|
|
|
|
if tab == 0 && @challenge.st == 0
|
|
|
|
|
@challenge.challenge_tags.delete_all
|
|
|
|
|
if params[:challenge_tag].present?
|
|
|
|
|
params[:challenge_tag].each do |input|
|
|
|
|
|
ChallengeTag.create!(:name => input, :challenge_id => @challenge.id)
|
|
|
|
|
begin
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
tab = params[:tab].to_i
|
|
|
|
|
@challenge.update_attributes(challenge_params)
|
|
|
|
|
if tab == 0 && @challenge.st == 0
|
|
|
|
|
@challenge.challenge_tags.delete_all
|
|
|
|
|
if params[:challenge_tag].present?
|
|
|
|
|
params[:challenge_tag].each do |input|
|
|
|
|
|
ChallengeTag.create!(:name => input, :challenge_id => @challenge.id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elsif tab == 1
|
|
|
|
|
path = @challenge.path
|
|
|
|
|
exec_path = @challenge.exec_path
|
|
|
|
|
test_set = @challenge.test_sets
|
|
|
|
|
sets_output = test_set.map(&:output)
|
|
|
|
|
sets_input = test_set.map(&:input)
|
|
|
|
|
sets_open = test_set.map(&:is_public)
|
|
|
|
|
set_score = test_set.map(&:score)
|
|
|
|
|
set_match_rule = test_set.map(&:match_rule)
|
|
|
|
|
params_hidden = params[:test_set].map{|set| set[:hidden].to_i == 0}
|
|
|
|
|
params_output = params[:test_set].map{|set| set[:output] }
|
|
|
|
|
params_input = params[:test_set].map{|set| set[:input] }
|
|
|
|
|
params_score = params[:test_set].map{|set| set[:score]}
|
|
|
|
|
params_test_set = params[:test_set].map{|set| set[:match_rule]}
|
|
|
|
|
# 测试集变化则需要更新(输入、 输出、 是否隐藏)
|
|
|
|
|
if sets_output != params_output || sets_open != params_hidden || sets_input != params_input ||
|
|
|
|
|
set_score != params_score || params_test_set != set_match_rule
|
|
|
|
|
test_set.delete_all unless test_set.blank?
|
|
|
|
|
params[:test_set].each_with_index do |set, index|
|
|
|
|
|
# last: 末尾匹配, full: 全完匹配
|
|
|
|
|
logger.info("set: #{set}; match_rule : #{set[:match_rule]}")
|
|
|
|
|
match_rule = set[:match_rule] == 'last' ? 'last' : 'full'
|
|
|
|
|
TestSet.create(:challenge_id => @challenge.id,
|
|
|
|
|
:input => "#{set[:input]}",
|
|
|
|
|
:output => "#{set[:output]}",
|
|
|
|
|
:is_public => params_hidden[index],
|
|
|
|
|
:score => set[:score],
|
|
|
|
|
:match_rule => "#{match_rule}",
|
|
|
|
|
:position => (index + 1))
|
|
|
|
|
elsif tab == 1
|
|
|
|
|
path = @challenge.path
|
|
|
|
|
exec_path = @challenge.exec_path
|
|
|
|
|
test_set = @challenge.test_sets
|
|
|
|
|
sets_output = test_set.map(&:output)
|
|
|
|
|
sets_input = test_set.map(&:input)
|
|
|
|
|
sets_open = test_set.map(&:is_public)
|
|
|
|
|
set_score = test_set.map(&:score)
|
|
|
|
|
set_match_rule = test_set.map(&:match_rule)
|
|
|
|
|
params_hidden = params[:test_set].map{|set| set[:hidden].to_i == 0}
|
|
|
|
|
params_output = params[:test_set].map{|set| set[:output] }
|
|
|
|
|
params_input = params[:test_set].map{|set| set[:input] }
|
|
|
|
|
params_score = params[:test_set].map{|set| set[:score]}
|
|
|
|
|
params_test_set = params[:test_set].map{|set| set[:match_rule]}
|
|
|
|
|
# 测试集变化则需要更新(输入、 输出、 是否隐藏)
|
|
|
|
|
if sets_output != params_output || sets_open != params_hidden || sets_input != params_input ||
|
|
|
|
|
set_score != params_score || params_test_set != set_match_rule
|
|
|
|
|
test_set.delete_all unless test_set.blank?
|
|
|
|
|
params[:test_set].each_with_index do |set, index|
|
|
|
|
|
# last: 末尾匹配, full: 全完匹配
|
|
|
|
|
logger.info("set: #{set}; match_rule : #{set[:match_rule]}")
|
|
|
|
|
match_rule = set[:match_rule] == 'last' ? 'last' : 'full'
|
|
|
|
|
TestSet.create(:challenge_id => @challenge.id,
|
|
|
|
|
:input => "#{set[:input]}",
|
|
|
|
|
:output => "#{set[:output]}",
|
|
|
|
|
:is_public => params_hidden[index],
|
|
|
|
|
:score => set[:score],
|
|
|
|
|
:match_rule => "#{match_rule}",
|
|
|
|
|
:position => (index + 1))
|
|
|
|
|
end
|
|
|
|
|
@challenge.update_column(:modify_time, Time.now)
|
|
|
|
|
# 测试集的
|
|
|
|
|
@shixun.myshixuns.update_all(:system_tip => 0)
|
|
|
|
|
end
|
|
|
|
|
@challenge.update_column(:modify_time, Time.now)
|
|
|
|
|
# 测试集的
|
|
|
|
|
@shixun.myshixuns.update_all(:system_tip => 0)
|
|
|
|
|
end
|
|
|
|
|
if params[:challenge][:show_type].to_i == -1
|
|
|
|
|
@challenge.update_attributes(picture_path: nil, web_route: nil, expect_picture_path: nil, original_picture_path: nil)
|
|
|
|
|
if params[:challenge][:show_type].to_i == -1
|
|
|
|
|
@challenge.update_attributes(picture_path: nil, web_route: nil, expect_picture_path: nil, original_picture_path: nil)
|
|
|
|
|
end
|
|
|
|
|
# 关卡评测执行文件如果被修改,需要修改脚本内容
|
|
|
|
|
script = modify_shixun_script @shixun, @shixun.evaluate_script
|
|
|
|
|
@shixun.shixun_info.update_column(:evaluate_script, script)
|
|
|
|
|
# TODO:
|
|
|
|
|
# if path != params[:challenge][:path]
|
|
|
|
|
# shixun_modify_status_without_publish(@shixun, 1)
|
|
|
|
|
# end
|
|
|
|
|
#Attachment.attach_files(@challenge, params[:attachments])
|
|
|
|
|
end
|
|
|
|
|
# 关卡评测执行文件如果被修改,需要修改脚本内容
|
|
|
|
|
script = modify_shixun_script @shixun, @shixun.evaluate_script
|
|
|
|
|
@shixun.shixun_info.update_column(:evaluate_script, script)
|
|
|
|
|
# TODO:
|
|
|
|
|
# if path != params[:challenge][:path]
|
|
|
|
|
# shixun_modify_status_without_publish(@shixun, 1)
|
|
|
|
|
# end
|
|
|
|
|
#Attachment.attach_files(@challenge, params[:attachments])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
rescue => e
|
|
|
|
|
logger_error("##update_challenges: ##{e.message}")
|
|
|
|
|
tip_exception("更新失败!")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# 参考答案的'增,删,改'
|
|
|
|
|