dev_haigong
cxt 6 years ago
commit 23753d8977

@ -106,7 +106,7 @@ class GraduationTopicsController < ApplicationController
def student_select_topic def student_select_topic
if User.current.student_graduation_topics.where(:course_id => @course.id, :status => [0, 1]).count == 0 if User.current.student_graduation_topics.where(:course_id => @course.id, :status => [0, 1]).count == 0
@topic.student_graduation_topics << StudentGraduationTopic.new(:course_id => @course.id, :user_id => User.current.id, @topic.student_graduation_topics << StudentGraduationTopic.new(:course_id => @course.id, :user_id => User.current.id,
:member_id => @course.members.where(:user_id => User.current.id).first.try(:id)) :member_id => @course.course_members.where(:user_id => current_user.id).first.try(:id))
@topic.update_attributes(:status => 1) @topic.update_attributes(:status => 1)
end end
redirect_to graduation_topic_path(@topic) redirect_to graduation_topic_path(@topic)

@ -451,15 +451,12 @@ class MyshixunsController < ApplicationController
# 只有评测中的game才会创建和更新代码评测中的信息 # 只有评测中的game才会创建和更新代码评测中的信息
logger.info("##################game: #{game.status}") logger.info("##################game: #{game.status}")
logger.info("##################retry_status: #{game.retry_status}") logger.info("##################retry_status: #{game.retry_status}")
if game.status == 1 || game.status == 2 && game.retry_status == 1 if game.status == 1 || game.status == 2
if msg.blank? if msg.blank?
RunCodeMessage.create!(:game_id => game_id, :status => 1, :message => message) RunCodeMessage.create!(:game_id => game_id, :status => 1, :message => message)
else else
msg.update_attributes(:status => (msg.status + 1), :message => message) msg.update_attributes(:status => (msg.status + 1), :message => message)
end end
else
# 评测完成,初始化评测信息的状态
msg.update_attributes(:status => 0, :message => nil) if msg.present?
end end
render :json => {:data => "success"} render :json => {:data => "success"}
end end

