From 87d47fe672671249687f9d4a6474c65d1d68ee39 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 15 Sep 2017 22:35:40 +0800 Subject: [PATCH 01/15] =?UTF-8?q?=E6=88=90=E5=91=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 8bfd88ffa..28b395fc2 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -107,12 +107,15 @@ class CoursesController < ApplicationController def sync_students school_id = User.find(@course.tea_id).try(:user_extensions).try(:school_id) @import_attachments = Attachment.where(:container_id => @course.id, :container_type => "ImportStudent") + @had_import_count = 0 if @import_attachments.present? @import_attachments.each do |attachment| + @list_count = 0 path = attachment.disk_directory name = attachment.disk_filename if name.split(".").last == "xls" || name.split(".").last == "xlsx" lists = readData("files/#{path}/#{name}") + @list_count += lists.count lists.each do |list| logger.info("#{list[0]}---#{list[1]}") user = User.find_by_sql("SELECT u.* FROM `users` u, `user_extensions` ue where u.id = ue.user_id and CONCAT(u.lastname,u.firstname) ='#{list[1]}' and ue.school_id='#{school_id}' and ue.student_id='#{list[0]}'").first @@ -122,10 +125,10 @@ class CoursesController < ApplicationController members << Member.new(:role_ids => [10], :user_id => user.id) @course.members << members StudentsForCourse.create(:student_id => user.id, :course_id => @course.id) + @had_import_count += 1 end end end - end end @members = @course.members.joins("join user_extensions on members.user_id = user_extensions.user_id").order("student_id asc").select{|m| m.roles.to_s.include?("Student")} From 4e30c42a6090ea226f6c68a820fc0f599e554a47 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 15 Sep 2017 22:59:32 +0800 Subject: [PATCH 02/15] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- .../settings/_import_students_result.html.erb | 12 ++++++++++++ app/views/courses/sync_students.js.erb | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 app/views/courses/settings/_import_students_result.html.erb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 28b395fc2..739288379 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -108,9 +108,9 @@ class CoursesController < ApplicationController school_id = User.find(@course.tea_id).try(:user_extensions).try(:school_id) @import_attachments = Attachment.where(:container_id => @course.id, :container_type => "ImportStudent") @had_import_count = 0 + @list_count = 0 if @import_attachments.present? @import_attachments.each do |attachment| - @list_count = 0 path = attachment.disk_directory name = attachment.disk_filename if name.split(".").last == "xls" || name.split(".").last == "xlsx" diff --git a/app/views/courses/settings/_import_students_result.html.erb b/app/views/courses/settings/_import_students_result.html.erb new file mode 100644 index 000000000..6dbbc7330 --- /dev/null +++ b/app/views/courses/settings/_import_students_result.html.erb @@ -0,0 +1,12 @@ + +
+
+

上传文件

