Merge branch 'develop' into dev_ec

# Conflicts:
#	app/views/common/index.html.erb
dev_ec
hjm 6 years ago
commit 103ef0489b

@ -132,7 +132,6 @@ class ApplicationController < ActionController::Base
end end
end end
def ec_public_auth major_school def ec_public_auth major_school
unless User.current.admin? || major_school.template_major || major_school.school.users.where(:id => User.current.id).count > 0 || unless User.current.admin? || major_school.template_major || major_school.school.users.where(:id => User.current.id).count > 0 ||
major_school.ec_major_school_users.where(:user_id => User.current.id).count > 0 || major_school.ec_major_school_users.where(:user_id => User.current.id).count > 0 ||

@ -17,18 +17,11 @@ class EcYearsController < ApplicationController
# 添加年份 # 添加年份
def create def create
@major_school = EcMajorSchool.find(params[:ec_major_school_id]) @major_school = EcMajorSchool.find(params[:ec_major_school_id])
ec_years = @major_school.ec_years.pluck(:year) if @major_school.ec_years.exists?(year: params[:year].to_i)
exist_year = ec_years.include?(params[:year].to_i)
if exist_year
@status = -1 @status = -1
else else
prev_year = "#{params[:year].to_i - 1}" service = CopyEcYearService.new(@major_school, params[:year].to_i)
prev_ec_year = @major_school.ec_years.where(:year => prev_year).first service.call
if prev_ec_year.blank?
EcYear.create!(:year => params[:year], :ec_major_school_id => @major_school.id)
else
copy_year(prev_ec_year, params[:year])
end
@status = 1 @status = 1
end end
@major_manager = true @major_manager = true
@ -246,7 +239,7 @@ class EcYearsController < ApplicationController
template_file = EcTemplate.find_by_name "课程列表导入模板" template_file = EcTemplate.find_by_name "课程列表导入模板"
if template_file.present? if template_file.present?
file = template_file.attachments.first file = template_file.attachments.first
@file_url = "/attachments/download/#{file.id}/#{file.filename}" @file_url = '' #"/attachments/download/#{file.id}/#{file.filename}"
else else
@file_url = "javascript:void(0);" @file_url = "javascript:void(0);"
end end
@ -357,236 +350,6 @@ class EcYearsController < ApplicationController
@year = EcYear.find(params[:id]) @year = EcYear.find(params[:id])
end end
# 复制最新一届下的所有数据. previous_ec_year: 本专业最新一届, new_year: 新建的届别
def copy_year previous_ec_year, new_year
ActiveRecord::Base.transaction do
begin
# 如果是第一次创建届别,则直接创建
if previous_ec_year.blank?
raise("没有界别可以复制")
else
logger.info("############previous_ec_year: #{previous_ec_year.id}")
# 多个中间表需要替换的id
egs_record = [] # 记录ec_graduation_subitems的新旧值 例如: [[prev_egs, new_egs], [...]]
egr_record = [] # 记录ec_graduation_requirements的新旧值, 例如: [[prev_egr, new_egr], [...]]
ec_record = [] # 记录ec_courses
ece_record = [] # 记录ec_course_evaluations
eces_record= [] # 记录ec_course_evaluation_subitems
ect_record = [] # 记录ec_course_targets
# 复制 "届别"
ec_year = EcYear.create!(:year => new_year,
:ec_major_school_id => previous_ec_year.ec_major_school_id,
:calculation_value => previous_ec_year.calculation_value)
# 复制 "毕业要求"
previous_ec_year.ec_graduation_requirements.try(:each) do |pre_egr|
new_egr = EcGraduationRequirement.new
new_egr.attributes = pre_egr.attributes.dup.except("id", "ec_year_id")
new_egr.ec_year_id = ec_year.id
new_egr.save!
egr_record << [pre_egr.id, new_egr.id]
# 复制 "毕业要求子标点"
pre_egr.ec_graduation_subitems.try(:each) do |pre_egs|
new_egs = EcGraduationSubitem.new
new_egs.attributes = pre_egs.attributes.dup.except("id", "ec_graduation_requirement_id")
new_egs.ec_graduation_requirement_id = new_egr.id
new_egs.save!
# 记录新旧对应关系,为之后的中间表做记录
egs_record << [pre_egs.id, new_egs.id]
prev_ersvss = EcRequireSubVsStandard.where(:ec_graduation_subitem_id => pre_egs.id)
prev_ersvss.each do |prev_ersvs|
new_ersvss = EcRequireSubVsStandard.new
new_ersvss.attributes = prev_ersvs.attributes.dup.except("id", "ec_graduation_subitem_id")
new_ersvss.ec_graduation_subitem_id = new_egs.id
new_ersvss.save!
end
end
end
# 复制 "培养目标"
pre_eto = previous_ec_year.ec_training_objective
if pre_eto.present?
new_eto = EcTrainingObjective.new
new_eto.attributes = pre_eto.attributes.dup.except("id", "ec_year_id")
new_eto.ec_year_id = ec_year.id
new_eto.save!
# 复制 "培养目标分项"
pre_eto.ec_training_subitems.try(:each) do |pre_ets|
new_ets = EcTrainingSubitem.new
new_ets.attributes = pre_ets.attributes.dup.except("id", "ec_training_objective_id")
new_ets.ec_training_objective_id = new_eto.id
new_ets.save!
# 复制 "毕业要去 vs 培养目标"
pre_ervsos = EcRequirementVsObjective.where(:ec_training_objective_id => pre_ets.id)
pre_ervsos.each do |ervso|
new_ervso = EcRequirementVsObjective.new
new_ervso.attributes = ervso.attributes.dup.except("id", "ec_training_objective_id", "ec_graduation_requirement_id")
new_ervso.ec_training_objective_id = new_ets.id
new_egr_id = -1
egr_record.each do |egr_id|
if egr_id[0] == ervso.ec_graduation_requirement_id
new_egr_id = egr_id[1]
end
end
raise("找不对应的毕业要求") if new_egr_id == -1
new_ervso.ec_graduation_requirement_id = new_egr_id
new_ervso.save!
end
end
end
# 复制 "课程体系"
previous_ec_year.ec_courses.try(:each) do |pre_ec|
new_ec = EcCourse.create!(name: pre_ec.name, ec_year_id: ec_year.id)
ec_record << [pre_ec.id, new_ec.id]
# 复制 "课程考核标准"
pre_ec.ec_course_evaluations.try(:each) do |pre_ece|
new_ece = EcCourseEvaluation.create!(name: pre_ece.name,
evluation_count: pre_ece.evluation_count,
ec_course_id: new_ec.id,
is_course_type: pre_ece.is_course_type)
ece_record << [pre_ece.id, new_ece.id]
# 复制 "考核分项"
pre_ece.ec_course_evaluation_subitems.try(:each) do |pre_eces|
new_eces = EcCourseEvaluationSubitem.create!(name: pre_eces.name, ec_course_evaluation_id: new_ece.id)
# 记录新旧对应关系,为之后的中间表做记录
eces_record << [pre_eces.id, new_eces.id]
end
end
# 复制 "课程目标"
pre_ec.ec_course_targets.try(:each) do |pre_ect|
new_ect = EcCourseTarget.new
new_ect.attributes = pre_ect.attributes.dup.except("id", "ec_course_id")
new_ect.ec_course_id = new_ec.id
new_ect.save!
# 记录新旧对应关系,为之后的中间表做记录
ect_record << [pre_ect.id, new_ect.id]
# 复制 "课程目标和毕业要求指标点"
pre_ect.ec_graduation_subitem_course_targets.try(:each) do |pre_egsct|
new_egsct = EcGraduationSubitemCourseTarget.new
new_egsct.attributes = pre_egsct.attributes.dup.except("id", "ec_graduation_subitem_id", "ec_course_target_id")
# 寻找对应的new_egs_id
logger.info("############egs_record:#{egs_record}")
logger.info("############ec_graduation_subitem_id: #{pre_egsct.ec_graduation_subitem_id}")
new_egs_id = -1
egs_record.each do |id|
if id[0] == pre_egsct.ec_graduation_subitem_id
new_egs_id = id[1]
end
end
raise("课程目标和毕业要求指标点找不到对应关系.") if new_egs_id == -1
new_egsct.ec_graduation_subitem_id = new_egs_id
new_egsct.ec_course_target_id = new_ect.id
new_egsct.save!
end
# 复制 "课程达成方法"
pre_ect.ec_course_achievement_methods.each do |pre_ecam|
# 寻找对应的 ec_course_id
new_ec_id = -1
new_ece_id = -1
new_eces_id = -1
ec_record.each do |ec_id|
if ec_id[0] == pre_ecam.ec_course_id
new_ec_id = ec_id[1]
end
end
# 寻找对应的ec_course_evaluation_id
ece_record.each do |ece_id|
if ece_id[0] == pre_ecam.ec_course_evaluation_id
new_ece_id = ece_id[1]
end
end
# 寻找对应的ec_course_evaluation_subitem_id
eces_record.each do |eces_id|
if eces_id[0] == pre_ecam.ec_course_evaluation_subitem_id
new_eces_id = eces_id[1]
end
end
new_ecam = EcCourseAchievementMethod.new
new_ecam.attributes = pre_ecam.attributes.dup.except("id", "ec_course_id", "ec_course_evaluation_id",
"ec_course_evaluation_subitem_id", "ec_course_target_id")
new_ecam.ec_course_id = new_ec_id if new_ec_id != -1
new_ecam.ec_course_evaluation_id = new_ece_id if new_ece_id != -1
new_ecam.ec_course_evaluation_subitem_id = new_eces_id if new_eces_id != -1
new_ecam.ec_course_target_id = new_ect.id
new_ecam.save!
# 复制 "课程评价达成关系"
pre_ecam.ec_achievement_evaluation_relates.each do |pre_eaer|
new_eaer = EcAchievementEvaluationRelate.new
new_eaer.attributes = pre_eaer.attributes.dup.except("id", "ec_course_achievement_method_id",
"ec_course_evaluation_subitem_id", "ec_course_target_id")
new_eaer.ec_course_achievement_method_id = new_ecam.id
# 寻找对应的 ec_course_evaluation_subitem_id
new_eces_id = -1
eces_record.each do |eces_id|
if eces_id[0] == pre_eaer.ec_course_evaluation_subitem_id
new_eces_id = eces_id[1]
end
end
new_eaer.ec_course_evaluation_subitem_id = new_eces_id if new_eces_id != -1
# 寻找对应的 ec_course_target_id
new_ect_id = -1
ect_record.each do |ect_id|
if ect_id[0] == pre_eaer.ec_course_target_id
new_ect_id = ect_id[1]
end
end
new_eaer.ec_course_target_id = new_ect_id if new_ect_id != -1
new_eaer.save!
end
end
end
# 复制 "课程支撑"
pre_ec.ec_course_supports.try(:each) do |pre_ecs|
new_ecs = EcCourseSupport.new
new_ecs.attributes = pre_ecs.attributes.dup.except("id", "ec_course_id")
new_ecs.ec_course_id = new_ec.id
new_ecs.save!
# 复制 "课程vs毕业要求"
pre_ecs.ec_graduation_subitem_courses.try(:each) do |pre_egsc|
new_egs_id = -1
egs_record.each do |egs_id|
if egs_id[0] == pre_egsc.ec_graduation_subitem_id
new_egs_id = egs_id[1]
end
end
new_egsc = EcGraduationSubitemCourse.new
new_egsc.attributes = pre_egsc.attributes.dup.except("id", "ec_graduation_subitem_id", "ec_course_support_id")
raise("找不到课程vs毕业要求的关联关系!") if new_egs_id == -1
new_egsc.ec_graduation_subitem_id = new_egs_id
new_egsc.ec_course_support_id = new_ecs.id
new_egsc.save!
end
end
# 复制 "成绩等级设置"
pre_ec.ec_score_levels.try(:each) do |pre_esl|
new_esl = EcScoreLevel.new
new_esl.attributes = pre_esl.attributes.dup.except("id", "ec_course_id")
new_esl.ec_course_id = new_ec.id
new_esl.save!
end
end
end
rescue Exception => e
logger.error("###########error_message: #{e.message}")
raise ActiveRecord::Rollback
end
end
end
# 导出培养目标excel # 导出培养目标excel
def export_training_objectives objects def export_training_objectives objects
xls_report = StringIO.new xls_report = StringIO.new