@ -29,6 +29,156 @@ class WelcomeController < ApplicationController
require 'simple_xlsx_reader' require 'simple_xlsx_reader'
DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z)
def shixun_to_local
identifiers = params[:identifiers].split(",")
shixuns = Shixun.where(identifier: identifiers)
# 不重复导入
ActiveRecord::Base.transaction do
begin
shixuns.each do |shixun|
if LocalShixun.where(shixun_id: shixun.id).blank?
local_shixun = LocalShixun.create!(name: shixun.name, description: shixun.description, user_id: User.current.id, status: 0,
trainee: shixun.trainee, webssh: shixun.webssh, multi_webssh: shixun.multi_webssh,
can_copy: shixun.can_copy, identifier: generate_identifier, shixun_id: shixun.id,
use_scope: shixun.use_scope, visits: 1, evaluate_script: shixun.evaluate_script)
# 同步镜像
if shixun.mirror_repositories.present?
shixun.mirror_repositories.each do |mirror|
LocalMirrorRepository.create!(:local_shixun_id => local_shixun.id, :mirror_repository_id => mirror.id)
end
end
# 同步技术标签
shixun.shixun_tag_repertoires.each do |str|
LocalShixunTagRepertoire.create!(:tag_repertoire_id => str.tag_repertoire_id, :local_shixun_id => local_shixun.id)
end
# 不需要同步版本库,版本库应该是从本地导入到线上的时候由线上版本创建的
# 同步复制关卡
if shixun.challenges.present?
shixun.challenges.each do |challenge|
new_challenge = LocalChallenge.new
new_challenge.attributes = challenge.attributes.dup.except("id","shixun_id","user_id")
new_challenge.local_shixun_id = local_shixun.id
new_challenge.save!
# 评测题,选择题暂时不考虑
# 同步测试集
if challenge.test_sets.present?
challenge.test_sets.each do |test_set|
new_test_set = LocalTestSet.new
new_test_set.attributes = test_set.attributes.dup.except("id","challenge_id")
new_test_set.local_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|
LocalChallengeTag.create!(:local_challenge_id => new_challenge.id, :name => challenge_tag.try(:name))
end
end
end
end
end
end
render :json => {status: 0, message: "同步成功"}
rescue Exception => e
logger.error("shixun_local_in ##{e.message}")
render :json => {status: -1, message: "同步失败,#{e.message}"}
raise ActiveRecord::Rollback
end
end
end
def local_to_shixun
ActiveRecord::Base.transaction do
LocalShixun.find_each do |local_shixun|
identifier = generate_identifier
shixun = Shixun.create!(name: local_shixun.name, description: local_shixun.description, user_id: User.current.id,
trainee: local_shixun.trainee, webssh: local_shixun.webssh, multi_webssh: local_shixun.multi_webssh,
can_copy: local_shixun.can_copy, identifier: identifier, reset_time: Time.now,
modify_time: Time.now, use_scope: local_shixun.use_scope, visits: 1, evaluate_script: local_shixun.evaluate_script)
m = ShixunMember.new(:user_id => User.current.id, :role => 1)
shixun.shixun_members << m
# 同步镜像
local_mirrors = LocalMirrorRepository.where(local_shixun_id: local_shixun.id)
if local_mirrors.present?
local_mirrors.each do |local_mirror|
ShixunMirrorRepository.create!(:shixun_id => shixun.id, :mirror_repository_id => local_mirror.mirror_repository_id)
end
end
# 同步技术标签
local_shixun_tags = LocalShixunTagRepertoire.where(local_shixun_id: local_shixun.id)
if local_shixun_tags.present?
local_shixun_tags.each do |str|
ShixunTagRepertoire.create!(:tag_repertoire_id => str.tag_repertoire_id, :shixun_id => shixun.id)
end
end
# 创建版本库
repository = Repository.new
repository.shixun = shixun
repository.type = 'Repository::Gitlab'
repository.identifier = shixun.identifier.downcase
repository.project_id = -1
repository.save!
s = Trustie::Gitlab::Sync.new
s.create_shixun(shixun, repository)
raise "版本库创建失败" if shixun.gpid.blank? # 若和gitlab没同步成功则抛出异常
g = Gitlab.client
shixun.update_column(:git_url, g.project(shixun.gpid).path_with_namespace)
# 同步关卡信息
local_challenges = LocalChallenge.where(local_shixun_id: local_shixun.id)
if local_challenges.present?
local_challenges.each do |local_challenge|
new_challenge = Challenge.new
new_challenge.attributes = local_challenge.attributes.dup.except("id","local_shixun_id","user_id")
new_challenge.user_id = User.current.id
new_challenge.shixun_id = shixun.id
new_challenge.save!
# 同步测试集
local_test_sets = LocalTestSet.where(local_challenge_id: local_challenge.id)
if local_test_sets.present?
local_test_sets.each do |local_test_set|
new_test_set = TestSet.new
new_test_set.attributes = local_test_set.attributes.dup.except("id","challenge_id")
new_test_set.challenge_id = new_challenge.id
new_test_set.save!
end
end
# 同步关卡标签
local_challenge_tags = LocalChallengeTag.where(local_challenge_id: local_challenge.id)
if local_challenge_tags.present?
local_challenge_tags.each do |local_challenge_tag|
ChallengeTag.create!(:challenge_id => new_challenge.id, :name => local_challenge_tag.try(:name))
end
end
end
end
render :json => {status: 0, message: "success", identifier: shixun.identifier}
end
end
end
# 生成表示码
def generate_identifier
code = DCODES.sample(8).join
return generate_identifier if Shixun.where(identifier: code).present?
code
end
def index def index
images = PortalImage.where(status: true).order("position asc") images = PortalImage.where(status: true).order("position asc")
@images_url = [] @images_url = []

@ -0,0 +1,3 @@
class LocalChallenge < ActiveRecord::Base
end

@ -0,0 +1,3 @@
class LocalChallengeTag < ActiveRecord::Base
end

@ -0,0 +1,3 @@
class LocalMirrorRepository < ActiveRecord::Base
end

@ -0,0 +1,3 @@
class LocalShixun < ActiveRecord::Base
end

@ -0,0 +1,2 @@
class LocalShixunTagRepertoire < ActiveRecord::Base
end

@ -0,0 +1,3 @@
class LocalTestSet < ActiveRecord::Base
end

