|
|
|
@ -24,49 +24,52 @@ class CreateShixunStudentWorks < ActiveRecord::Migration
|
|
|
|
|
shixun = work.homework_common.try(:homework_commons_shixuns).try(:shixun)
|
|
|
|
|
user = work.user
|
|
|
|
|
if shixun.present? && user.present?
|
|
|
|
|
# 创建新的myshixun和games
|
|
|
|
|
# fork版本库,如果用户没有同步,则先同步用户
|
|
|
|
|
g = Gitlab.client
|
|
|
|
|
if user.gid.nil?
|
|
|
|
|
s = Trustie::Gitlab::Sync.new
|
|
|
|
|
s.sync_user(user)
|
|
|
|
|
end
|
|
|
|
|
gshixun = g.fork(shixun.gpid, user.gid)
|
|
|
|
|
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
|
|
myshixun = Myshixun.where(:user_id => user.id, :shixun_id => shixun.id).first
|
|
|
|
|
if myshixun.blank?
|
|
|
|
|
# 创建新的myshixun和games
|
|
|
|
|
# fork版本库,如果用户没有同步,则先同步用户
|
|
|
|
|
g = Gitlab.client
|
|
|
|
|
if user.gid.nil?
|
|
|
|
|
s = Trustie::Gitlab::Sync.new
|
|
|
|
|
s.sync_user(user)
|
|
|
|
|
end
|
|
|
|
|
gshixun = g.fork(shixun.gpid, user.gid)
|
|
|
|
|
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
|
|
|
|
|
|
|
code = down_generate_identifier("myshixun")
|
|
|
|
|
# 一般通过默认分支是否存在来判断一个项目是否fork成功
|
|
|
|
|
if gshixun.try(:id).present?
|
|
|
|
|
commit_id = g.commits(shixun.gpid).first.try(:id)
|
|
|
|
|
# educoder 加入到myshixun中
|
|
|
|
|
myshixun_admin_gid = User.where(:login => "educoder").first.try(:gid)
|
|
|
|
|
g.add_team_member(gshixun.id, myshixun_admin_gid, 40) # 40代表角色master
|
|
|
|
|
code = down_generate_identifier("myshixun")
|
|
|
|
|
# 一般通过默认分支是否存在来判断一个项目是否fork成功
|
|
|
|
|
if gshixun.try(:id).present?
|
|
|
|
|
commit_id = g.commits(shixun.gpid).first.try(:id)
|
|
|
|
|
# educoder 加入到myshixun中
|
|
|
|
|
myshixun_admin_gid = User.where(:login => "educoder").first.try(:gid)
|
|
|
|
|
g.add_team_member(gshixun.id, myshixun_admin_gid, 40) # 40代表角色master
|
|
|
|
|
|
|
|
|
|
myshixun = Myshixun.create!(:shixun_id => shixun.id, :user_id => user.id, :identifier => code,
|
|
|
|
|
:modify_time => shixun.modify_time, :reset_time => shixun.reset_time,
|
|
|
|
|
:onclick_time => Time.now, :gpid => gshixun.id,
|
|
|
|
|
:git_url => gshixun.try(:path_with_namespace), :commit_id => commit_id)
|
|
|
|
|
myshixun = Myshixun.create!(:shixun_id => shixun.id, :user_id => user.id, :identifier => code,
|
|
|
|
|
:modify_time => shixun.modify_time, :reset_time => shixun.reset_time,
|
|
|
|
|
:onclick_time => Time.now, :gpid => gshixun.id,
|
|
|
|
|
:git_url => gshixun.try(:path_with_namespace), :commit_id => commit_id)
|
|
|
|
|
|
|
|
|
|
url = "#{Redmine::Configuration['gitlab_address_ip']}/#{g.project(shixun.try(:gpid)).try(:path_with_namespace)}.git"
|
|
|
|
|
url = "#{Redmine::Configuration['gitlab_address_ip']}/#{g.project(shixun.try(:gpid)).try(:path_with_namespace)}.git"
|
|
|
|
|
|
|
|
|
|
rep_url = Base64.urlsafe_encode64(url) # 注意:educoder为默认给实训创建版本库的用户,如果换成别的用户,名字要相应的修改
|
|
|
|
|
uri = "#{shixun_tomcat}/bridge/game/openGameInstance"
|
|
|
|
|
params = {tpiID: "#{myshixun.id}", tpmGitURL:rep_url, tpiRepoName: gshixun.try(:name)}
|
|
|
|
|
logger.info("openGameInstance params is #{params}")
|
|
|
|
|
uri = URI.parse(URI.encode(uri.strip))
|
|
|
|
|
res = Net::HTTP.post_form(uri, params).body
|
|
|
|
|
res = JSON.parse(res)
|
|
|
|
|
if (res && res['code'].to_i != 0)
|
|
|
|
|
raise("实训云平台繁忙(繁忙等级:83)")
|
|
|
|
|
end
|
|
|
|
|
# 其它创建关卡等操作
|
|
|
|
|
challenges = shixun.challenges
|
|
|
|
|
# 之所以增加user_id是为了方便统计查询性能
|
|
|
|
|
challenges.each_with_index do |challenge, index|
|
|
|
|
|
status = (index == 0 ? 0 : 3)
|
|
|
|
|
code = down_generate_identifier("game")
|
|
|
|
|
Game.create!(:challenge_id => challenge.id, :myshixun_id => myshixun.id, :status => status, :user_id => myshixun.user_id,
|
|
|
|
|
:open_time => Time.now, :identifier => code, :modify_time => challenge.modify_time)
|
|
|
|
|
rep_url = Base64.urlsafe_encode64(url) # 注意:educoder为默认给实训创建版本库的用户,如果换成别的用户,名字要相应的修改
|
|
|
|
|
uri = "#{shixun_tomcat}/bridge/game/openGameInstance"
|
|
|
|
|
params = {tpiID: "#{myshixun.id}", tpmGitURL:rep_url, tpiRepoName: gshixun.try(:name)}
|
|
|
|
|
logger.info("openGameInstance params is #{params}")
|
|
|
|
|
uri = URI.parse(URI.encode(uri.strip))
|
|
|
|
|
res = Net::HTTP.post_form(uri, params).body
|
|
|
|
|
res = JSON.parse(res)
|
|
|
|
|
if (res && res['code'].to_i != 0)
|
|
|
|
|
raise("实训云平台繁忙(繁忙等级:83)")
|
|
|
|
|
end
|
|
|
|
|
# 其它创建关卡等操作
|
|
|
|
|
challenges = shixun.challenges
|
|
|
|
|
# 之所以增加user_id是为了方便统计查询性能
|
|
|
|
|
challenges.each_with_index do |challenge, index|
|
|
|
|
|
status = (index == 0 ? 0 : 3)
|
|
|
|
|
code = down_generate_identifier("game")
|
|
|
|
|
Game.create!(:challenge_id => challenge.id, :myshixun_id => myshixun.id, :status => status, :user_id => myshixun.user_id,
|
|
|
|
|
:open_time => Time.now, :identifier => code, :modify_time => challenge.modify_time)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
work_score = work.final_score
|
|
|
|
|
work.homework_common.homework_challenge_settings.each do |setting|
|
|
|
|
|