@ -493,6 +493,7 @@ class MyshixunsController < ApplicationController
return_back_time = format("%.3f", ( t1.to_f - brige_end_time.to_f)).to_f return_back_time = format("%.3f", ( t1.to_f - brige_end_time.to_f)).to_f
status = jsonTestDetails['status'] status = jsonTestDetails['status']
game_id = jsonTestDetails['buildID'] game_id = jsonTestDetails['buildID']
sec_key = jsonTestDetails['sec_key']
logger.info("training_task_status start#1**#{game_id}**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}") logger.info("training_task_status start#1**#{game_id}**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}")
resubmit = jsonTestDetails['resubmit'] resubmit = jsonTestDetails['resubmit']
outPut = tran_base64_decode64(jsonTestDetails['outPut']) outPut = tran_base64_decode64(jsonTestDetails['outPut'])
@ -535,7 +536,8 @@ class MyshixunsController < ApplicationController
end end
logger.info("#############status: #{status}") logger.info("#############status: #{status}")
logger.info("#############resubmit: #{resubmit}") logger.info("#############resubmit: #{resubmit}")
record = EvaluateRecord.where(:game_id => game_id).first logger.info("sec_key is#############resubmit: #{sec_key}")
record = EvaluateRecord.where(:identifier => sec_key).first
logger.info("training_task_status start#3**#{game_id}**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}") logger.info("training_task_status start#3**#{game_id}**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}")
# status0表示评测成功 # status0表示评测成功