@ -1,4 +1,4 @@
class ShixunTagRepertoire < ActiveRecord::Base class ShixunTagRepertoire < ActiveRecord::Base
# attr_accessible :title, :body # attr_accessible :title, :body
belongs_to :shixun belongs_to :shixun
belongs_to :tag_repertoire belongs_to :tag_repertoire

@ -297,7 +297,7 @@
$("#test_file_name").show(); $("#test_file_name").show();
}else{ }else{
$("#challenge_shixun_update").submit(); $("#challenge_shixun_update").submit();
location.reload(); // location.reload();
} }
} }
</script> </script>

@ -1,5 +1,14 @@
<% @partners.each_with_index do |partner,index| %> <% @partners.each_with_index do |partner,index| %>
<li> <li class="clearfix">
<%= link_to "#{partner.name}", partners_managements_path(:partner => partner), :class => "#{partner.id == @current_partner.id ? 'active' : ''}" %> <%= link_to "#{partner.name}", partners_managements_path(:partner => partner), :class => "#{partner.id == @current_partner.id ? 'active' : ''} fl" %>
<% if false %>
<div class="fr mr10 edu-menu-panel mt5">
<i class="iconfont icon-sandian color-grey-9 font-14"></i>
<ul class="edu-menuSmall-list edu-txt-center">
<li><a href="javascript:void(0)">查看</a></li>
<li><a href="javascript:void(0)" onclick="delPartners();">删除</a></li>
</ul>
</div>
<% end %>
</li> </li>
<% end %> <% end %>

@ -5,7 +5,7 @@
<a href="javascript:void(0)" class="fl task-btn ml10" onclick="$('#partner_search').val('')">清除</a> <a href="javascript:void(0)" class="fl task-btn ml10" onclick="$('#partner_search').val('')">清除</a>
</div> </div>
<div class="clearfix mt20"> <div class="clearfix mt20">
<div class="with25 fl edu-back-white"> <div class="with25 fl">
<%= link_to "+添加",all_partners_managements_path,remote:true,class:"color-blue addOperation" %> <%= link_to "+添加",all_partners_managements_path,remote:true,class:"color-blue addOperation" %>
<ul class="partnerList" id="partner_list"> <ul class="partnerList" id="partner_list">
<%= render :partial => "partner_list" %> <%= render :partial => "partner_list" %>
@ -29,4 +29,9 @@
function submit_search_partner(){ function submit_search_partner(){
$.get("/managements/partners?search="+$("#partner_search").val()); $.get("/managements/partners?search="+$("#partner_search").val());
} }
function delPartners(){
delete_confirm_box_2("","确定删除合作伙伴?");
}
</script> </script>

@ -281,6 +281,9 @@ RedmineApp::Application.routes.draw do ## oauth相关
end end
get 'welcome/ccf' => 'welcome#ccf' get 'welcome/ccf' => 'welcome#ccf'
get 'welcome/shixun_to_local' => 'welcome#shixun_to_local'
get 'welcome/local_to_shixun' => 'welcome#local_to_shixun'
# get 'competitions/home' => 'competitions#home' # get 'competitions/home' => 'competitions#home'
# get 'competitions/hn' => 'competitions#index' # get 'competitions/hn' => 'competitions#index'
# get 'competitions/db' => 'competitions#db' # get 'competitions/db' => 'competitions#db'

