From 0bf70f145e22d5dae13312c1c864417cdb892331 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 26 Jul 2017 18:50:52 +0800 Subject: [PATCH 01/29] =?UTF-8?q?=E5=8D=95=E9=80=89=E5=A4=9A=E9=80=89?= =?UTF-8?q?=E9=A2=98=E7=9A=84=E7=BC=96=E8=BE=91/=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 33 ++++++++--- app/models/challenge.rb | 12 ++++ app/models/challenge_question.rb | 3 +- app/views/challenges/_content_list.html.erb | 8 +-- app/views/challenges/_edit_task_pass.html.erb | 58 +++++++++---------- app/views/challenges/_task_pass_form.html.erb | 52 ++++++++++++----- 6 files changed, 107 insertions(+), 59 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 87fe18a96..efd05a66d 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -14,7 +14,7 @@ class ChallengesController < ApplicationController def new # 顶部导航 - @st = params[:st] + @st = params[:st].to_i @project_menu_type = 11 respond_to do |format| format.html { render :action => 'new', :layout => 'base_shixun' } @@ -29,17 +29,18 @@ class ChallengesController < ApplicationController @challenge.position = challenge_count + 1 @challenge.shixun = @shixun @challenge.user = User.current - # @challenge.st = params[:st] + @challenge.st = params[:st].to_i if @challenge.save! - # 创建选项 - # params[:question].each do |test| - # ChallengeQuestion.where(:option_name => option_name,:challenges => challenge_id, :positon => 1, :right_key => true) - # end + #创建选项 + params[:question][:cnt].each_with_index do |test, index| + answer = params[:choice][:answer][index] == "0" ? false : true + ChallengeQuestion.create(:option_name => test, :challenge_id => @challenge.id, :position => index, :right_key => answer) + end end redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun) rescue Exception => e flash[:error] = "#{e.message}" - redirect_to new_shixun_challenge_path(:shixun_id => @shixun) + redirect_to new_shixun_challenge_path(:shixun_id => @shixun, :st => params[:st].to_i) raise ActiveRecord::Rollback end end @@ -103,6 +104,7 @@ class ChallengesController < ApplicationController end def edit + @st = @challenge.st challenge_num = Challenge.where(:shixun_id => @shixun).count challenge_pos = @challenge.position if challenge_pos < challenge_num @@ -120,8 +122,21 @@ class ChallengesController < ApplicationController end def update - @challenge.update_attributes(params[:challenge]) - redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun, :tab => params[:tab]) + ActiveRecord::Base.transaction do + @challenge.update_attributes(params[:challenge]) + begin + @challenge.challenge_questions.delete_all + params[:question][:cnt].each_with_index do |test, index| + answer = params[:choice][:answer][index] == "0" ? false : true + ChallengeQuestion.create(:option_name => test, :challenge_id => @challenge.id, :position => index, :right_key => answer) + end + redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun, :tab => params[:tab]) + rescue Exception => e + flash[:error] = "#{e.message}" + format.html{redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun)} + raise ActiveRecord::Rollback + end + end =begin respond_to do |format| ActiveRecord::Base.transaction do diff --git a/app/models/challenge.rb b/app/models/challenge.rb index 6779b345e..3ec4901a2 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -8,6 +8,7 @@ class Challenge < ActiveRecord::Base has_many :test_sets, :dependent => :destroy has_many :challenge_tags, :dependent => :destroy has_many :games, :dependent => :destroy + has_many :challenge_questions, :dependent => :destroy validates_presence_of :subject # validates_presence_of :score @@ -43,4 +44,15 @@ class Challenge < ActiveRecord::Base myshixun = Myshixun.where(:shixun_id => self.shixun.id, :user_id => User.current.id).first game = Game.where(:myshixun_id => myshixun.id, :challenge_id => self.id).first end + + # 正确答案 + def right_answers + answer = "" + self.challenge_questions.each do |ans| + if ans.right_key + answer << (ans.position + 65).chr + end + end + return answer + end end diff --git a/app/models/challenge_question.rb b/app/models/challenge_question.rb index bda6780ce..eb835c32e 100644 --- a/app/models/challenge_question.rb +++ b/app/models/challenge_question.rb @@ -1,3 +1,4 @@ class ChallengeQuestion < ActiveRecord::Base - attr_accessible :challenge_id, :option, :position, :right_key + belongs_to :challenge + attr_accessible :challenge_id, :option_name, :position, :right_key end diff --git a/app/views/challenges/_content_list.html.erb b/app/views/challenges/_content_list.html.erb index 7a36fa413..1145b27a1 100644 --- a/app/views/challenges/_content_list.html.erb +++ b/app/views/challenges/_content_list.html.erb @@ -5,10 +5,10 @@ <%= @challenges.count %> <% end %> <% if User.current.manager_of_shixun?(@shixun) && @shixun.status == 0 %> - +单选任务 - +多选任务 - +编程任务 - + +单选任务 + +多选任务 + +编程任务 + <% end %>
<% @challenges.each_with_index do |challenge, index| -%> diff --git a/app/views/challenges/_edit_task_pass.html.erb b/app/views/challenges/_edit_task_pass.html.erb index 4781c0bb5..96e6e2344 100644 --- a/app/views/challenges/_edit_task_pass.html.erb +++ b/app/views/challenges/_edit_task_pass.html.erb @@ -23,6 +23,31 @@
+ <% if @challenge.st == 1 %> + + <% elsif @challenge.st == 2 %> + + <% end %> <% end %> <% if @challenge.subject.blank? || !@editor.blank? %> <% end %> - - + <%# if @challenge.st == 1 %> <%# end %> diff --git a/app/views/challenges/_task_pass_form.html.erb b/app/views/challenges/_task_pass_form.html.erb index 8ff08a227..9e9140546 100644 --- a/app/views/challenges/_task_pass_form.html.erb +++ b/app/views/challenges/_task_pass_form.html.erb @@ -13,8 +13,9 @@ @@ -31,14 +32,25 @@ - - + <% if @st != 0 %> + <% if params[:action] == "edit" && @challenge.challenge_questions.count > 0 %> + <% @challenge.challenge_questions.each_with_index do |question, index| %> +
  • + + + + +
  • + <% end %> + <% end %> + + <% end %>
  • 保存 <% if params[:action] == "new" %> @@ -85,7 +97,7 @@ $("#shixun_form").on('click', 'a.option_icon_add', function () { var html = bt('t:set-option-list', null); $(this).parent().parent('.clearfix').before(html); - var inputs = document.getElementsByName("option_inputs_label"); + var inputs = document.getElementsByName("question[cnt][]"); var inputs_spans = document.getElementsByName("option_span"); for (var j = 0; j < inputs_spans.length; j++) { if(j >= 0 && j <= 26){ @@ -110,12 +122,12 @@ }); }); //设置选项答案 - function selectchoice(item){ + function selectchoice(item, st){ //判断是否选中,如果选中,再次点击的时候取消选中 if($(item).hasClass('check-option-bg')){ $(item).removeClass('check-option-bg'); }else{ - if(true){ + if(st == 2){ //单选 $(".select-choice").removeClass('check-option-bg'); $(item).addClass('check-option-bg'); @@ -133,6 +145,19 @@ $("#current-option").html("请点击正确选项"); } } + // 判断选择题的答案 + function set_choice_answer(){ + var answer = document.getElementsByName("choice[answer][]"); + var choice = document.getElementsByName("option_span"); + for(var o = 0; o < choice.length; o++){ + if($(choice[o]).hasClass("check-option-bg")){ + $(answer[o]).val(String.fromCharCode(65 + o)); + }else{ + $(answer[o]).val(0); + } + } + } + window.onload = function(){ $("#challenge_task_pass [type=\"latex\"]").bind("click", function(){ taskpass_editormd.cm.replaceSelection("```latex"); @@ -165,6 +190,7 @@ $("#task_pass_edit").hide(); }); function challenge_update(){ + set_choice_answer(); if($('#challenge_subject').val().trim() == ""){ $("#challenge_subject").focus(); $("#new_shixun_name").show(); From c825ddb18cd7fc68de065084c0d026087a6ee093 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 26 Jul 2017 19:15:22 +0800 Subject: [PATCH 02/29] =?UTF-8?q?tpi=E5=8D=95=E9=80=89=E5=A4=9A=E9=80=89?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/challenges/_content_list.html.erb | 14 ++++++++++---- app/views/challenges/edit.html.erb | 5 ++++- app/views/challenges/show.html.erb | 5 ++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/views/challenges/_content_list.html.erb b/app/views/challenges/_content_list.html.erb index bad618ce9..fe4f2a9a0 100644 --- a/app/views/challenges/_content_list.html.erb +++ b/app/views/challenges/_content_list.html.erb @@ -14,10 +14,16 @@ <% @challenges.each_with_index do |challenge, index| -%>

    - - + + <% if challenge.st == 0 %> + + <% elsif challenge.st == 1 %> + + <% elsif challenge.st == 2 %> + + <% end%> + + 第<%= challenge.position %>关 <%#= link_to challenge.subject, shixun_challenge_path(@shixun.id, challenge), :target => "_blank" %> <% if User.current.manager_of_shixun?(@shixun) %> diff --git a/app/views/challenges/edit.html.erb b/app/views/challenges/edit.html.erb index a415faf65..5c008e2ab 100644 --- a/app/views/challenges/edit.html.erb +++ b/app/views/challenges/edit.html.erb @@ -23,7 +23,10 @@ 下一阶段 <% end %> <% if @shixun.status == 0 && User.current.manager_of_shixun?(@shixun) %> - 新建阶段 + + +单选任务 + +多选任务 + +编程任务 <% end %>

    diff --git a/app/views/challenges/show.html.erb b/app/views/challenges/show.html.erb index 2901d38cc..738370551 100644 --- a/app/views/challenges/show.html.erb +++ b/app/views/challenges/show.html.erb @@ -25,7 +25,10 @@ 下一阶段 <% end %> <% if @shixun.status == 0 && User.current.manager_of_shixun?(@shixun) %> - 新建阶段 + + +单选任务 + +多选任务 + +编程任务 <% end %>
    From 5fdd7e82f5add18f0f796e0af408f6a17ea9a58a Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 26 Jul 2017 20:32:48 +0800 Subject: [PATCH 03/29] =?UTF-8?q?=E5=8D=95=E9=80=89=E5=A4=9A=E9=80=89?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=AA=8C=E8=AF=81=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/challenges/_task_pass_form.html.erb | 65 ++++++++++++++++++- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/app/views/challenges/_task_pass_form.html.erb b/app/views/challenges/_task_pass_form.html.erb index 9e9140546..cef2669cc 100644 --- a/app/views/challenges/_task_pass_form.html.erb +++ b/app/views/challenges/_task_pass_form.html.erb @@ -48,11 +48,12 @@
  • +
  • <% end %>
  • - 保存 + 保存 <% if params[:action] == "new" %> 取消 <% else %> @@ -158,6 +159,39 @@ } } + // 判断选择题内容是否为空 + function judge_choice_contents(){ + var answer = document.getElementsByName("choice[answer][]"); + var contents = document.getElementsByName("question[cnt][]"); + var lens = contents.length; + for(var i = 0; i < lens; i++){ + if($(contents[i]).val().trim() == ""){ + return true; + } + } + return false; + } + + // 判断选择题选择答案的个数 + function judge_choice_answer(){ + var answer = document.getElementsByName("choice[answer][]"); + var lens = answer.length; + var num = 0; + for(var i= 0; i < lens; i++){ + if($(answer[i]).val() != "0"){ + num += 1; + } + } + return num; + } + + // 选择题选项的个数 + function choice_num(){ + var answer = document.getElementsByName("choice[answer][]"); + var lens = answer.length; + return lens; + } + window.onload = function(){ $("#challenge_task_pass [type=\"latex\"]").bind("click", function(){ taskpass_editormd.cm.replaceSelection("```latex"); @@ -189,16 +223,41 @@ $("#task_pass_show").show(); $("#task_pass_edit").hide(); }); - function challenge_update(){ + function challenge_update(st){ set_choice_answer(); + var error = $("#choice_error_tip"); if($('#challenge_subject').val().trim() == ""){ $("#challenge_subject").focus(); $("#new_shixun_name").show(); }else if($("#challenge_task_pass textarea").val().trim() == ""){ $("#challenge_task_pass textarea").focus(); $("#new_shixun_pass").show(); + }else if(judge_choice_contents()){ + error.html("选项不能为空").show(); }else{ - $('#challenge_shixun_update').submit(); + if(st == "2"){ + if(judge_choice_contents()) { + error.html("选项内容不能为空").show(); + }else if(choice_num() < 2){ + error.html("单选题选项不能少于2个").show(); + }else if(judge_choice_answer() == 0){ + error.html("请设置答案").show(); + }else{ + $('#challenge_shixun_update').submit(); + } + }else if(st == "1"){ + if(judge_choice_contents()) { + error.html("选项内容不能为空").show(); + }else if(choice_num() < 3){ + error.html("多选题选项不能少于3个").show(); + }else if(judge_choice_answer() < 2){ + error.html("答案不能少于2个").show(); + }else{ + $('#challenge_shixun_update').submit(); + } + }else{ + $('#challenge_shixun_update').submit(); + } } } From 6ce887424ba69b18ef98fd5716749d98b061e32f Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 27 Jul 2017 10:07:58 +0800 Subject: [PATCH 04/29] =?UTF-8?q?tpm=E5=A2=9E=E5=8A=A0=E9=A2=84=E5=A4=87?= =?UTF-8?q?=E7=9F=A5=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 29 +-- .../challenges/_edit_propaedeutics.html.erb | 44 +++++ .../challenges/_propaedeutics_form.html.erb | 79 ++++++++ app/views/challenges/edit.html.erb | 9 +- app/views/layouts/base_shixun.html.erb | 2 +- app/views/shixuns/_form.html.erb | 183 +++++++++--------- 6 files changed, 240 insertions(+), 106 deletions(-) create mode 100644 app/views/challenges/_edit_propaedeutics.html.erb create mode 100644 app/views/challenges/_propaedeutics_form.html.erb diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index efd05a66d..40f628967 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -122,19 +122,24 @@ class ChallengesController < ApplicationController end def update - ActiveRecord::Base.transaction do - @challenge.update_attributes(params[:challenge]) - begin - @challenge.challenge_questions.delete_all - params[:question][:cnt].each_with_index do |test, index| - answer = params[:choice][:answer][index] == "0" ? false : true - ChallengeQuestion.create(:option_name => test, :challenge_id => @challenge.id, :position => index, :right_key => answer) + if params[:tab] == "6" + @shixun.update_attribute("propaedeutics", params[:shixun][:propaedeutics]) + redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun, :tab => params[:tab]) + else + ActiveRecord::Base.transaction do + @challenge.update_attributes(params[:challenge]) + begin + @challenge.challenge_questions.delete_all + params[:question][:cnt].each_with_index do |test, index| + answer = params[:choice][:answer][index] == "0" ? false : true + ChallengeQuestion.create(:option_name => test, :challenge_id => @challenge.id, :position => index, :right_key => answer) + end + redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun, :tab => params[:tab]) + rescue Exception => e + flash[:error] = "#{e.message}" + format.html{redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun)} + raise ActiveRecord::Rollback end - redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun, :tab => params[:tab]) - rescue Exception => e - flash[:error] = "#{e.message}" - format.html{redirect_to edit_shixun_challenge_path(@challenge, :shixun_id => @shixun)} - raise ActiveRecord::Rollback end end =begin diff --git a/app/views/challenges/_edit_propaedeutics.html.erb b/app/views/challenges/_edit_propaedeutics.html.erb new file mode 100644 index 000000000..26fc4bbc7 --- /dev/null +++ b/app/views/challenges/_edit_propaedeutics.html.erb @@ -0,0 +1,44 @@ +
    + <% if @editor.blank? && !@shixun.propaedeutics.blank? %> +
    +
    +

    + <% if @shixun.status == 0 && User.current.manager_of_shixun?(@shixun) %> + 编辑 + <% end %> +

    +
    +
      +
    • + +
      + +
      + +
    • +
    +
    + <% end %> + <% if @shixun.propaedeutics.blank? || !@editor.blank? %> + + <% end %> +
    + \ No newline at end of file diff --git a/app/views/challenges/_propaedeutics_form.html.erb b/app/views/challenges/_propaedeutics_form.html.erb new file mode 100644 index 000000000..987786b57 --- /dev/null +++ b/app/views/challenges/_propaedeutics_form.html.erb @@ -0,0 +1,79 @@ +<%= stylesheet_link_tag '/editormd/css/editormd','/editormd/css/editormd.min.css' %> +<%= javascript_include_tag '/editormd/editormd.min.js','/editormd/examples/js/jquery.min.js' %> + +
    +
  • + +
    + +
    +
  • +
  • + 保存 + <% if @shixun.propaedeutics %> + 取消 + <% end %> +
  • + + \ No newline at end of file diff --git a/app/views/challenges/edit.html.erb b/app/views/challenges/edit.html.erb index 5c008e2ab..761242c98 100644 --- a/app/views/challenges/edit.html.erb +++ b/app/views/challenges/edit.html.erb @@ -34,14 +34,17 @@
  • "> 本关任务
  • - <%# if @challenge.st == 0 %> + <% if @challenge.st == 0 %>
  • "> 评测设置
  • - <%# end %> + <% end %>
  • "> 参考答案
  • +
  • "> + 预备知识 +
  • "> 评分设置
  • @@ -60,6 +63,8 @@ <%= render :partial => "edit_scoring" %> <% elsif @tab == 5 %> <%= render :partial => "edit_skill" %> + <% elsif @tab == 6 %> + <%= render :partial => "edit_propaedeutics" %> <% end %> diff --git a/app/views/layouts/base_shixun.html.erb b/app/views/layouts/base_shixun.html.erb index b584a4ce2..7684a7a95 100644 --- a/app/views/layouts/base_shixun.html.erb +++ b/app/views/layouts/base_shixun.html.erb @@ -27,7 +27,7 @@
    \ No newline at end of file diff --git a/app/views/games/_game_show.html.erb b/app/views/games/_game_show.html.erb index 529a766f5..511786860 100644 --- a/app/views/games/_game_show.html.erb +++ b/app/views/games/_game_show.html.erb @@ -61,8 +61,8 @@ - - \ No newline at end of file diff --git a/app/views/games/_code_actions.html.erb b/app/views/games/_code_actions.html.erb index 9b2dd486e..ece5c0a42 100644 --- a/app/views/games/_code_actions.html.erb +++ b/app/views/games/_code_actions.html.erb @@ -1,9 +1,15 @@ +<% if @st == 0 %>
    "> - 加载上次通过的代码 + 加载上次通过的代码
    +<% end %>
    - 评测 + <% if @st == 0 %> + 评测 + <% elsif @game.status != 2 %> + 评测 + <% end %>
    <% if @game.status == 1 %> @@ -11,11 +17,11 @@ <% elsif @game.status == 2 %> <% if @had_done == 0 %> <%= link_to "下一关 ", {:controller => 'games', - :action => "next_step", :id => @game, - :myshixun_id => @myshixun}, - :class => "shixun-task-btn task-btn-blue mr15 mt8", - :id => "next_step", - :remote => true %> + :action => "next_step", :id => @game, + :myshixun_id => @myshixun}, + :class => "shixun-task-btn task-btn-blue mr15 mt8", + :id => "next_step", + :remote => true %> <% else %> 退出实训 @@ -23,13 +29,13 @@ <% end %>