@ -7,7 +7,7 @@ class StudentWorkController < ApplicationController
require "base64" require "base64"
helper :attachments helper :attachments
helper :files helper :files
before_filter :find_homework, :only => [:new, :index, :create, :homework_discuss, :homework_setting, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex, before_filter :find_homework, :only => [:new, :index, :sonar, :create, :homework_discuss, :homework_setting, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex,
:set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project, :set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project,
:search_course_students,:work_canrepeat,:change_project,:relate_myshixun,:shixun_work_export,:import_score,:code_review_results] :search_course_students,:work_canrepeat,:change_project,:relate_myshixun,:shixun_work_export,:import_score,:code_review_results]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :adjust_score, :add_ultimate_score, :praise_student_work, :retry_work, :revise_attachment, :hide_score_detail, :destroy_score, before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :adjust_score, :add_ultimate_score, :praise_student_work, :retry_work, :revise_attachment, :hide_score_detail, :destroy_score,
@ -15,7 +15,7 @@ class StudentWorkController < ApplicationController
before_filter :member_of_course, :only => [:new, :create, :show, :add_score, :praise_student_work, :commit_summary, :view_summary] before_filter :member_of_course, :only => [:new, :create, :show, :add_score, :praise_student_work, :commit_summary, :view_summary]
before_filter :author_of_work, :only => [:edit, :update, :destroy] before_filter :author_of_work, :only => [:edit, :update, :destroy]
before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :set_score_rule, :forbidden_anonymous_comment, :adjust_score, :add_ultimate_score] before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :set_score_rule, :forbidden_anonymous_comment, :adjust_score, :add_ultimate_score]
before_filter :require_login, :only => [:index, :show] before_filter :require_login, :only => [:index, :sonar, :show]
if RUBY_PLATFORM =~ /linux/ if RUBY_PLATFORM =~ /linux/
require 'roo-xls' require 'roo-xls'
@ -493,7 +493,7 @@ class StudentWorkController < ApplicationController
render :json => resultObj render :json => resultObj
end end
def index def _index
# REDO:分班信息提前查出来,然后循环中根据匹配去取 # REDO:分班信息提前查出来,然后循环中根据匹配去取
@is_teacher = User.current.logged? ? (User.current.allowed_to?(:as_teacher,@course) || User.current.admin?) : false @is_teacher = User.current.logged? ? (User.current.allowed_to?(:as_teacher,@course) || User.current.admin?) : false
@ -608,6 +608,12 @@ class StudentWorkController < ApplicationController
@page = (params['page'] || 1).to_i @page = (params['page'] || 1).to_i
@student_work_pages = Paginator.new @student_work_count, @limit, @page @student_work_pages = Paginator.new @student_work_count, @limit, @page
@offset ||= @student_work_pages.offset @offset ||= @student_work_pages.offset
end
def index
_index
@stundet_works = paginateHelper @stundet_works, @limit @stundet_works = paginateHelper @stundet_works, @limit
if @stundet_works.size != 0 if @stundet_works.size != 0
@stundet_works = if @homework.homework_type == 1 @stundet_works = if @homework.homework_type == 1
@ -630,6 +636,35 @@ class StudentWorkController < ApplicationController
end end
end end
def sonar
_index
logger.debug "@stundet_works #{@stundet_works}"
person_list = @stundet_works.map do |work|
o = {
name: "#{work.user.show_real_name}",
uid: "#{work.user.user_extensions.student_id}",
downloadUrl: ''
}
attachment = work.attachments.first
if attachment
o[:downloadUrl] = "https://#{Setting.host_name}/"+download_named_attachment_path(attachment.id, attachment.filename)
end
o
end
respond_to do |format|
format.json {
render json: {
homeworkId: @homework.id,
personList: person_list
}
}
end
end
# 查重详情页面的调分 # 查重详情页面的调分
def adjust_review_score def adjust_review_score
if params[:score] && params[:challenge_id] if params[:score] && params[:challenge_id]
@ -1852,6 +1887,7 @@ class StudentWorkController < ApplicationController
end end
end end
private private
def hsd_committed_work?(user, homework) def hsd_committed_work?(user, homework)

@ -9,4 +9,7 @@ class EcGraduationSubitem < ActiveRecord::Base
# 课程目标配置 # 课程目标配置
has_many :ec_course_targets, :through => :ec_graduation_subitem_course_targets has_many :ec_course_targets, :through => :ec_graduation_subitem_course_targets
has_many :ec_graduation_subitem_course_targets, :dependent => :destroy has_many :ec_graduation_subitem_course_targets, :dependent => :destroy
has_many :ec_require_sub_vs_standards
has_many :ec_graduation_standards, through: :ec_require_sub_vs_standards
end end

@ -1,3 +1,6 @@
class EcRequireSubVsStandard < ActiveRecord::Base class EcRequireSubVsStandard < ActiveRecord::Base
attr_accessible :ec_graduation_standard_id, :ec_graduation_subitem_id, :status attr_accessible :ec_graduation_standard_id, :ec_graduation_subitem_id, :status
belongs_to :ec_graduation_standard
belongs_to :ec_graduation_subitem
end end

@ -1,3 +1,5 @@
class EcRequirementVsObjective < ActiveRecord::Base class EcRequirementVsObjective < ActiveRecord::Base
attr_accessible :ec_graduation_requirement_id, :ec_training_objective_id, :status attr_accessible :ec_graduation_requirement_id, :ec_training_objective_id, :status
belongs_to :ec_graduation_requirement
belongs_to :ec_training_subitem
end end

@ -1,4 +1,5 @@
class EcTrainingSubitem < ActiveRecord::Base class EcTrainingSubitem < ActiveRecord::Base
belongs_to :ec_training_objective belongs_to :ec_training_objective
has_many :ec_requirement_vs_objectives, foreign_key: :ec_training_objective_id
end end

@ -16,4 +16,8 @@ class EcYear < ActiveRecord::Base
# 课堂配置 # 课堂配置
has_many :ec_courses, :dependent => :destroy has_many :ec_courses, :dependent => :destroy
acts_as_attachable acts_as_attachable
def prev_year
ec_major_school.ec_years.find_by_year(year - 1)
end
end end