@ -1,12 +1,12 @@
class MigrateHomeworkCommonEndTimes < ActiveRecord::Migration class MigrateHomeworkCommonEndTimes < ActiveRecord::Migration
def up def up
homework_commons = HomeworkCommon.where("id < 21549") # homework_commons = HomeworkCommon.where("id < 21549")
homework_commons.find_each do |homework| # homework_commons.find_each do |homework|
sql = "update homework_commons set end_time = (select max(end_time) from # sql = "update homework_commons set end_time = (select max(end_time) from
homework_seconds where id = #{homework.id}) where id = #{homework.id}" # homework_seconds where id = #{homework.id}) where id = #{homework.id}"
#
ActiveRecord::Base.connection.execute(sql) # ActiveRecord::Base.connection.execute(sql)
end # end
end end
def down def down

@ -1,11 +1,11 @@
class MigrateHomeworkCommonEndTime2 < ActiveRecord::Migration class MigrateHomeworkCommonEndTime2 < ActiveRecord::Migration
def up def up
homework_commons = HomeworkCommon.where("id >= 21549") # homework_commons = HomeworkCommon.where("id >= 21549")
homework_commons.each do |homework| # homework_commons.each do |homework|
if homework.publish_time.nil? # if homework.publish_time.nil?
homework.update_column('end_time', nil) # homework.update_column('end_time', nil)
end # end
end # end
end end
def down def down

@ -0,0 +1,47 @@
class CreateLocalShixuns < ActiveRecord::Migration
def change
create_table :local_shixuns do |t|
t.string :name
t.text :description
t.integer :user_id
t.integer :gpid
t.integer :visits
t.integer :status
t.string :language
t.text :authentication
t.string :identifier
t.text :propaedeutics
t.integer :trainee
t.integer :major_id
t.integer :webssh
t.boolean :homepage_show
t.boolean :hidden
t.integer :fork_from
t.boolean :can_copy
t.datetime :modifiy_tim
t.datetime :reset_time
t.integer :closer_id
t.datetime :end_time
t.string :git_url
t.boolean :vnc
t.integer :myshixuns_count
t.integer :challenges_count
t.integer :use_scope
t.text :evaluate_script
t.integer :mirror_script_id
t.string :image_text
t.boolean :code_hidden
t.boolean :task_pass
t.integer :exec_time
t.string :test_set_permission
t.boolean :sigle_training
t.boolean :hide_code
t.boolean :multi_webssh
t.integer :excute_time
t.integer :averge_star
t.integer :forbid_copy
t.timestamps
end
end
end

@ -0,0 +1,10 @@
class CreateLocalMirrorRepositories < ActiveRecord::Migration
def change
create_table :local_mirror_repositories do |t|
t.integer :local_shixun_id
t.integer :mirror_repository_id
t.timestamps
end
end
end

@ -0,0 +1,10 @@
class CreateLocalShixunTagRepertoires < ActiveRecord::Migration
def change
create_table :local_shixun_tag_repertoires do |t|
t.integer :tag_repertoire_id
t.integer :local_shixun_id
t.timestamps
end
end
end

@ -0,0 +1,29 @@
class CreateLocalChallenges < ActiveRecord::Migration
def change
create_table :local_challenges do |t|
t.integer :local_shixun_id
t.string :subject
t.integer :status
t.integer :position
t.text :task_pass
t.text :answer
t.integer :score
t.integer :visits
t.string :path
t.integer :evaluation_way
t.integer :difficulty
t.string :exec_path
t.integer :code_line
t.integer :st
t.text :web_route
t.text :picture_path
t.text :expect_picture_path
t.integer :challenge_tags_count
t.datetime :modify_time
t.string :original_picture_path
t.integer :show_type
t.timestamps
end
end
end

@ -0,0 +1,14 @@
class CreateLocalTestSets < ActiveRecord::Migration
def change
create_table :local_test_sets do |t|
t.text :input
t.text :output
t.integer :local_challenge_id
t.integer :is_public
t.integer :result
t.integer :position
t.timestamps
end
end
end

@ -0,0 +1,10 @@
class CreateLocalChallengeTags < ActiveRecord::Migration
def change
create_table :local_challenge_tags do |t|
t.string :name
t.integer :local_challenge_id
t.timestamps
end
end
end

@ -0,0 +1,5 @@
class AddTestSetScoreToLocalChallenge < ActiveRecord::Migration
def change
add_column :local_challenges, :test_set_score, :integer
end
end

@ -0,0 +1,5 @@
class AddShixunIdToLocalShixun < ActiveRecord::Migration
def change
add_column :local_shixuns, :shixun_id, :integer
end
end

@ -0,0 +1,5 @@
class AddScoreToLocalTestSets < ActiveRecord::Migration
def change
add_column :local_test_sets, :score, :integer
end
end

File diff suppressed because one or more lines are too long

@ -2974,15 +2974,18 @@ a.singlepublishtwo{
.edu-cooperation li{height: 60px;width: 210px;padding: 10px 0px;margin-left: 20px;float: left;margin-bottom: 20px;text-align: center;line-height: 40px;box-sizing: border-box} .edu-cooperation li{height: 60px;width: 210px;padding: 10px 0px;margin-left: 20px;float: left;margin-bottom: 20px;text-align: center;line-height: 40px;box-sizing: border-box}
.edu-cooperation li img{height: 40px;width: 210px;} .edu-cooperation li img{height: 40px;width: 210px;}
/*单位-合作伙伴*/ /*单位-合作伙伴*/
.addOperation{width: 100%;display: block;height: 56px;line-height: 56px;text-align: center;border-bottom: 1px solid #eee;} .addOperation{width: 100%;display: block;height: 56px;line-height: 56px;text-align: center;border-bottom: 1px solid #eee;background: #fff}
.partnerList li a{ .partnerList>li{
display: block;height: 40px;line-height: 40px;padding:0px 10px;width: 100%;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; background: #fff;
}
.partnerList>li>a{
display: block;height: 40px;line-height: 40px;padding:0px 10px;width: 87%;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;
box-sizing: border-box;position: relative; box-sizing: border-box;position: relative;
} }
.partnerList li a.active:after{ .partnerList>li>a.active:after{
position: absolute;left: 0px;height: 100%;width: 2px;content: '';background: #4cacff; position: absolute;left: 0px;height: 100%;width: 2px;content: '';background: #4cacff;
} }
.partnerList{max-height: 500px;overflow-y: auto;} /*.partnerList{max-height: 500px;overflow-y: auto;}*/
.manageList{float: left} .manageList{float: left}
.manageList li{width: 60px;float: left;margin-right: 15px;border-radius: 50%;text-align: center;position: relative;margin-bottom: 10px;} .manageList li{width: 60px;float: left;margin-right: 15px;border-radius: 50%;text-align: center;position: relative;margin-bottom: 10px;}
.manageList li>a.addManage,.manageList li>img{width: 60px;height: 60px;line-height: 49px;margin-right: 10px;border-radius: 50%;display: block} .manageList li>a.addManage,.manageList li>img{width: 60px;height: 60px;line-height: 49px;margin-right: 10px;border-radius: 50%;display: block}

@ -0,0 +1,6 @@
FactoryGirl.define do
factory :local_challenge_tag do
name "MyString"
local_challenge_id 1
end
end

@ -0,0 +1,25 @@
FactoryGirl.define do
factory :local_challenge do
local_shixun_id 1
subject "MyString"
status 1
position 1
task_pass ""
answer ""
score 1
visits 1
path "MyString"
evaluation_way 1
difficulty 1
exec_path "MyString"
code_line 1
st 1
web_route "MyText"
picture_path "MyText"
expect_picture_path "MyText"
challenge_tags_count 1
modify_time "2019-04-12 14:27:18"
original_picture_path "MyString"
show_type 1
end
end

@ -0,0 +1,6 @@
FactoryGirl.define do
factory :local_mirror_repository do
local_shixun_id 1
mirror_repository_id 1
end
end

@ -0,0 +1,6 @@
FactoryGirl.define do
factory :local_shixun_tag_repertoire do
tag_repertoire_id 1
local_shixun_id 1
end
end

@ -0,0 +1,37 @@
FactoryGirl.define do
factory :local_shixun do
name "MyString"
description "MyText"
user_id 1
gpid 1
visits 1
status 1
language "MyString"
authentication false
identifier "MyString"
propaedeutics "MyText"
trainee 1
major_id 1
webssh 1
homepage_show false
hidden false
fork_from 1
can_copy false
modifiy_tim "2019-04-12 09:21:34"
reset_time ""
closer_id 1
end_time "2019-04-12 09:21:34"
git_url "MyString"
vnc false
myshixuns_count 1
challenges_count 1
use_scope 1
evaluate_script ""
mirror_script_id 1
image_text "MyString"
code_hidden false
task_pass false
exec_time 1
test_set "MyString"
end
end

@ -0,0 +1,10 @@
FactoryGirl.define do
factory :local_test_set do
input ""
output ""
local_challenge_id 1
is_public 1
result 1
position 1
end
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe LocalChallenge, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe LocalChallengeTag, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe LocalMirrorRepository, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe LocalShixun, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe LocalShixunTagRepertoire, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe LocalTestSet, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end
Loading…
Cancel
Save