+ +
+
+
+ 本次新加入<%= @had_import_count %>个学生,还有<%= @list_count - @had_import_count %>个学生没有加入 +
+
+
diff --git a/app/views/courses/sync_students.js.erb b/app/views/courses/sync_students.js.erb index c49456425..c4dea436f 100644 --- a/app/views/courses/sync_students.js.erb +++ b/app/views/courses/sync_students.js.erb @@ -1,2 +1,6 @@ $("#setting_teacher_list").hide(); -$("#setting_student_list").html("<%= j(render :partial => 'courses/settings/all_student_list') %>").show(); \ No newline at end of file +$("#setting_student_list").html("<%= j(render :partial => 'courses/settings/all_student_list') %>").show(); +<% if @had_import_count > 0 %> +var htmlvalue = '<%= escape_javascript(render :partial => 'courses/settings/import_students_result', :locals => {:course => @course}) %>'; +pop_box_new(htmlvalue, 440, 490); +<% end %> \ No newline at end of file From f88bc764bb67eef8dc8cc24460c8feaaf90c1cd1 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 21 Sep 2017 15:20:39 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=85=B3=E5=8D=A1?= =?UTF-8?q?=E3=80=81=E6=B5=8B=E8=AF=95=E9=9B=86=E3=80=81tag=E5=A4=8D?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 97 +++++++++++++++++++++++++- app/views/shixuns/_shixun_top.html.erb | 6 +- 2 files changed, 97 insertions(+), 6 deletions(-) diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index c398d388c..0ab015df5 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -18,6 +18,7 @@ class ShixunsController < ApplicationController def statistics_students end + # push代码的时候会触发gitlab hook def ghook # shixun_modify_status_without_publish(@shixun, 1) @@ -514,9 +515,9 @@ class ShixunsController < ApplicationController s = Trustie::Gitlab::Sync.new gproject = s.create_shixun(@shixun, repository) raise "版本库创建失败" if @shixun.gpid.blank? # 若和gitlab没同步成功,则抛出异常 - g = Gitlab.client - hook_url = Setting.protocol + "://" + Setting.host_name + "/shixuns/#{@shixun.identifier}" + "/ghook" - g.add_project_hook(@shixun.gpid, hook_url) + # g = Gitlab.client + # hook_url = Setting.protocol + "://" + Setting.host_name + "/shixuns/#{@shixun.identifier}" + "/ghook" + # g.add_project_hook(@shixun.gpid, hook_url) redirect_to shixun_path @shixun, notice: l(:notice_successful_create) rescue Exception => e respond_to do |format| @@ -528,6 +529,96 @@ class ShixunsController < ApplicationController end end + def copy + begin + new_shixun = Shixun.new + new_shixun.attributes = @shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier", "homepage_show") + new_shixun.user_id = User.current.id + new_shixun.identifier = generate_identifier + new_shixun.save! + + # 同步复制合作者 + # 合作者加入到gitlab + @shixun.shixun_members.each do || + m = ShixunMember.new(:user_id => new_shixun.user_id, :role => 1) + new_shixun.shixun_members << m + # REDO: 合作者加入到项目,注意不同的用户复制可能觉得会变?是否需要加入合作者?? + # 成员存在的时候则不加入 + end + + # 同步复制版本库,先fork再修改版本库名 + # forge用户来复制版本库 + # repository = Repository.new + # repository.shixun = new_shixun + # repository.type = 'Repository::Gitlab' + # repository.identifier = new_shixun.identifier.downcase + # repository.project_id = -1 + # repository.save! + # g = Gitlab.client + # user_gid = User.find_by_mail("eduforge@163.com").try(:gid) + # gshixun = g.fork(@shixun.gpid, user_gid) + # raise "版本库创建失败" if gshixun.try(:id).blank? + # g.edit_project(gshixun.id, :name => new_shixun.name) + + # 同步复制关卡 + if @shixun.challenges.present? + @shixun.challenges.each do |challenge| + new_challenge = Challenge.new + new_challenge.attributes = challenge.attributes.dup.except("id","shixun_id","user_id") + new_challenge.user_id = User.current.id + new_challenge.shixun_id = new_shixun.id + new_challenge.save! + if challenge.st == 0 # 评测题 + # 同步测试集 + if challenge.test_sets.present? + challenge.test_sets.each do |test_set| + new_test_set = TestSet.new + new_test_set.attributes = test_set.attributes.dup.except("id","challenge_id") + new_test_set.challenge_id = new_challenge.id + new_test_set.save! + end + end + # 同步关卡标签 + challenge_tags = ChallengeTag.where("challenge_id =? and challenge_choose_id is null", challenge.id) + if challenge_tags.present? + challenge_tags.each do |challenge_tag| + ChallengeTag.create(:challenge_id => new_challenge.id, :name => challenge_tag.try(:name)) + end + end + elsif challenge.st == 1 # 选择题 + if challenge.challenge_chooses.present? + challenge.challenge_chooses.each do |challenge_choose| + new_challenge_choose = ChallengeChoose.new + new_challenge_choose.attributes = challenge_choose.attributes.dup.except("id","challenge_id") + new_challenge_choose.challenge_id = new_challenge.id + new_challenge_choose.save! + # 每一题的选项 + if challenge_choose.challenge_questions.present? + challenge_choose.challenge_questions.each do |challenge_question| + new_challenge_question = ChallengeQuestion.new + new_challenge_question.attributes = challenge_question.attributes.dup.except("id","challenge_choose_id") + new_challenge_question.challenge_choose_id = new_challenge_choose.id + new_challenge_question.save! + end + end + # 每一题的知识标签 + st_challenge_tags = ChallengeTag.where(:challenge_id => challenge.id, :challenge_choose_id => challenge_choose.id) + if st_challenge_tags.present? + st_challenge_tags.each do |st_challenge_tag| + ChallengeTag.create(:challenge_id => new_challenge.id, :name => st_challenge_tag.try(:name), :challenge_choose_id => new_challenge_choose.id) + end + end + end + end + end + end + end + redirect_to shixun_path(new_shixun) + rescue Exception => e + logger.info("copy shixun failed ##{e.message}") + end + end + def show respond_to do |format| format.html{redirect_to shixun_challenges_path(@shixun)} diff --git a/app/views/shixuns/_shixun_top.html.erb b/app/views/shixuns/_shixun_top.html.erb index 403c3e965..9e35e4be4 100644 --- a/app/views/shixuns/_shixun_top.html.erb +++ b/app/views/shixuns/_shixun_top.html.erb @@ -29,9 +29,9 @@ <%= link_to "继续实战", operation_shixun_path(@shixun, :myshixun_id => myshixun.try(:id)), :class => "fr shixun-task-btn task-btn-orange mr15 ", :id => "shixun_operation", :remote => true %> <% end %> <%= link_to '发送至', search_user_courses_shixun_path(@shixun), :remote => true, :class => "fr shixun-task-btn task-btn-green mr15" %> - <%# if User.current.manager_of_shixun?(@shixun) %> - <%#= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15", :target => "_blank" %> - <%# end %> + <% if User.current.manager_of_shixun?(@shixun) %> + 复制 + <% end %> <% elsif @shixun.status == 3 %> <% unless myshixun.blank? %> <%= link_to "继续实战", operation_shixun_path(@shixun, :myshixun_id => myshixun.try(:id)), :class => "fr shixun-task-btn task-btn-orange mr15 ", :id => "shixun_operation", :remote => true %> From 945a3772e6e08600a03f373c26406f50c091453d Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 21 Sep 2017 16:50:13 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 70 +++++++++++-------- app/views/shixuns/_shixun_top.html.erb | 3 +- ...20170920065705_add_fork_from_to_shixuns.rb | 5 ++ .../20170921084836_add_can_copy_to_shixuns.rb | 5 ++ 4 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 db/migrate/20170920065705_add_fork_from_to_shixuns.rb create mode 100644 db/migrate/20170921084836_add_can_copy_to_shixuns.rb diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index 0ab015df5..9cd398958 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -535,34 +535,35 @@ class ShixunsController < ApplicationController new_shixun.attributes = @shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier", "homepage_show") new_shixun.user_id = User.current.id new_shixun.identifier = generate_identifier - new_shixun.save! + new_shixun.status = 0 + new_shixun.save! - # 同步复制合作者 - # 合作者加入到gitlab - @shixun.shixun_members.each do || - m = ShixunMember.new(:user_id => new_shixun.user_id, :role => 1) - new_shixun.shixun_members << m - # REDO: 合作者加入到项目,注意不同的用户复制可能觉得会变?是否需要加入合作者?? - # 成员存在的时候则不加入 - end + # 同步复制合作者 + # 合作者加入到gitlab + @shixun.shixun_members.each do |shixun_member| + if ShixunMember.where(:shixun_id => new_shixun.try(:id), :user_id => shixun_member.user_id).blank? + ShixunMember.create!(:user_id => shixun_member.try(:user_id), :shixun_id => new_shixun.try(:id), + :role => (shixun_member.try(:user_id) == User.current.id ? 1 : 2)) + end + end - # 同步复制版本库,先fork再修改版本库名 - # forge用户来复制版本库 - # repository = Repository.new - # repository.shixun = new_shixun - # repository.type = 'Repository::Gitlab' - # repository.identifier = new_shixun.identifier.downcase - # repository.project_id = -1 - # repository.save! - # g = Gitlab.client - # user_gid = User.find_by_mail("eduforge@163.com").try(:gid) - # gshixun = g.fork(@shixun.gpid, user_gid) - # raise "版本库创建失败" if gshixun.try(:id).blank? - # g.edit_project(gshixun.id, :name => new_shixun.name) - - # 同步复制关卡 - if @shixun.challenges.present? - @shixun.challenges.each do |challenge| + # 同步复制版本库,先fork再修改版本库名 + # forge用户来复制版本库 + repository = Repository.new + repository.shixun = new_shixun + repository.type = 'Repository::Gitlab' + repository.identifier = new_shixun.identifier.downcase + repository.project_id = -1 + repository.save! + g = Gitlab.client + user_gid = User.find_by_mail("eduforge@163.com").try(:gid) + gshixun = g.fork(@shixun.gpid, user_gid) + raise "版本库创建失败" if gshixun.try(:id).blank? + new_shixun.update_column(:gpid, gshixun.id) + # g.edit_project(gshixun.id, :visibility_level => 20, :name => new_shixun.identifier) + # 同步复制关卡 + if @shixun.challenges.present? + @shixun.challenges.each do |challenge| new_challenge = Challenge.new new_challenge.attributes = challenge.attributes.dup.except("id","shixun_id","user_id") new_challenge.user_id = User.current.id @@ -582,7 +583,7 @@ class ShixunsController < ApplicationController challenge_tags = ChallengeTag.where("challenge_id =? and challenge_choose_id is null", challenge.id) if challenge_tags.present? challenge_tags.each do |challenge_tag| - ChallengeTag.create(:challenge_id => new_challenge.id, :name => challenge_tag.try(:name)) + ChallengeTag.create!(:challenge_id => new_challenge.id, :name => challenge_tag.try(:name)) end end elsif challenge.st == 1 # 选择题 @@ -605,7 +606,7 @@ class ShixunsController < ApplicationController st_challenge_tags = ChallengeTag.where(:challenge_id => challenge.id, :challenge_choose_id => challenge_choose.id) if st_challenge_tags.present? st_challenge_tags.each do |st_challenge_tag| - ChallengeTag.create(:challenge_id => new_challenge.id, :name => st_challenge_tag.try(:name), :challenge_choose_id => new_challenge_choose.id) + ChallengeTag.create!(:challenge_id => new_challenge.id, :name => st_challenge_tag.try(:name), :challenge_choose_id => new_challenge_choose.id) end end end @@ -613,9 +614,22 @@ class ShixunsController < ApplicationController end end end + # 中间层创建测试集 + shixun_tomcat = Redmine::Configuration['shixun_tomcat'] + gameInfo = new_shixun.gameInfo + uri ="#{shixun_tomcat}/bridge/game/publishGame" + params = {gameInfo:gameInfo} + res = uri_exec uri, params + if res && res['code'].to_i != 0 + raise("实训云平台繁忙(繁忙等级:90)") + end redirect_to shixun_path(new_shixun) rescue Exception => e logger.info("copy shixun failed ##{e.message}") + flash[:notice] = "#{e.message}" + g.delete_project(gshixun.id) if gshixun.id.present? # 异常后,如果已经创建了版本库需要删除该版本库 + redirect_to shixun_path(@shixun) + raise ActiveRecord::Rollback end end diff --git a/app/views/shixuns/_shixun_top.html.erb b/app/views/shixuns/_shixun_top.html.erb index 9e35e4be4..386e43567 100644 --- a/app/views/shixuns/_shixun_top.html.erb +++ b/app/views/shixuns/_shixun_top.html.erb @@ -30,7 +30,8 @@ <% end %> <%= link_to '发送至', search_user_courses_shixun_path(@shixun), :remote => true, :class => "fr shixun-task-btn task-btn-green mr15" %> <% if User.current.manager_of_shixun?(@shixun) %> - 复制 + <%= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15" %> + <% end %> <% elsif @shixun.status == 3 %> <% unless myshixun.blank? %> diff --git a/db/migrate/20170920065705_add_fork_from_to_shixuns.rb b/db/migrate/20170920065705_add_fork_from_to_shixuns.rb new file mode 100644 index 000000000..63730a310 --- /dev/null +++ b/db/migrate/20170920065705_add_fork_from_to_shixuns.rb @@ -0,0 +1,5 @@ +class AddForkFromToShixuns < ActiveRecord::Migration + def change + add_column :shixuns, :fork_from, :integer + end +end diff --git a/db/migrate/20170921084836_add_can_copy_to_shixuns.rb b/db/migrate/20170921084836_add_can_copy_to_shixuns.rb new file mode 100644 index 000000000..1720ab4fb --- /dev/null +++ b/db/migrate/20170921084836_add_can_copy_to_shixuns.rb @@ -0,0 +1,5 @@ +class AddCanCopyToShixuns < ActiveRecord::Migration + def change + add_column :shixuns, :can_copy, :boolean, :default => true + end +end From 84643fe2cbf7bed3ffc99166896d96f410560296 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 21 Sep 2017 17:25:51 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=AF=E9=85=8D=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 2 ++ app/views/shixuns/_form.html.erb | 7 +++++++ app/views/shixuns/_settings_edit.html.erb | 8 +++++++- app/views/shixuns/_settings_show.html.erb | 7 +++++++ app/views/shixuns/_shixun_top.html.erb | 8 ++++---- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index 9cd398958..53a854f02 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -487,6 +487,7 @@ class ShixunsController < ApplicationController #@shixun.major_id = params[:major_id] @shixun.trainee = params[:trainee] @shixun.webssh = params[:webssh].to_i + @shixun.can_copy = params[:can_copy].to_i @shixun.identifier = identifier # if params[:course_id] # params[:course_id].each do |course_id| @@ -665,6 +666,7 @@ class ShixunsController < ApplicationController @shixun.language = params[:language] @shixun.trainee = params[:trainee] @shixun.webssh = params[:webssh].to_i + @shixun.can_copy = params[:can_copy].to_i # if params[:course_id] # @shixun.shixun_major_courses.destroy_all # params[:course_id].each do |course_id| diff --git a/app/views/shixuns/_form.html.erb b/app/views/shixuns/_form.html.erb index 4bf50e168..6de4bb834 100644 --- a/app/views/shixuns/_form.html.erb +++ b/app/views/shixuns/_form.html.erb @@ -102,6 +102,13 @@ +
  • + + + name="can_copy" value="1" id="can_copy" class="ml5 mr5 magic-checkbox" > + + +
  • 提交 <%= link_to "取消", shixuns_path, :class => "task-btn fr mr10" %> diff --git a/app/views/shixuns/_settings_edit.html.erb b/app/views/shixuns/_settings_edit.html.erb index 6d3741c93..1e8dadbac 100644 --- a/app/views/shixuns/_settings_edit.html.erb +++ b/app/views/shixuns/_settings_edit.html.erb @@ -50,7 +50,13 @@
  • - +
  • + + + name="can_copy" value="<%= @shixun.can_copy ? 1 : 0 %>" id="can_copy" class="ml5 mr5 magic-checkbox" > + + +
  • 保存
  • diff --git a/app/views/shixuns/_settings_show.html.erb b/app/views/shixuns/_settings_show.html.erb index fca669be8..1c7b6a309 100644 --- a/app/views/shixuns/_settings_show.html.erb +++ b/app/views/shixuns/_settings_show.html.erb @@ -58,6 +58,13 @@ +
  • + + + name="can_copy" value="<%= @shixun.can_copy ? 1 : 0 %>" id="can_copy" disabled="disabled" class="ml5 mr5 magic-checkbox" > + + +
  • diff --git a/app/views/shixuns/_shixun_top.html.erb b/app/views/shixuns/_shixun_top.html.erb index 386e43567..08b887ce8 100644 --- a/app/views/shixuns/_shixun_top.html.erb +++ b/app/views/shixuns/_shixun_top.html.erb @@ -29,16 +29,16 @@ <%= link_to "继续实战", operation_shixun_path(@shixun, :myshixun_id => myshixun.try(:id)), :class => "fr shixun-task-btn task-btn-orange mr15 ", :id => "shixun_operation", :remote => true %> <% end %> <%= link_to '发送至', search_user_courses_shixun_path(@shixun), :remote => true, :class => "fr shixun-task-btn task-btn-green mr15" %> - <% if User.current.manager_of_shixun?(@shixun) %> - <%= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15" %> - - <% end %> <% elsif @shixun.status == 3 %> <% unless myshixun.blank? %> <%= link_to "继续实战", operation_shixun_path(@shixun, :myshixun_id => myshixun.try(:id)), :class => "fr shixun-task-btn task-btn-orange mr15 ", :id => "shixun_operation", :remote => true %> <% end %> 已关闭 <% end %> + <% if @shixun.can_copy && User.current.manager_of_shixun?(@shixun) %> + <%= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15" %> + + <% end %> <% end %>
    <% unless User.current.manager_of_shixun?(@shixun) %> From 8457e4d784422f466e305075595dfd0f3acd8cc5 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 22 Sep 2017 09:52:13 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E7=9A=84=E5=A4=8D=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- app/controllers/repositories_controller.rb | 7 +- app/controllers/shixuns_controller.rb | 189 ++++++++++--------- app/models/shixun.rb | 2 +- lib/gitlab-cli/lib/gitlab/client/projects.rb | 4 +- 5 files changed, 108 insertions(+), 96 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 064a19c91..b7032cef3 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -36,7 +36,7 @@ class CoursesController < ApplicationController before_filter :require_login, :only => [:join, :unjoin] #before_filter :allow_join, :only => [:join] require 'bundler/setup' - require 'simple_xlsx_reader' + # require 'simple_xlsx_reader' # params[:search] 搜索课程的名称 # params[:select] "join" "create" "all" 参与的 创建的 所有的课程 diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 1fb024611..bcc2d3e63 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -543,8 +543,11 @@ update # token值解密 # gitlab_token = aes_dicrypt("priEn3UwXfJs3Pmy", token) @zip_path = Gitlab.endpoint.to_s + "/projects/" + @shixun.gpid.to_s + "/repository/archive?&private_token=" + token - - login = User.find_by_mail("educoder@163.com").try(:login) + if @shixun.fork_from.present? + login = User.find_by_mail("eduforge@163.com").try(:login) + else + login = User.find_by_mail("educoder@163.com").try(:login) + end gitlab_address = Redmine::Configuration['gitlab_address'] @repos_url = git_shixun_url(@shixun, login) # @repos_url = gitlab_address.to_s+"/" + @creator + "/" + @repository.identifier+"."+"git" diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index 53a854f02..7e003505d 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -222,7 +222,7 @@ class ShixunsController < ApplicationController ShixunMember.create!(:user_id => member, :shixun_id => @shixun.id, :role => 2) u = s.g.add_team_member(@shixun.gpid, gid, 40) # 3代表角色master if u.blank? - raise("同步Gitlab数据错误") + raise("同步Gitlab数据失败") end end @collaborators = @shixun.collaborators @@ -531,106 +531,115 @@ class ShixunsController < ApplicationController end def copy - begin - new_shixun = Shixun.new - new_shixun.attributes = @shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier", "homepage_show") - new_shixun.user_id = User.current.id - new_shixun.identifier = generate_identifier - new_shixun.status = 0 + ActiveRecord::Base.transaction do + begin + new_shixun = Shixun.new + new_shixun.attributes = @shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier", "homepage_show") + new_shixun.user_id = User.current.id + new_shixun.identifier = generate_identifier + new_shixun.status = 0 + new_shixun.fork_from = @shixun.id new_shixun.save! + # 同步复制版本库,先fork再修改版本库名 + # eduforge用户作为版本库的创建者 + repository = Repository.new + repository.shixun = new_shixun + repository.type = 'Repository::Gitlab' + repository.identifier = new_shixun.identifier.downcase + repository.project_id = -1 + repository.save! + g = Gitlab.client + user_gid = User.find_by_mail("eduforge@163.com").try(:gid) + gshixun = g.fork(@shixun.gpid, user_gid) + raise "版本库创建失败" if gshixun.try(:id).blank? + gshixun = g.edit_project(gshixun.id, new_shixun.identifier, new_shixun.identifier) + raise "版本库创建失败" if (gshixun.try(:name) != new_shixun.identifier || gshixun.try(:path) != new_shixun.identifier) + new_shixun.update_column(:gpid, gshixun.id) - # 同步复制合作者 - # 合作者加入到gitlab - @shixun.shixun_members.each do |shixun_member| - if ShixunMember.where(:shixun_id => new_shixun.try(:id), :user_id => shixun_member.user_id).blank? - ShixunMember.create!(:user_id => shixun_member.try(:user_id), :shixun_id => new_shixun.try(:id), - :role => (shixun_member.try(:user_id) == User.current.id ? 1 : 2)) - end + # 同步复制合作者,合作者加入到gitlab + @shixun.shixun_members.each do |shixun_member| + if ShixunMember.where(:shixun_id => new_shixun.try(:id), :user_id => shixun_member.user_id).blank? + ShixunMember.create!(:user_id => shixun_member.try(:user_id), :shixun_id => new_shixun.try(:id), + :role => (shixun_member.try(:user_id) == User.current.id ? 1 : 2)) end - - # 同步复制版本库,先fork再修改版本库名 - # forge用户来复制版本库 - repository = Repository.new - repository.shixun = new_shixun - repository.type = 'Repository::Gitlab' - repository.identifier = new_shixun.identifier.downcase - repository.project_id = -1 - repository.save! - g = Gitlab.client - user_gid = User.find_by_mail("eduforge@163.com").try(:gid) - gshixun = g.fork(@shixun.gpid, user_gid) - raise "版本库创建失败" if gshixun.try(:id).blank? - new_shixun.update_column(:gpid, gshixun.id) - # g.edit_project(gshixun.id, :visibility_level => 20, :name => new_shixun.identifier) - # 同步复制关卡 - if @shixun.challenges.present? - @shixun.challenges.each do |challenge| - new_challenge = Challenge.new - new_challenge.attributes = challenge.attributes.dup.except("id","shixun_id","user_id") - new_challenge.user_id = User.current.id - new_challenge.shixun_id = new_shixun.id - new_challenge.save! - if challenge.st == 0 # 评测题 - # 同步测试集 - if challenge.test_sets.present? - challenge.test_sets.each do |test_set| - new_test_set = TestSet.new - new_test_set.attributes = test_set.attributes.dup.except("id","challenge_id") - new_test_set.challenge_id = new_challenge.id - new_test_set.save! - end - end - # 同步关卡标签 - challenge_tags = ChallengeTag.where("challenge_id =? and challenge_choose_id is null", challenge.id) - if challenge_tags.present? - challenge_tags.each do |challenge_tag| - ChallengeTag.create!(:challenge_id => new_challenge.id, :name => challenge_tag.try(:name)) - end - end - elsif challenge.st == 1 # 选择题 - if challenge.challenge_chooses.present? - challenge.challenge_chooses.each do |challenge_choose| - new_challenge_choose = ChallengeChoose.new - new_challenge_choose.attributes = challenge_choose.attributes.dup.except("id","challenge_id") - new_challenge_choose.challenge_id = new_challenge.id - new_challenge_choose.save! - # 每一题的选项 - if challenge_choose.challenge_questions.present? - challenge_choose.challenge_questions.each do |challenge_question| - new_challenge_question = ChallengeQuestion.new - new_challenge_question.attributes = challenge_question.attributes.dup.except("id","challenge_choose_id") - new_challenge_question.challenge_choose_id = new_challenge_choose.id - new_challenge_question.save! - end + s = Trustie::Gitlab::Sync.new + gid = User.find(shixun_member.user_id).try(:gid) + u = s.g.add_team_member(gshixun.id, gid, 40) # 3代表角色master + if u.blank? + raise("同步Gitlab数据失败") + end + end + # 同步复制关卡 + if @shixun.challenges.present? + @shixun.challenges.each do |challenge| + new_challenge = Challenge.new + new_challenge.attributes = challenge.attributes.dup.except("id","shixun_id","user_id") + new_challenge.user_id = User.current.id + new_challenge.shixun_id = new_shixun.id + new_challenge.save! + if challenge.st == 0 # 评测题 + # 同步测试集 + if challenge.test_sets.present? + challenge.test_sets.each do |test_set| + new_test_set = TestSet.new + new_test_set.attributes = test_set.attributes.dup.except("id","challenge_id") + new_test_set.challenge_id = new_challenge.id + new_test_set.save! end - # 每一题的知识标签 - st_challenge_tags = ChallengeTag.where(:challenge_id => challenge.id, :challenge_choose_id => challenge_choose.id) - if st_challenge_tags.present? - st_challenge_tags.each do |st_challenge_tag| - ChallengeTag.create!(:challenge_id => new_challenge.id, :name => st_challenge_tag.try(:name), :challenge_choose_id => new_challenge_choose.id) + end + # 同步关卡标签 + challenge_tags = ChallengeTag.where("challenge_id =? and challenge_choose_id is null", challenge.id) + if challenge_tags.present? + challenge_tags.each do |challenge_tag| + ChallengeTag.create!(:challenge_id => new_challenge.id, :name => challenge_tag.try(:name)) + end + end + elsif challenge.st == 1 # 选择题 + if challenge.challenge_chooses.present? + challenge.challenge_chooses.each do |challenge_choose| + new_challenge_choose = ChallengeChoose.new + new_challenge_choose.attributes = challenge_choose.attributes.dup.except("id","challenge_id") + new_challenge_choose.challenge_id = new_challenge.id + new_challenge_choose.save! + # 每一题的选项 + if challenge_choose.challenge_questions.present? + challenge_choose.challenge_questions.each do |challenge_question| + new_challenge_question = ChallengeQuestion.new + new_challenge_question.attributes = challenge_question.attributes.dup.except("id","challenge_choose_id") + new_challenge_question.challenge_choose_id = new_challenge_choose.id + new_challenge_question.save! + end + end + # 每一题的知识标签 + st_challenge_tags = ChallengeTag.where(:challenge_id => challenge.id, :challenge_choose_id => challenge_choose.id) + if st_challenge_tags.present? + st_challenge_tags.each do |st_challenge_tag| + ChallengeTag.create!(:challenge_id => new_challenge.id, :name => st_challenge_tag.try(:name), :challenge_choose_id => new_challenge_choose.id) + end end end end end end end + # 中间层创建测试集 + shixun_tomcat = Redmine::Configuration['shixun_tomcat'] + gameInfo = new_shixun.gameInfo + uri ="#{shixun_tomcat}/bridge/game/publishGame" + params = {gameInfo:gameInfo} + res = uri_exec uri, params + if res && res['code'].to_i != 0 + raise("实训云平台繁忙(繁忙等级:90)") + end + raise("test") + redirect_to shixun_path(new_shixun) + rescue Exception => e + logger.info("copy shixun failed ##{e.message}") + flash[:notice] = "#{e.message}" + g.delete_project(gshixun.id) if gshixun.try(:id).present? # 异常后,如果已经创建了版本库需要删除该版本库 + redirect_to shixun_path(@shixun) + raise ActiveRecord::Rollback end - # 中间层创建测试集 - shixun_tomcat = Redmine::Configuration['shixun_tomcat'] - gameInfo = new_shixun.gameInfo - uri ="#{shixun_tomcat}/bridge/game/publishGame" - params = {gameInfo:gameInfo} - res = uri_exec uri, params - if res && res['code'].to_i != 0 - raise("实训云平台繁忙(繁忙等级:90)") - end - redirect_to shixun_path(new_shixun) - rescue Exception => e - logger.info("copy shixun failed ##{e.message}") - flash[:notice] = "#{e.message}" - g.delete_project(gshixun.id) if gshixun.id.present? # 异常后,如果已经创建了版本库需要删除该版本库 - redirect_to shixun_path(@shixun) - raise ActiveRecord::Rollback end end diff --git a/app/models/shixun.rb b/app/models/shixun.rb index 40c2237f0..7ba0ae5ca 100644 --- a/app/models/shixun.rb +++ b/app/models/shixun.rb @@ -10,7 +10,7 @@ # class Shixun < ActiveRecord::Base attr_accessible :description, :is_public, :name, :changeset_num, :status, :user_id, :gpid, :language, :identifier, :authentication, - :myshixun_count, :propaedeutics, :trainee, :major_id, :homepage_show, :webssh, :hidden + :myshixun_count, :propaedeutics, :trainee, :major_id, :homepage_show, :webssh, :hidden, :fork_from, :can_copy has_many :users, :through => :shixun_members has_many :shixun_members, :dependent => :destroy diff --git a/lib/gitlab-cli/lib/gitlab/client/projects.rb b/lib/gitlab-cli/lib/gitlab/client/projects.rb index 2cc96c4d1..a773c29bb 100644 --- a/lib/gitlab-cli/lib/gitlab/client/projects.rb +++ b/lib/gitlab-cli/lib/gitlab/client/projects.rb @@ -85,8 +85,8 @@ class Gitlab::Client # public (optional) - if true same as setting visibility_level = 20 # visibility_level (optional) - def edit_project(id, visibility_level, default_branch) - put("/projects/#{id}", :body => {:visibility_level => visibility_level, :default_branch => default_branch}) + def edit_project(id, name, path) + put("/projects/#{id}", :body => {:name => name, :path => path}) end # Deletes a project. From 3df0b71d0f85b0e217ef629481b0301c77955473 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 22 Sep 2017 10:09:34 +0800 Subject: [PATCH 07/15] =?UTF-8?q?=E5=A4=8D=E5=88=B6=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E6=B7=BB=E5=8A=A0=E9=94=99=E8=AF=AF=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- app/controllers/shixuns_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index b7032cef3..064a19c91 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -36,7 +36,7 @@ class CoursesController < ApplicationController before_filter :require_login, :only => [:join, :unjoin] #before_filter :allow_join, :only => [:join] require 'bundler/setup' - # require 'simple_xlsx_reader' + require 'simple_xlsx_reader' # params[:search] 搜索课程的名称 # params[:select] "join" "create" "all" 参与的 创建的 所有的课程 diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index 7e003505d..aa97dbaab 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -637,7 +637,7 @@ class ShixunsController < ApplicationController logger.info("copy shixun failed ##{e.message}") flash[:notice] = "#{e.message}" g.delete_project(gshixun.id) if gshixun.try(:id).present? # 异常后,如果已经创建了版本库需要删除该版本库 - redirect_to shixun_path(@shixun) + redirect_to shixun_challenges_path(@shixun) raise ActiveRecord::Rollback end end From 821abc843444f2ac3a2d125509f5c3185499b8dd Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 22 Sep 2017 10:38:56 +0800 Subject: [PATCH 08/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=90=E9=86=92=E5=8F=8A=E8=BF=87=E6=B8=A1?= =?UTF-8?q?=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/shixuns/_shixun_top.html.erb | 4 ++-- public/javascripts/edu/application.js | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/views/shixuns/_shixun_top.html.erb b/app/views/shixuns/_shixun_top.html.erb index 08b887ce8..1d26fc732 100644 --- a/app/views/shixuns/_shixun_top.html.erb +++ b/app/views/shixuns/_shixun_top.html.erb @@ -36,8 +36,8 @@ 已关闭 <% end %> <% if @shixun.can_copy && User.current.manager_of_shixun?(@shixun) %> - <%= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15" %> - + <%#= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15" %> + 复制 <% end %> <% end %>
    diff --git a/public/javascripts/edu/application.js b/public/javascripts/edu/application.js index b90880a8a..2c4e5ded7 100644 --- a/public/javascripts/edu/application.js +++ b/public/javascripts/edu/application.js @@ -253,6 +253,13 @@ function op_confirm_box(url, str){ pop_box_new(htmlvalue, 578, 205); } +function op_confirm_box_loading(url, str){ + var htmlvalue = '

    提示

    '+ + '

    ' + str + '

    '; + pop_box_new(htmlvalue, 578, 205); +} + // 两个按钮 点击确认跳转, 提示信息有两行 function s_op_confirm_box(url, str){ var htmlvalue = '

    提示

    '+ From 29acff9ddee5aa5cc087e8a5e15128346d2bbcd1 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 22 Sep 2017 10:58:15 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=8A=9B=E5=87=BA?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index e9d7167ab..784b3dddb 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -631,7 +631,6 @@ class ShixunsController < ApplicationController if res && res['code'].to_i != 0 raise("实训云平台繁忙(繁忙等级:90)") end - raise("test") redirect_to shixun_path(new_shixun) rescue Exception => e logger.info("copy shixun failed ##{e.message}") From 6f8491ca94f3f2d48b3b78376810b2009a0b4a1c Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 22 Sep 2017 11:00:08 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=BB=99=E5=87=BA=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index 784b3dddb..455b360a5 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -631,7 +631,8 @@ class ShixunsController < ApplicationController if res && res['code'].to_i != 0 raise("实训云平台繁忙(繁忙等级:90)") end - redirect_to shixun_path(new_shixun) + flash[:notice] = "实训复制成功" + redirect_to shixun_challenges_path(new_shixun) rescue Exception => e logger.info("copy shixun failed ##{e.message}") flash[:notice] = "#{e.message}" From 7570a8314253773979b5ba6a7fd0b8ac20403fbd Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 22 Sep 2017 11:15:18 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E9=87=8C=E7=9A=84?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=EF=BC=8C=E8=A6=81=E6=A0=87=E6=98=8E=E6=98=AF?= =?UTF-8?q?=E5=AF=B9=E5=93=AA=E4=B8=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/discusses_controller.rb | 6 +++--- app/controllers/shixuns_controller.rb | 2 ++ app/models/discuss.rb | 2 +- app/views/games/_game_show.html.erb | 2 +- app/views/games/_shixun_comment_block.html.erb | 2 +- app/views/games/_shixun_comment_list.html.erb | 6 ++++-- app/views/shixuns/_form.html.erb | 2 +- db/migrate/20170922015144_add_challenge_id_to_discusses.rb | 5 +++++ 8 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 db/migrate/20170922015144_add_challenge_id_to_discusses.rb diff --git a/app/controllers/discusses_controller.rb b/app/controllers/discusses_controller.rb index ba3c12665..e99d7b374 100644 --- a/app/controllers/discusses_controller.rb +++ b/app/controllers/discusses_controller.rb @@ -6,12 +6,12 @@ class DiscussesController < ApplicationController def create if @model if params[:reply_id].blank? - @model.discusses << Discuss.new(:content => params[:content], :user_id => User.current.id, :praise_count => 0) + @model.discusses << Discuss.new(:content => params[:content], :user_id => User.current.id, :praise_count => 0, :challenge_id => params[:challenge_id]) else - @model.discusses << Discuss.new(:content => params[:content], :user_id => User.current.id, :parent_id => params[:reply_id], :root_id => params[:reply_id], :praise_count => 0) + @model.discusses << Discuss.new(:content => params[:content], :user_id => User.current.id, :parent_id => params[:reply_id], :root_id => params[:reply_id], :praise_count => 0, :challenge_id => params[:challenge_id]) end if params[:dis_type] == "Shixun" - redirect_to shixun_discuss_shixun_path(@model) + redirect_to shixun_discuss_shixun_path(@model, :challenge_id => params[:challenge_id]) end end end diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index cfbeacef6..3f6be4a30 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -602,6 +602,8 @@ class ShixunsController < ApplicationController @discusses_pages = Paginator.new @discusses_count, @limit, params['page'] || 1 @offset ||= @discusses_pages.offset @discusses = paginateHelper @discusses, @limit + #@game_challenge = params[:challenge_id].blank? ? Challenge.find(@discusses.challenge_id) : Challenge.find(params[:challenge_id]) + @game_challenge = Challenge.find(params[:challenge_id].to_i) end def destroy diff --git a/app/models/discuss.rb b/app/models/discuss.rb index dbf0f99ec..effd1cb26 100644 --- a/app/models/discuss.rb +++ b/app/models/discuss.rb @@ -1,6 +1,6 @@ class Discuss < ActiveRecord::Base belongs_to :user - attr_accessible :user_id, :content, :dis_id, :dis_type, :parent_id, :praise_count, :root_id + attr_accessible :user_id, :content, :dis_id, :dis_type, :parent_id, :praise_count, :root_id, :challenge_id has_many :praise_tread, as: :praise_tread_object, dependent: :destroy has_one :praise_tread_cache, as: :object, dependent: :destroy diff --git a/app/views/games/_game_show.html.erb b/app/views/games/_game_show.html.erb index a78757022..f9cc0c126 100644 --- a/app/views/games/_game_show.html.erb +++ b/app/views/games/_game_show.html.erb @@ -33,7 +33,7 @@ <% end %>
  • - + 评论<%= @discusses_count if @discusses_count > 0%> <%#= link_to '', shixun_discuss_shixun_path(@myshixun.shixun), :class => "tab_type", :style => "font-size: 16px", :remote => true %> diff --git a/app/views/games/_shixun_comment_block.html.erb b/app/views/games/_shixun_comment_block.html.erb index 53fc4caaf..6a39b71a4 100644 --- a/app/views/games/_shixun_comment_block.html.erb +++ b/app/views/games/_shixun_comment_block.html.erb @@ -1,5 +1,5 @@
  • - <%= form_for('', :url => {:controller => 'discusses', :action => 'create', :dis_id => @shixun.id, :dis_type => "Shixun"}, :method => "post", :remote => true, :html => {:id => 'new_comment_form'}) do |f| %> + <%= form_for('', :url => {:controller => 'discusses', :action => 'create', :dis_id => @shixun.id, :dis_type => "Shixun", :challenge_id => @game_challenge.try(:id)}, :method => "post", :remote => true, :html => {:id => 'new_comment_form'}) do |f| %> <% end %> diff --git a/app/views/games/_shixun_comment_list.html.erb b/app/views/games/_shixun_comment_list.html.erb index ebad14776..3739212ba 100644 --- a/app/views/games/_shixun_comment_list.html.erb +++ b/app/views/games/_shixun_comment_list.html.erb @@ -11,8 +11,10 @@

    <%= link_to dis.user.show_name, user_path(dis.user), :class => "fl link-color-grey mr20" ,:style => "display: block" %> - <%= time_from_now dis.created_at %> - + <%= time_from_now dis.created_at %> + <% if dis.try(:challenge_id).present? %> + [第<%= Challenge.find(dis.try(:challenge_id)).try(:position) %>关] + <% end %> <%= render :partial => "discusses/dis_praise", :locals => {:discuss => dis} %> diff --git a/app/views/shixuns/_form.html.erb b/app/views/shixuns/_form.html.erb index 4bf50e168..b51623721 100644 --- a/app/views/shixuns/_form.html.erb +++ b/app/views/shixuns/_form.html.erb @@ -199,7 +199,7 @@ placeholder: "请输入完成实训任务依赖的背景知识", imageUpload : true, imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"], - imageUploadURL : "<%#= upload_with_markdown_path(:container_id => @shixun.id, :container_type => @shixun.class) %>" //url + imageUploadURL : "<%= upload_with_markdown_path(:container_id => @shixun.id, :container_type => @shixun.class) %>" //url }); ////////////////////////////////////////////////////////////// //提交新建项目 diff --git a/db/migrate/20170922015144_add_challenge_id_to_discusses.rb b/db/migrate/20170922015144_add_challenge_id_to_discusses.rb new file mode 100644 index 000000000..190ac94f4 --- /dev/null +++ b/db/migrate/20170922015144_add_challenge_id_to_discusses.rb @@ -0,0 +1,5 @@ +class AddChallengeIdToDiscusses < ActiveRecord::Migration + def change + add_column :discusses, :challenge_id, :integer + end +end From ac92ba649d9b6d92f035be48818ba4401c4de9dd Mon Sep 17 00:00:00 2001 From: cxt Date: Fri, 22 Sep 2017 11:18:12 +0800 Subject: [PATCH 12/15] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_work_controller.rb | 2 +- app/helpers/student_work_helper.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 70052e997..5a1366d2f 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -359,7 +359,7 @@ class StudentWorkController < ApplicationController end end ################################################################################################################## - if @homework.homework_type == 4 && (@homework.publish_time > Time.now || (@homework.publish_time <= Time.now && @homework.allow_late)) + if @homework.homework_type == 4 && @homework.homework_detail_manual.comment_status > 0 && (@homework.publish_time > Time.now || (@homework.publish_time <= Time.now && @homework.allow_late)) update_shixun_work_status @homework end @order,@b_sort,@name,@group,@comment,@status = params[:order] || "updated_at",params[:sort] || "desc",params[:name].to_s.strip || "",params[:group], params[:comment], params[:status] diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb index cf6b5b5d4..993e4d9eb 100644 --- a/app/helpers/student_work_helper.rb +++ b/app/helpers/student_work_helper.rb @@ -6,7 +6,7 @@ module StudentWorkHelper homework.student_works.where(:work_status => 0).each do |work| myshixun = Myshixun.where(:shixun_id => homework.homework_commons_shixuns.shixun_id, :user_id => work.user_id).first if myshixun - work.update_attributes(:work_status => myshixun.created_at <= homework.publish_time ? 1 : 2, :commit_time => myshixun.created_at, :myshixun_id => myshixun.id) + work.update_attributes(:work_status => myshixun.created_at <= homework.end_time ? 1 : 2, :late_penalty => myshixun.created_at <= homework.end_time ? 0 : homework.late_penalty, :commit_time => myshixun.created_at, :myshixun_id => myshixun.id) end end end From d934d26a30a4ea275bce39d9d0ce0ef40fa42d1b Mon Sep 17 00:00:00 2001 From: cxt Date: Fri, 22 Sep 2017 11:19:28 +0800 Subject: [PATCH 13/15] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E7=9A=84=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/shixuns/_shixun_top.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/shixuns/_shixun_top.html.erb b/app/views/shixuns/_shixun_top.html.erb index 1d26fc732..e13c99d5d 100644 --- a/app/views/shixuns/_shixun_top.html.erb +++ b/app/views/shixuns/_shixun_top.html.erb @@ -35,10 +35,10 @@ <% end %> 已关闭 <% end %> - <% if @shixun.can_copy && User.current.manager_of_shixun?(@shixun) %> + <%# if @shixun.can_copy && User.current.manager_of_shixun?(@shixun) %> <%#= link_to "复制", copy_shixun_path(@shixun), :class => "fr shixun-task-btn task-btn-green mr15" %> - 复制 - <% end %> + + <%# end %> <% end %>

    <% unless User.current.manager_of_shixun?(@shixun) %> From 35a1c8b9c20ffe28af6d3b2641d49c0cee55c614 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 22 Sep 2017 11:23:57 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E8=AF=84=E6=B5=8B83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/shixuns_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index 455b360a5..d02293a6c 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -404,7 +404,7 @@ class ShixunsController < ApplicationController myshixun.update_column(:gpid, gshixun.id) if myshixun.try(:gpid).blank? # 为了防止多次fork rep = Repository.create!(:myshixun_id => myshixun.id, :identifier => gshixun.name,:project_id => -1, :shixun_id => -2) rep.update_column(:type, "Repository::Gitlab") - rep_url = Base64.urlsafe_encode64(git_shixun_url_ip @shixun, "educoder") # 注意:educoder为默认给实训创建版本库的用户,如果换成别的用户,名字要相应的修改 + rep_url = Base64.urlsafe_encode64(git_shixun_url_ip @shixun, (@shixun.try(:fork_from).blank? ? "educoder" : "eduforge")) # 注意:educoder为默认给实训创建版本库的用户,如果换成别的用户,名字要相应的修改 logger.info("start openGameInstance") uri = "#{shixun_tomcat}/bridge/game/openGameInstance" logger.info("end openGameInstance") From 46820b959e8f754c7d366b1c2c5d1b5b13d49bf4 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 22 Sep 2017 15:47:42 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=AD=94=E6=A1=88=E5=90=8E=E9=80=9A=E5=85=B3=EF=BC=8C=E8=B7=B3?= =?UTF-8?q?=E5=88=B0=E4=B8=8B=E4=B8=80=E5=85=B3=E6=97=B6=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=A0=8F=E6=98=BE=E7=A4=BA=E6=9C=89=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/games/_code_actions.html.erb | 4 ++-- app/views/games/_game_show.html.erb | 4 ++-- app/views/games/_games_list.html.erb | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/views/games/_code_actions.html.erb b/app/views/games/_code_actions.html.erb index 47f53c442..239fa8d8d 100644 --- a/app/views/games/_code_actions.html.erb +++ b/app/views/games/_code_actions.html.erb @@ -204,8 +204,8 @@ console.log(data.score); console.log(data.tag_count); console.log($("#shixun_exp_<%=@game_challenge.id %>")[0]); - $("#shixun_exp_<%=@game_challenge.id %>").html("经验值+"+ data.score + ""); - $("#shixun_grade_<%=@game_challenge.id %>").html("金币+"+ data.gold + ""); + $("#shixun_exp_<%=@game_challenge.id %>").html("经验值+"+ data.final_score + ""); + $("#shixun_grade_<%=@game_challenge.id %>").html("金币"+ (data.gold < 0 ? data.gold : ("+" + data.gold)) + ""); $("#shixun_tag_<%=@game_challenge.id %>").html("技能标签+"+ data.tag_count + ""); icon.find("i").attr("class", "fa fa-unlock fr font-18 mt5 color-light-green w20_center"); icon.find("a:last").attr("title", "已完成"); diff --git a/app/views/games/_game_show.html.erb b/app/views/games/_game_show.html.erb index f9cc0c126..a6acdaa1c 100644 --- a/app/views/games/_game_show.html.erb +++ b/app/views/games/_game_show.html.erb @@ -39,9 +39,9 @@ <%#= link_to '', shixun_discuss_shixun_path(@myshixun.shixun), :class => "tab_type", :style => "font-size: 16px", :remote => true %>
  • <% if @st == 0 %> - 经验值:<%= @game_challenge.score %> + 经验值:<%= @game_challenge.score.to_i %> <% else %> - 经验值:<%= @game_challenge.choose_score %> + 经验值:<%= @game_challenge.choose_score.to_i %> <% end %> diff --git a/app/views/games/_games_list.html.erb b/app/views/games/_games_list.html.erb index e12654052..ed0ac1851 100644 --- a/app/views/games/_games_list.html.erb +++ b/app/views/games/_games_list.html.erb @@ -48,10 +48,10 @@ 知识点<%= challenge.choose_tags_num %> <% end %> <% elsif game.try(:status) == 2 %> - <%# final_score = (game.answer_open? || @myshixun.shixun.status <= 1) ? 0 : game.final_score.to_i %> - <%# gold_score = @myshixun.shixun.status <= 1 ? 0 : (game.answer_open? ? -challenge.score.to_i : game.final_score.to_i) %> - 经验值+<%= @final_score %> - 金币 ml5"><%= @gold < 0 ? @gold : "+"+@gold.to_s %> + <% final_score = (game.answer_open? || @myshixun.shixun.status <= 1) ? 0 : game.final_score.to_i %> + <% gold_score = @myshixun.shixun.status <= 1 ? 0 : (game.answer_open? ? -challenge.score.to_i : game.final_score.to_i) %> + 经验值+<%= final_score %> + 金币 ml5"><%= gold_score < 0 ? gold_score : "+"+gold_score.to_s %> 技能标签+<%= (game.answer_open? || @myshixun.shixun.status <= 1) ? 0 : challenge.challenge_tags.count %> <% end %>