@ -16,6 +16,7 @@ class School < ActiveRecord::Base
has_many :ec_majors, :through => :ec_major_schools has_many :ec_majors, :through => :ec_major_schools
has_many :ec_major_schools, :dependent => :destroy has_many :ec_major_schools, :dependent => :destroy
has_one :ec_template_major, conditions: 'template_major = 1', class_name: 'EcMajorSchool'
has_many :partners, :dependent => :destroy has_many :partners, :dependent => :destroy
has_many :customers, :dependent => :destroy has_many :customers, :dependent => :destroy

@ -0,0 +1,306 @@
class CopyEcYearService
attr_reader :major_school, :to_year
def initialize(major_school, year)
@major_school = major_school
@to_year = major_school.ec_years.new(year: year)
end
def call
if from_year.blank?
to_year.save!
return to_year
end
# 专业第一次创建届别时复制示例专业2017届
ActiveRecord::Base.transaction do
copy_ec_year!
copy_graduation_requirement!
copy_training_objective!
new_major_school? ? copy_template_ec_course! : copy_ec_courses!
end
to_year
end
private
def new_major_school?
@_new_major ||= major_school.ec_years.count.zero?
end
def from_year
@_from_year ||= new_major_school? ? template_major_year : to_year.prev_year
end
def template_major_year
EcYear.joins(:ec_major_school).where(ec_major_schools: { template_major: true }).find_by_year('2017')
end
def copy_ec_year!
to_year.calculation_value = from_year.calculation_value
to_year.save!
end
def copy_graduation_requirement!
requirements = from_year.ec_graduation_requirements.includes(ec_graduation_subitems: :ec_require_sub_vs_standards)
requirements.each do |requirement|
to_requirement = to_year.ec_graduation_requirements.new
to_requirement.attributes = requirement.attributes.except('id', 'ec_year_id', 'created_at', 'updated_at')
to_requirement.save!
# 记录对应关系,创建支撑时使用
graduation_requirement_map[requirement.id] = to_requirement.id
copy_graduation_subitems(requirement, to_requirement)
end
end
def copy_graduation_subitems(requirement, to_requirement)
requirement.ec_graduation_subitems.each do |item|
to_item = to_requirement.ec_graduation_subitems.new
to_item.attributes = item.attributes.except('id', 'ec_graduation_requirement_id', 'created_at', 'updated_at')
to_item.save!
# 记录对应关系,创建支撑时使用
graduation_subitem_map[item.id] = to_item.id
copy_requirement_standard_supports!(item, to_item)
end
end
def copy_requirement_standard_supports!(graduation_subitem, to_graduation_subitem)
graduation_subitem.ec_require_sub_vs_standards.each do |support|
to_support = to_graduation_subitem.ec_require_sub_vs_standards.new
to_support.attributes = support.attributes.except('id', 'ec_graduation_subitem_id', 'created_at', 'updated_at')
to_support.save!
end
end
def copy_training_objective!
training_objective = from_year.ec_training_objective
return if training_objective.blank?
attributes = training_objective.attributes.except('id', 'ec_year_id', 'created_at', 'updated_at')
to_training_objective = to_year.create_ec_training_objective!(attributes)
copy_training_subitems!(training_objective, to_training_objective)
end
def copy_training_subitems!(training_objective, to_training_objective)
training_subitems = training_objective.ec_training_subitems.includes(:ec_requirement_vs_objectives)
training_subitems.each do |item|
to_item = to_training_objective.ec_training_subitems.new
to_item.attributes = item.attributes.except('id', 'ec_training_objective_id', 'created_at', 'updated_at')
to_item.save!
copy_requirement_vs_objectives!(item, to_item)
end
end
def copy_requirement_vs_objectives!(training_item, to_training_item)
training_item.ec_requirement_vs_objectives.each do |support|
to_support = to_training_item.ec_requirement_vs_objectives.new(status: support.status)
to_support.ec_graduation_requirement_id = graduation_requirement_map[support.ec_graduation_requirement_id]
to_support.save!
end
end
def copy_template_ec_course!
course = from_year.ec_courses.includes(
:ec_score_levels,
ec_course_evaluations: :ec_course_evaluation_subitems,
ec_course_targets: :ec_graduation_subitem_course_targets,
ec_course_achievement_methods: :ec_achievement_evaluation_relates,
ec_course_supports: :ec_graduation_subitem_courses
).find_by_name('数据库原理')
to_course = to_year.ec_courses.new
to_course.attributes = course.attributes.except('id', 'ec_year_id', 'created_at', 'updated_at')
to_course.save!
course_map[course.id] = to_course.id
copy_course_evaluations!(course, to_course)
copy_course_targets!(course, to_course)
copy_course_achievement_methods!(course, to_course)
copy_ec_course_supports!(course, to_course)
copy_score_levels!(course, to_course)
# 复制示例时需要复制学生和成绩数据
copy_year_students!
end
def copy_ec_courses!
courses = from_year.ec_courses.includes(
:ec_score_levels,
ec_course_evaluations: :ec_course_evaluation_subitems,
ec_course_targets: :ec_graduation_subitem_course_targets,
ec_course_achievement_methods: :ec_achievement_evaluation_relates,
ec_course_supports: :ec_graduation_subitem_courses
)
courses.each do |course|
to_course = to_year.ec_courses.new
to_course.attributes = course.attributes.except('id', 'ec_year_id', 'created_at', 'updated_at')
to_course.save!
course_map[course.id] = to_course.id
copy_course_evaluations!(course, to_course)
copy_course_targets!(course, to_course)
copy_course_achievement_methods!(course, to_course)
copy_ec_course_supports!(course, to_course)
copy_score_levels!(course, to_course)
end
end
def copy_course_evaluations!(course, to_course)
course.ec_course_evaluations.each do |evaluation|
to_evaluation = to_course.ec_course_evaluations.new
to_evaluation.attributes = evaluation.attributes.except('id', 'ec_course_id', 'created_at', 'updated_at')
to_evaluation.save!
course_evaluation_map[evaluation.id] = to_evaluation.id
copy_course_evaluation_subitems!(evaluation, to_evaluation)
end
end
def copy_course_evaluation_subitems!(evaluation, to_evaluation)
evaluation.ec_course_evaluation_subitems.each do |item|
to_item = to_evaluation.ec_course_evaluation_subitems.new
to_item.attributes = item.attributes.except('id', 'ec_course_evaluation_id', 'created_at', 'updated_at')
to_item.save!
course_evaluation_subitem_map[item.id] = to_item.id
end
end
def copy_course_targets!(course, to_course)
course.ec_course_targets.each do |target|
to_target = to_course.ec_course_targets.new
to_target.attributes = target.attributes.except('id', 'ec_course_id', 'created_at', 'updated_at')
to_target.save!
course_target_map[target.id] = to_target.id
copy_graduation_subitem_course_targets!(target, to_target)
end
end
def copy_graduation_subitem_course_targets!(target, to_target)
target.ec_graduation_subitem_course_targets.each do |support|
to_support = to_target.ec_graduation_subitem_course_targets.new
to_support.attributes = support.attributes.except('id', 'ec_graduation_subitem_id', 'created_at', 'updated_at')
to_support.ec_graduation_subitem_id = graduation_subitem_map[support.ec_graduation_subitem_id]
to_support.save!
end
end
def copy_course_achievement_methods!(course, to_course)
course.ec_course_achievement_methods.each do |from|
to = to_course.ec_course_achievement_methods.new
to.attributes = from.attributes.except('id', 'ec_course_id', 'ec_course_target_id', 'ec_course_evaluation_id',
'ec_course_evaluation_subitem_id', 'created_at', 'updated_at')
to.ec_course_target_id = course_target_map[from.ec_course_target_id]
to.ec_course_evaluation_id = course_evaluation_map[from.ec_course_evaluation_id]
to.ec_course_evaluation_subitem_id = course_evaluation_subitem_map[from.ec_course_evaluation_subitem_id]
to.save!
copy_achievement_evaluation_relates!(from, to)
end
end
def copy_achievement_evaluation_relates!(method, to_method)
method.ec_achievement_evaluation_relates.each do |relate|
to_relate = to_method.ec_achievement_evaluation_relates.new
to_relate.attributes = relate.attributes.except('id', 'ec_course_achievement_method_id', 'ec_course_target_id',
'ec_course_evaluation_subitem_id', 'created_at', 'updated_at')
to_relate.ec_course_target_id = course_target_map[relate.ec_course_target_id]
to_relate.ec_course_evaluation_subitem_id = course_target_map[relate.ec_course_evaluation_subitem_id]
to_relate.save!
end
end
def copy_ec_course_supports!(course, to_course)
course.ec_course_supports.each do |support|
to_support = to_course.ec_course_supports.new
to_support.attributes = support.attributes.except('id', 'ec_course_id', 'created_at', 'updated_at')
to_support.save!
copy_graduation_subitem_courses!(support, to_support)
end
end
def copy_graduation_subitem_courses!(course_support, to_course_support)
course_support.ec_graduation_subitem_courses.each do |item|
to_item = to_course_support.ec_graduation_subitem_courses.new
to_item.attributes = item.attributes.except('id', 'ec_course_support_id', 'ec_graduation_subitem_id',
'created_at', 'updated_at')
to_item.ec_graduation_subitem_id = graduation_subitem_map[item.ec_graduation_subitem_id]
to_item.save!
end
end
def copy_score_levels!(course, to_course)
course.ec_score_levels.each do |level|
to_level = to_course.ec_score_levels.new
to_level.attributes = level.attributes.except('id', 'ec_course_id', 'created_at', 'updated_at')
to_level.save!
end
end
def copy_year_students!
students = from_year.ec_year_students.includes(:ec_student_achievements)
students.each do |student|
to_student = to_year.ec_year_students.new
to_student.attributes = student.attributes.except('id', 'ec_year_id', 'created_at', 'updated')
to_student.save!
copy_student_achievements!(student, to_student)
end
end
def copy_student_achievements!(student, to_student)
student.ec_student_achievements.each do |achievement|
to_achievement = to_student.ec_student_achievements.new
to_achievement.attributes = achievement.attributes.except('id', 'ec_year_student_id', 'ec_course_evaluation_id',
'ec_course_evaluation_subitem_id', 'created_at', 'updated_at')
to_achievement.ec_course_evaluation_id = course_evaluation_map[achievement.ec_course_evaluation_id]
to_achievement.ec_course_evaluation_subitem_id = course_evaluation_subitem_map[achievement.ec_course_evaluation_subitem_id]
to_achievement.save!
end
end
def graduation_requirement_map
@_graduation_requirement_map ||= {}
end
def graduation_subitem_map
@_graduation_subitem_map ||= {}
end
def course_map
@_course_map ||= {}
end
def course_evaluation_map
@_course_evaluation_map ||= {}
end
def course_evaluation_subitem_map
@_course_evaluation_subitem_map ||= {}
end
def course_target_map
@_course_target_map ||= {}
end
end

@ -347,10 +347,13 @@ class GamesService
rev = params[:rev] ? params[:rev] : "master" rev = params[:rev] ? params[:rev] : "master"
content_modified = 0 content_modified = 0
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
# params[:evaluate] 实训评测时更新必须给的参数,需要依据该参数做性能统计,其它类型的更新可以跳过 # params[:evaluate] 实训评测时更新必须给的参数,需要依据该参数做性能统计,其它类型的更新可以跳过
# 自动保存的时候evaluate为0点评测的时候为1 # 自动保存的时候evaluate为0点评测的时候为1
if params[:evaluate] == 1 if params[:evaluate] == 1
record = EvaluateRecord.create!(:user_id => current_user.id, :shixun_id => @myshixun.shixun.id, :game_id => @game.id) sec_key = generates_identifier(EvaluateRecord, 10)
record = EvaluateRecord.create!(:user_id => current_user.id, :shixun_id => @myshixun.shixun.id,
:game_id => @game.id, :identifier => sec_key)
Rails.logger.warn("##game is is #{@game.id}, record id is #{record.id}, time is**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}") Rails.logger.warn("##game is is #{@game.id}, record id is #{record.id}, time is**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}")
# @myshixun.student_works.update_all(:update_time => Time.now) if !@myshixun.student_works.blank? # @myshixun.student_works.update_all(:update_time => Time.now) if !@myshixun.student_works.blank?
student_work_time = format("%.3f", (Time.now.to_f - record.created_at.to_f)).to_f student_work_time = format("%.3f", (Time.now.to_f - record.created_at.to_f)).to_f
@ -385,7 +388,7 @@ class GamesService
if content != last_content && code_file.blank? if content != last_content && code_file.blank?
raise("update file failed") raise("update file failed")
else else
return {:success => "success", :resubmit => resubmit ,:content_modified => content_modified} return {:success => "success", :resubmit => resubmit ,:content_modified => content_modified, sec_key: record.try(:identifier)}
end end
end end
rescue Exception => e rescue Exception => e
@ -546,7 +549,7 @@ class GamesService
:testCases => "#{testCases}", :resubmit => "#{resubmit}", :times => params[:first].to_i, :podType => shixun.webssh, :testCases => "#{testCases}", :resubmit => "#{resubmit}", :times => params[:first].to_i, :podType => shixun.webssh,
:containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}", :tpmScript => "#{tpmScript}", :containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}", :tpmScript => "#{tpmScript}",
:timeLimit => "#{shixun.exec_time}", :content_modified => content_modified, :persistenceName => shixun.identifier, :timeLimit => "#{shixun.exec_time}", :content_modified => content_modified, :persistenceName => shixun.identifier,
:isPublished => (shixun.status < 2 ? 0 : 1)} :isPublished => (shixun.status < 2 ? 0 : 1), :sec_key => params[:sec_key]}
# 评测有文件输出的需要特殊传字段 path表示文件存储的位置 # 评测有文件输出的需要特殊传字段 path表示文件存储的位置
params['file'] = Base64.urlsafe_encode64({:path => "#{game_challenge.picture_path}"}.to_json) if game_challenge.picture_path.present? params['file'] = Base64.urlsafe_encode64({:path => "#{game_challenge.picture_path}"}.to_json) if game_challenge.picture_path.present?
@ -569,7 +572,8 @@ class GamesService
# ----单测模式end # ----单测模式end
return {:result => "success", :resubmit => resubmit, :ableToCreate => res['ableToCreate'], :waitNum => res['waitNum'], return {:result => "success", :resubmit => resubmit, :ableToCreate => res['ableToCreate'], :waitNum => res['waitNum'],
:waitingTime => res['waitingTime'], :position => game_challenge.position, :port => res['port'], :had_done => game.had_done } :waitingTime => res['waitingTime'], :position => game_challenge.position, :port => res['port'],
:had_done => game.had_done}
rescue Exception => e rescue Exception => e
Rails.logger.error("评测出错,详情:" + e.message) Rails.logger.error("评测出错,详情:" + e.message)
return {:result => 'fail', :contents =>"实训云平台繁忙繁忙等级502请稍后刷新并重试", :position => game_challenge.position, :had_done => game.had_done} return {:result => 'fail', :contents =>"实训云平台繁忙繁忙等级502请稍后刷新并重试", :position => game_challenge.position, :had_done => game.had_done}
@ -878,7 +882,7 @@ class GamesService
mirror_name = shixun.mirror_name mirror_name = shixun.mirror_name
# 轮询结束,更新评测耗时 # 轮询结束,更新评测耗时
e_record = EvaluateRecord.where(:game_id => game.id).first e_record = EvaluateRecord.where(:identifier => params[:sec_key]).first
if game_status == 0 || game_status == 2 if game_status == 0 || game_status == 2
if e_record if e_record
front_js = format("%.3f", (Time.now.to_f - e_record.try(:updated_at).to_f)).to_f front_js = format("%.3f", (Time.now.to_f - e_record.try(:updated_at).to_f)).to_f
@ -1036,6 +1040,15 @@ class GamesService
end end
private private
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 generates_identifier(container, num)
code = DCODES.sample(num).join
while container.exists?(identifier: code) do
code = DCODES.sample(num).join
end
code
end
def format_answer_list games def format_answer_list games
user_info = [] user_info = []

@ -15,35 +15,36 @@
</style> </style>
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function () {
$(".white-panel li").click(function(){ $(".white-panel li").click(function () {
$(".white-panel li").removeClass("active"); $(".white-panel li").removeClass("active");
$(this).addClass("active"); $(this).addClass("active");
var n=$(this).attr("index"); var n = $(this).attr("index");
if($(this).find("a").html().trim()=="作业问答"){ if ($(this).find("a").html().trim() == "作业问答") {
$.get("<%= homework_discuss_student_work_index_path(:homework => @homework.id) %>"); $.get("<%= homework_discuss_student_work_index_path(:homework => @homework.id) %>");
} }
if($(this).find("a").html().trim()=="设置"){ if ($(this).find("a").html().trim() == "设置") {
$.get("<%= homework_setting_student_work_index_path(:homework => @homework.id, :is_new => @is_new) %>"); $.get("<%= homework_setting_student_work_index_path(:homework => @homework.id, :is_new => @is_new) %>");
} }
if($(this).find("a").html().trim()=="查重结果"){ if ($(this).find("a").html().trim() == "查重结果") {
$.get("<%= code_review_results_student_work_index_path(:homework => @homework.id) %>"); $.get("<%= code_review_results_student_work_index_path(:homework => @homework.id) %>");
} }
$(".edu-tab-con").addClass("undis"); $(".edu-tab-con").addClass("undis");
$("#edu-tab-con-"+n).removeClass("undis"); $("#edu-tab-con-" + n).removeClass("undis");
}) })
}) })
</script> </script>
<div class="edu-class-container"> <div class="edu-class-container">
<p class="mb10"> <p class="mb10">
<%= link_to @homework.course.name, course_path(@homework.course),:class => "color-grey-9" %> <%= link_to @homework.course.name, course_path(@homework.course), :class => "color-grey-9" %>
> <% if @homework.course_homework_category.present? %> >
<% if @homework.course_homework_category.present? %>
<%= link_to @homework.course_homework_category.name, homework_common_index_path(:course => @homework.course_id, :homework_type => @homework.homework_type, :category => @homework.course_homework_category_id), :class => "color-grey-9" %> <%= link_to @homework.course_homework_category.name, homework_common_index_path(:course => @homework.course_id, :homework_type => @homework.homework_type, :category => @homework.course_homework_category_id), :class => "color-grey-9" %>
<% else %> <% else %>
<%= link_to "#{@homework.homework_type_ch}作业", homework_common_index_path(:course => @homework.course_id, :homework_type => @homework.homework_type),:class => "color-grey-9" %> <%= link_to "#{@homework.homework_type_ch}作业", homework_common_index_path(:course => @homework.course_id, :homework_type => @homework.homework_type), :class => "color-grey-9" %>
<% end %> <% end %>
> #<%= get_hw_index(@homework, @is_teacher, @homework.homework_type) + 1 %></p> > #<%= get_hw_index(@homework, @is_teacher, @homework.homework_type) + 1 %></p>
<div class="pt10 pb10 edu-back-white clearfix"> <div class="pt10 pb10 edu-back-white clearfix">
@ -71,7 +72,7 @@
<a href="javascript:void(0);" class="tab_type">参考答案</a> <a href="javascript:void(0);" class="tab_type">参考答案</a>
</li> </li>
<% end %> <% end %>
<% if @is_teacher && @homework.homework_type == 4 && @homework.homework_group_reviews.size > 0 %> <% if @is_teacher && @homework.homework_type == 4 && @homework.homework_group_reviews.count > 0 %>
<li id="edu-tab-nav-5" index="5"> <li id="edu-tab-nav-5" index="5">
<a href="javascript:void(0);" class="tab_type"> <a href="javascript:void(0);" class="tab_type">
查重结果 查重结果
@ -153,7 +154,7 @@
<% student_works = @homework.student_works.where("work_status != 0") %> <% student_works = @homework.student_works.where("work_status != 0") %>
<% if @group_teacher %> <% if @group_teacher %>
<% groups = @course.course_groups.where(:id => @member.teacher_course_groups.pluck(:course_group_id)) %> <% groups = @course.course_groups.where(:id => @member.teacher_course_groups.pluck(:course_group_id)) %>
<% group_students = @course.members.where(:course_group_id => @member.teacher_course_groups.pluck(:course_group_id)).select{|m| m.roles.to_s.include?("Student")} %> <% group_students = @course.members.where(:course_group_id => @member.teacher_course_groups.pluck(:course_group_id)).select {|m| m.roles.to_s.include?("Student")} %>
<% student_works = student_works.where(:user_id => group_students.map(&:user_id)) %> <% student_works = student_works.where(:user_id => group_students.map(&:user_id)) %>
<% else %> <% else %>
<% groups = @course.course_groups %> <% groups = @course.course_groups %>
@ -198,11 +199,15 @@
<a href="javascript:void(0);" id="status_no_limit" class="<%= @status.blank? ? 'check_on' : '' %> pl10 pr10">不限</a> <a href="javascript:void(0);" id="status_no_limit" class="<%= @status.blank? ? 'check_on' : '' %> pl10 pr10">不限</a>
</span> </span>
<input id="work_status_1" class="magic-checkbox fl" type="checkbox" value="0" name="status[]" <%= !@status.blank? && @status.include?('0') ? 'checked' : '' %>> <input id="work_status_1" class="magic-checkbox fl" type="checkbox" value="0" name="status[]" <%= !@status.blank? && @status.include?('0') ? 'checked' : '' %>>
<label for="work_status_1" class="fl mr25">未提交(<%= @all_student_works.where(:work_status => 0).size %>)</label> <label for="work_status_1" class="fl mr25">未提交(<%= @all_student_works.where(:work_status => 0).count %>
)</label>
<input id="work_status_2" class="magic-checkbox fl" type="checkbox" value="1" name="status[]" <%= !@status.blank? && @status.include?('1') ? 'checked' : '' %>> <input id="work_status_2" class="magic-checkbox fl" type="checkbox" value="1" name="status[]" <%= !@status.blank? && @status.include?('1') ? 'checked' : '' %>>
<label for="work_status_2" class="fl mr25">按时提交(<%= student_works.where(:work_status => 1).size %>)</label> <label for="work_status_2" class="fl mr25">按时提交(<%= student_works.where(:work_status => 1).count %>
)</label>
<input id="work_status_3" class="magic-checkbox fl" type="checkbox" value="2" name="status[]" <%= !@status.blank? && @status.include?('2') ? 'checked' : '' %>> <input id="work_status_3" class="magic-checkbox fl" type="checkbox" value="2" name="status[]" <%= !@status.blank? && @status.include?('2') ? 'checked' : '' %>>
<label for="work_status_3" class="fl mr25">延时提交(<%= student_works.where(:work_status => 2).size %>)</label> <label for="work_status_3" class="fl mr25">延时提交(<%= student_works.where(:work_status => 2).count %>
)</label>
</li> </li>
<li class="clearfix"> <li class="clearfix">
<span class="fl mr10 color-grey-8">分班情况:</span> <span class="fl mr10 color-grey-8">分班情况:</span>
@ -212,7 +217,8 @@
<p class="fl pb10" style="display: block;max-width: 995px;"> <p class="fl pb10" style="display: block;max-width: 995px;">
<% groups.includes(:members).each do |group| %> <% groups.includes(:members).each do |group| %>
<input id="group_<%= group.id %>" class="magic-checkbox fl" type="checkbox" value="<%= group.id %>" name="group[]" <%= !@group.blank? && @group.include?(group.id) ? 'checked' : '' %>> <input id="group_<%= group.id %>" class="magic-checkbox fl" type="checkbox" value="<%= group.id %>" name="group[]" <%= !@group.blank? && @group.include?(group.id) ? 'checked' : '' %>>
<label for="group_<%= group.id %>" class="fl mr25"><%= group.name %>(<%= group.members.size %>)</label> <label for="group_<%= group.id %>" class="fl mr25"><%= group.name %>
(<%= group.members.count %>)</label>
<% end %> <% end %>
<% if !@group_teacher %> <% if !@group_teacher %>
<input id="group_0" class="magic-checkbox fl" type="checkbox" value="0" name="group[]"> <input id="group_0" class="magic-checkbox fl" type="checkbox" value="0" name="group[]">
@ -241,6 +247,10 @@
<% end %> <% end %>
<% end %> <% end %>
<% if User.current.admin? %>
<a onclick="sonar()" data-tip-down="仅限振远使用" class="fl white-btn orange-btn mt10 ml25">质量检测</a>
<% end %>
<div class="edu-find fr mr20 with20 pr"> <div class="edu-find fr mr20 with20 pr">
<div class="edu-find-input"> <div class="edu-find-input">
<input type="text" class="task-form-100 panel-box-sizing" maxlength="20" placeholder="姓名、学号关键字检索" value="<%= @name %>" id="course_student_name"/> <input type="text" class="task-form-100 panel-box-sizing" maxlength="20" placeholder="姓名、学号关键字检索" value="<%= @name %>" id="course_student_name"/>
@ -362,8 +372,7 @@
if (!event) { if (!event) {
event = window.event; //针对ie浏览器 event = window.event; //针对ie浏览器
code = event.keyCode; code = event.keyCode;
} } else {
else {
code = event.keyCode; code = event.keyCode;
} }
if (code == 13) { if (code == 13) {
@ -416,4 +425,28 @@
pop_box_new(htmlvalue, 452, 163); pop_box_new(htmlvalue, 452, 163);
$("#submit_url").val('<%= import_score_student_work_index_path(:homework => @homework.id) %>'); $("#submit_url").val('<%= import_score_student_work_index_path(:homework => @homework.id) %>');
} }
function sonar() {
$.ajax({
url: '/student_work/sonar?homework=' + $("#homework_id").val(),
type: 'get',
data: $("#student_work_search_form").serialize(),
success: function (data) {
console.log(data);
//调用sonar
$.ajax({
url: 'http://127.0.0.1:8080/api/sonar',
contentType: "application/json; charset=utf-8",
dataType: "json",
type: 'post',
data: JSON.stringify(data),
success: function (data1) {
console.log(data1);
alert('调用完成,请等待处理完成');
}
})
}
})
}
</script> </script>

@ -1248,6 +1248,7 @@ RedmineApp::Application.routes.draw do ## oauth相关
get 'relate_myshixun' get 'relate_myshixun'
get 'shixun_work_export' get 'shixun_work_export'
post 'import_score' post 'import_score'
get 'sonar'
end end
end end

@ -0,0 +1,8 @@
class AddIdentifierToEvaluateRecords < ActiveRecord::Migration
def change
add_column :evaluate_records, :identifier, :string
add_index :evaluate_records, :identifier, unique: true
remove_index :evaluate_records, :name => :game
remove_index :evaluate_records, :name => :index_evaluate_records_on_user_id
end
end

@ -1233,15 +1233,51 @@ $(document).bind('ajaxError', function(event, xhr, settings) {
//工程认证各个页面的查看详情弹层 //工程认证各个页面的查看详情弹层
function elasticLayer(forumId){ function elasticLayer(forumId){
if (window.__memo) {
doElasticLayer(window.__memo, true)
return;
}
if (!forumId) return;
var url = 'https://www.educoder.net/api/v1/memos/' + forumId
$.ajax({
url: url,
type: 'get',
success: function(res) {
console.log(res)
doElasticLayer(res.memo)
}
});
// document.body.addEventListener('touchmove',bodyScroll,false);
// $('body').css({'position':'fixed',"width":"100%"});
}
function doElasticLayer(memo, rendered){
if (rendered) {
$(".layerContent").show();
$(".newMain").hide();
return;
}
window.__memo = memo
var content = memo.content
var subject = memo.subject
var html='<div class="layerContent"><div class="educontent">' + var html='<div class="layerContent"><div class="educontent">' +
'<p class="clearfix pt25 pb25 color-grey-3 bor-bottom-greyE"><span class="fl font-24">工程教育专业认证【培养目标】</span>' + '<p class="clearfix pt25 pb25 color-grey-3 bor-bottom-greyE"><span class="fl font-24">'+ subject +'</span>' +
'<a href="javascript:void(0)" onclick="removeElasticLayer();" class="fr font-16 mt5">返回</a></p>' + '<a href="javascript:void(0)" onclick="removeElasticLayer();" class="fr font-16 mt5">返回</a></p>' +
'</div></div>' '<div id="MDContent"><textarea style="display:none">'
+ content +
'</textarea></div>'
$(".newMain").after(html).hide(); $(".newMain").after(html).hide();
document.body.addEventListener('touchmove',bodyScroll,false);
$('body').css({'position':'fixed',"width":"100%"}); editormd.markdownToHTML("MDContent", {
htmlDecode: "style,script,iframe", // you can filter tags decode
taskList: true,
tex: true, // 默认不解析
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
} }
function removeElasticLayer(){ function removeElasticLayer(){
$(".layerContent").remove(); $(".layerContent").hide();
$(".newMain").show(); $(".newMain").show();
} }

@ -107,7 +107,9 @@
<!-- // <script type="text/javascript" src="https://testbdweb.trustie.net/javascripts/create_kindeditor.js"></script> --> <!-- // <script type="text/javascript" src="https://testbdweb.trustie.net/javascripts/create_kindeditor.js"></script> -->
<script type="text/javascript" src="/js/create_kindeditor.js"></script> <script type="text/javascript" src="/js/create_kindeditor.js"></script>
<!-- <script type="text/javascript" src="/js/cm_all.js"></script> --> <!-- <script type="text/javascript" src="/js/cm_all.js"></script> -->
<script type="text/javascript" src="http://testbdweb.educoder.net/javascripts/educoder/edu_application.js"></script> <script type="text/javascript" src="http://testbdweb.educoder.net/javascripts/educoder/edu_application.js"></script>
<!-- <script type="text/javascript" src="http://localhost:3000/javascripts/educoder/edu_application.js"></script> -->
</body> </body>
</html> </html>

@ -612,7 +612,7 @@ class GraduatesRequirement extends Component {
<p className="font-18 courseSystem"> 毕业要求指标点达成计算 </p> <p className="font-18 courseSystem"> 毕业要求指标点达成计算 </p>
<p> <p>
<span class="color-grey-9 mr10">系统根据课程体系与毕业要求的支持关系以课程的考核与成绩判定方式一键计算毕业要求的达成度情况</span> <span class="color-grey-9 mr10">系统根据课程体系与毕业要求的支持关系以课程的考核与成绩判定方式一键计算毕业要求的达成度情况</span>
<a href="javascript:void(0)" onClick={() => window.elasticLayer(3530)} class="color-blue">查看详情</a> <a href="javascript:void(0)" onClick={() => window.elasticLayer(3535)} class="color-blue">查看详情</a>
</p> </p>
</li> </li>

@ -617,10 +617,10 @@ class MainContentContainer extends Component {
// 之前的task_commit方法 // 之前的task_commit方法
gameBuild(fileUpdateResponse, first) { gameBuild(fileUpdateResponse, first) {
const { st, challenge, output_sets, onRunCodeTestFinish, resetTestSetsExpandedArray, showSnackbar, time_limit } = this.props const { st, challenge, output_sets, onRunCodeTestFinish, resetTestSetsExpandedArray, showSnackbar, time_limit } = this.props
const { resubmit, content_modified } = fileUpdateResponse.data; const { resubmit, content_modified, sec_key } = fileUpdateResponse.data;
const timeOut = time_limit; const timeOut = time_limit;
// http://localhost:3000/myshixuns/so5w6iap97/stages/zl6kx8f7vfpo/game_build?first=1&resubmit=GDBEX741_1993 // http://localhost:3000/myshixuns/so5w6iap97/stages/zl6kx8f7vfpo/game_build?first=1&resubmit=GDBEX741_1993
const game_build_url = `${locationPath}/game_build?first=${first}&resubmit=${resubmit}&content_modified=${content_modified}` const game_build_url = `${locationPath}/game_build?first=${first}&resubmit=${resubmit}&content_modified=${content_modified}&sec_key=${sec_key}`
// var timeOut = parseInt(<%= @myshixun.main_mirror.try(:time_limit) %>); // 超时参数 // var timeOut = parseInt(<%= @myshixun.main_mirror.try(:time_limit) %>); // 超时参数
resetTestSetsExpandedArray() resetTestSetsExpandedArray()
axios.get(game_build_url, { axios.get(game_build_url, {
@ -639,7 +639,7 @@ class MainContentContainer extends Component {
let requestTimes = 0; let requestTimes = 0;
var gameStatusIntervalId = setInterval(()=>{ var gameStatusIntervalId = setInterval(()=>{
let game_status_url = `${locationPath}/game_status?port=${port}&resubmit=${resubmit||""}&time_out=${timeOutFlag}` let game_status_url = `${locationPath}/game_status?port=${port}&resubmit=${resubmit||""}&time_out=${timeOutFlag}&sec_key=${sec_key}`
axios.get(game_status_url, { axios.get(game_status_url, {
withCredentials: true, withCredentials: true,

Loading…
Cancel
Save