diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb
index eefedb5b..d13dc61f 100644
--- a/app/api/mobile/api.rb
+++ b/app/api/mobile/api.rb
@@ -36,7 +36,7 @@ module Mobile
content_type :json, "application/json;charset=UTF-8"
# use ActionDispatch::Session::CookieStore
-
+ require 'digest'
use Mobile::Middleware::ErrorHandler
helpers do
@@ -53,6 +53,16 @@ module Mobile
error!('401 Unauthorized', 401) if params[:private_token] != "hriEn3UwXfJs3PmyXnSG"
end
+ def cnmooc_access_key!
+ ## 签名
+ accessKeyId = 'LTAISM4HFWpQHh3g'.freeze
+ accessKeySecret = '9NMU8ushmFu8SN1EKHOhvo9jmv1qp0'.freeze
+ sign = Digest::MD5.hexdigest("AccessKeyId=#{accessKeyId}AccessKeySecret=#{accessKeySecret}").upcase
+ if params[:sign] != sign
+ error!('401 Unauthorized', 401)
+ end
+ end
+
# 有一些接口没登录也能查看数据
def career_authenticate!
pass = request.path.include?("introduction") || request.path.include?("get_published_careers")|| request.path.include?("get_current_user")
@@ -160,6 +170,7 @@ module Mobile
mount Apis::Careers
mount Apis::Assets
mount Apis::Ecloud
+ mount Apis::Cnmooc
diff --git a/app/api/mobile/apis/cnmooc.rb b/app/api/mobile/apis/cnmooc.rb
new file mode 100644
index 00000000..f49b4f66
--- /dev/null
+++ b/app/api/mobile/apis/cnmooc.rb
@@ -0,0 +1,54 @@
+# encoding=utf-8
+# 好大学接口数据
+module Mobile
+ module Apis
+ class Cnmooc < Grape::API
+ before {cnmooc_access_key!}
+ content_type :json, 'application/json;charset=UTF-8'
+
+ resources :cnmoocs do
+ desc '获取实训数据'
+ get "get_resources_data" do
+ CnmoocsService.new.get_resources_data params
+ end
+
+ desc "实训搜索功能"
+ params do
+ requires :name, type: String, desc: "搜索名称"
+ end
+ get 'search_resources' do
+ CnmoocsService.new.search_resources params
+ end
+
+ desc " 查找用户"
+ params do
+ requires :mail, type: String, desc: "邮箱地址"
+ end
+ get 'find_user' do
+ CnmoocsService.new.find_user params
+ end
+
+ desc "创建用户"
+ params do
+ requires :mail, type: String, desc: "邮箱地址"
+ requires :name, type: String, desc: "昵称"
+ requires :password, type: String, desc: "密码"
+ end
+ post "create_user" do
+ CnmoocsService.new.create_user params
+ end
+
+ desc "远程登录"
+ params do
+ requires :mail, type: String, desc: "邮箱地址"
+ requires :password, type: String, desc: "密码"
+ end
+ get "login_educoder" do
+ CnmoocsService.new.login_educoder params
+ end
+
+
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index c1c25151..435c71fc 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -132,16 +132,6 @@ class ApplicationController < ActionController::Base
end
end
- 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 ec_public_auth major_school
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 ||
diff --git a/app/controllers/ec_major_schools_controller.rb b/app/controllers/ec_major_schools_controller.rb
index 236f57d5..445ce70f 100644
--- a/app/controllers/ec_major_schools_controller.rb
+++ b/app/controllers/ec_major_schools_controller.rb
@@ -122,6 +122,7 @@ class EcMajorSchoolsController < ApplicationController
requirement_vs_objective_url: "#{requirement_vs_objective_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}",
requirement_vs_standard: "#{requirement_vs_standard_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}",
requirement_vs_courses: "#{requirement_vs_courses_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}",
+ students_url: student_lists_ec_major_school_ec_year_path(@year, ec_major_school_id: @year.ec_major_school_id),
go_back_url: ec_major_school_path(major),
ec_course_support_setting_url: ec_course_support_setting_url,
ec_course_reach_setting_url: ec_course_reach_setting_url,
diff --git a/app/controllers/ec_years_controller.rb b/app/controllers/ec_years_controller.rb
index 4661fd7b..c0c9483c 100644
--- a/app/controllers/ec_years_controller.rb
+++ b/app/controllers/ec_years_controller.rb
@@ -17,18 +17,11 @@ class EcYearsController < ApplicationController
# 添加年份
def create
@major_school = EcMajorSchool.find(params[:ec_major_school_id])
- ec_years = @major_school.ec_years.pluck(:year)
- exist_year = ec_years.include?(params[:year].to_i)
- if exist_year
+ if @major_school.ec_years.exists?(year: params[:year].to_i)
@status = -1
else
- prev_year = "#{params[:year].to_i - 1}"
- prev_ec_year = @major_school.ec_years.where(:year => prev_year).first
- 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
+ service = CopyEcYearService.new(@major_school, params[:year].to_i)
+ service.call
@status = 1
end
@major_manager = true
@@ -246,7 +239,7 @@ class EcYearsController < ApplicationController
template_file = EcTemplate.find_by_name "课程列表导入模板"
if template_file.present?
file = template_file.attachments.first
- @file_url = "/attachments/download/#{file.id}/#{file.filename}"
+ @file_url = '' #"/attachments/download/#{file.id}/#{file.filename}"
else
@file_url = "javascript:void(0);"
end
@@ -357,236 +350,6 @@ class EcYearsController < ApplicationController
@year = EcYear.find(params[:id])
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
def export_training_objectives objects
xls_report = StringIO.new
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index e404c5ee..0e5ac1d6 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -12,11 +12,12 @@ class HomeworkCommonController < ApplicationController
before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy,:start_evaluation_set,
:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,:open_student_works,
:set_score_open,:alert_score_open_modal,:add_to_homework_bank,:publish_notice,:publish_homework,:end_notice,:end_homework,
- :setting,:set_public,:homework_setting,:update_explanation,:cancel_publish, :homework_code_repeat, :review_detail,:move_to_category]
+ :setting,:set_public,:homework_setting,:update_explanation,:cancel_publish, :homework_code_repeat, :review_detail,:move_to_category,
+ :rename_modal, :rename_homework]
before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment,
:start_evaluation_set,:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,
:open_student_works,:add_to_homework_bank,:publish_notice,:end_notice,:publish_homework,:end_homework,:update_explanation,
- :cancel_publish, :move_to_category,:homework_setting]
+ :cancel_publish, :move_to_category,:homework_setting, :rename_homework, :rename_modal]
# before_filter :member_of_course, :only => [:index,:setting]
@@ -275,6 +276,19 @@ class HomeworkCommonController < ApplicationController
@groups = paginateHelper @groups, 5
end
+ def rename_modal
+
+ end
+
+ def rename_homework
+ if params[:name].blank?
+ @notice = true
+ else
+ @homework.update_attributes(:name => params[:name].strip)
+ redirect_to homework_common_index_path(:course => @course.id, :homework_type => @homework.homework_type)
+ end
+ end
+
def setting
@is_new = params[:is_new].to_i if params[:is_new]
@is_empty = @homework.publish_time.nil?
diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb
index 769481b0..0f62dbe8 100644
--- a/app/controllers/managements_controller.rb
+++ b/app/controllers/managements_controller.rb
@@ -853,7 +853,7 @@ class ManagementsController < ApplicationController
def evaluate_simple
page = params[:page]
- @recodes = EvaluateRecord.where("created_at > ?", Time.now - 1.days).reorder("consume_time desc")
+ @recodes = EvaluateRecord.where("created_at > ?", Time.now - 10000.days).reorder("consume_time desc")
@recodes_count = @recodes.size
@record_pages = Paginator.new @recodes_count, 20, page || 1
@offset ||= @record_pages.offset
@@ -2023,7 +2023,7 @@ end
# @schools = School.where(:id =>user_exs.map(&:school_id))
# end
@search = params[:search] # 搜索字
- @keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/课程名搜索
+ @keyword = params[:keyword].blank? ? "c_name" : params[:keyword] # 根据姓名/课程名搜索
@status = params[:status]
@school_id = params[:school_id]
@@ -2044,11 +2044,13 @@ end
if params[:status] && params[:status]!=''
@courses = @courses.where(:is_end => @status.to_i)
end
- if "u_name" == @keyword
+ if "c_name" == @keyword
+ @courses = @courses.where("name like ?", "%#{@search}%")
+ elsif "u_name" == @keyword
if @search.blank?
@courses = @courses
else
- user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
+ # user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
@courses = @courses.joins("join users u on courses.tea_id = u.id").where("concat(u.lastname, u.firstname) like '%#{@search}%'")
end
elsif "dep_name" == @keyword
@@ -4293,7 +4295,7 @@ end
count_row = 1
shixuns = Shixun.where(:id => shixun_ids).includes(discusses: [:user])
sheet1.row(0).concat(["序号", "实训ID", "实训名称", "实训作者", "作者单位", "评论数", "评论内容", "关卡", "评论者", "评论者职业",
- "评论者单位", "评论时间", "社区导师是否已回复"])
+ "评论者单位", "评论时间", "社区导师是否已回复", "我的账号回复内容", "回复时间"])
shixuns.each_with_index do |shixun, i|
discusses = shixun.discusses.where("user_id != ?", 1)
if beginTime.present?
@@ -4311,6 +4313,7 @@ end
discusses.each_with_index do |discuss, j|
user = discuss.user
content = discuss.content.gsub(/ /, "【图片评论】").gsub(/!\[\].+\)/, "【图片评论】")
+ myself_discuss = discuss.children.where(user_id: User.current.id).last
sheet1[count_row, 6] = strip_html content
sheet1[count_row, 7] = "第#{discuss.position}关"
sheet1[count_row, 8] = user.show_real_name
@@ -4318,6 +4321,8 @@ end
sheet1[count_row, 10] = user.school_name
sheet1[count_row, 11] = format_time discuss.created_at
sheet1[count_row, 12] = discuss.children.pluck(:user_id).include?(1) ? "是" : "否"
+ sheet1[count_row, 13] = myself_discuss.try(:content)
+ sheet1[count_row, 14] = myself_discuss ? (format_time myself_discuss.created_at) : ""
count_row += 1
end
#count_row += 1
diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index 6316446e..f6854c7a 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -493,6 +493,7 @@ class MyshixunsController < ApplicationController
return_back_time = format("%.3f", ( t1.to_f - brige_end_time.to_f)).to_f
status = jsonTestDetails['status']
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")}")
resubmit = jsonTestDetails['resubmit']
outPut = tran_base64_decode64(jsonTestDetails['outPut'])
@@ -535,7 +536,8 @@ class MyshixunsController < ApplicationController
end
logger.info("#############status: #{status}")
logger.info("#############resubmit: #{resubmit}")
- record = EvaluateRecord.where(:identifier => params[:sec_key]).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")}")
# status:0表示评测成功
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index c60a9959..ecc5ce46 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -850,7 +850,7 @@ class ShixunsController < ApplicationController
begin
raise "请先绑定邮箱" if User.current.mail.blank?
new_shixun = Shixun.new
- new_shixun.attributes = @shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier", "homepage_show","git_url")
+ new_shixun.attributes = @shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier", "homepage_show","git_url", "propaedeutics")
new_shixun.user_id = User.current.id
new_shixun.identifier = generate_identifier
new_shixun.status = 0
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 464a2842..89fddb36 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -584,16 +584,16 @@ class StudentWorkController < ApplicationController
@stundet_works = @stundet_works.where(:work_status => @status)
end
+ @stundet_works = search_work_member @stundet_works, @name
+
if @stundet_works.size != 0
if @order == "student_id"
- @stundet_works = @stundet_works.includes(:user => {:user_extensions => []}).order("user_extensions.student_id #{@b_sort}")
+ @stundet_works = @stundet_works.joins(:user => {:user_extensions => []}).order("user_extensions.student_id #{@b_sort}")
else
@stundet_works = @stundet_works.order("#{@order} #{@b_sort}")
end
end
- @stundet_works = search_work_member @stundet_works, @name
-
@score = @b_sort == "desc" ? "asc" : "desc"
# @is_focus = params[:is_focus] ? params[:is_focus].to_i : 0
# 消息传过来的ID
@@ -615,6 +615,7 @@ class StudentWorkController < ApplicationController
_index
@stundet_works = paginateHelper @stundet_works, @limit
+ @members = @course.members.select([:user_id, :course_group_id])
if @stundet_works.size != 0
@stundet_works = if @homework.homework_type == 1
@stundet_works.includes(:student_works_scores, [user: :user_extensions])
@@ -623,7 +624,6 @@ class StudentWorkController < ApplicationController
elsif @homework.homework_type == 4
@stundet_works.includes(:student_works_scores, [myshixun: :games], [user: :user_extensions])
end
- @members = @course.members.where(user_id: @stundet_works.pluck(:user_id)).select([:user_id, :course_group_id])
end
respond_to do |format|
format.js
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 01a08d95..35449aad 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1187,7 +1187,9 @@ module ApplicationHelper
end
res
rescue Exception => e
- Rails.logger.error("post failed! #{e}")
+ Rails.logger.error("post failed! #{e.message}")
+ # 增加错误栈信息
+ e.backtrace.each { |msg| Rails.logger.error("post_backtrace: #{msg}") }
raise("实训云平台繁忙(繁忙等级:#{status})")
end
end
@@ -1198,7 +1200,7 @@ module ApplicationHelper
res = Net::HTTP.get_response(uri).body
res = JSON.parse(res)
rescue => e
- logger.error("get response failed ! #{e}")
+ logger.error("get response failed ! #{e.message}")
raise("实训云平台繁忙(繁忙等级:84)")
end
end
@@ -6578,7 +6580,7 @@ def update_shixun_work_status homework
myshixuns = Myshixun.where(:shixun_id => shixun.id, :user_id => student_works.map(&:user_id))
myshixuns.each do |myshixun|
work = student_works.where(:user_id => myshixun.user_id).first
- member = homework.course.members.find_by(:user_id => work.user_id)
+ member = homework.course.members.find_by_user_id(work.user_id)
setting_time = homework_group_setting homework, member.try(:course_group_id)
games = myshixun.games.where(:challenge_id => challeng_ids)
myshixun_endtime = games.select{|game| game.status == 2}.size == games.size ? games.map(&:end_time).max : nil
diff --git a/app/models/ec_graduation_subitem.rb b/app/models/ec_graduation_subitem.rb
index b82b0789..12f60091 100644
--- a/app/models/ec_graduation_subitem.rb
+++ b/app/models/ec_graduation_subitem.rb
@@ -9,4 +9,7 @@ class EcGraduationSubitem < ActiveRecord::Base
# 课程目标配置
has_many :ec_course_targets, :through => :ec_graduation_subitem_course_targets
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
diff --git a/app/models/ec_require_sub_vs_standard.rb b/app/models/ec_require_sub_vs_standard.rb
index a68481e1..0c696a9e 100644
--- a/app/models/ec_require_sub_vs_standard.rb
+++ b/app/models/ec_require_sub_vs_standard.rb
@@ -1,3 +1,6 @@
class EcRequireSubVsStandard < ActiveRecord::Base
attr_accessible :ec_graduation_standard_id, :ec_graduation_subitem_id, :status
+
+ belongs_to :ec_graduation_standard
+ belongs_to :ec_graduation_subitem
end
diff --git a/app/models/ec_requirement_vs_objective.rb b/app/models/ec_requirement_vs_objective.rb
index 7b17e054..9c2b5878 100644
--- a/app/models/ec_requirement_vs_objective.rb
+++ b/app/models/ec_requirement_vs_objective.rb
@@ -1,3 +1,5 @@
class EcRequirementVsObjective < ActiveRecord::Base
attr_accessible :ec_graduation_requirement_id, :ec_training_objective_id, :status
+ belongs_to :ec_graduation_requirement
+ belongs_to :ec_training_subitem
end
diff --git a/app/models/ec_training_subitem.rb b/app/models/ec_training_subitem.rb
index 92edb18b..6f9a4f12 100644
--- a/app/models/ec_training_subitem.rb
+++ b/app/models/ec_training_subitem.rb
@@ -1,4 +1,5 @@
class EcTrainingSubitem < ActiveRecord::Base
belongs_to :ec_training_objective
+ has_many :ec_requirement_vs_objectives, foreign_key: :ec_training_objective_id
end
diff --git a/app/models/ec_year.rb b/app/models/ec_year.rb
index 83f5f78b..5f9aa00b 100644
--- a/app/models/ec_year.rb
+++ b/app/models/ec_year.rb
@@ -16,4 +16,8 @@ class EcYear < ActiveRecord::Base
# 课堂配置
has_many :ec_courses, :dependent => :destroy
acts_as_attachable
+
+ def prev_year
+ ec_major_school.ec_years.find_by_year(year - 1)
+ end
end
diff --git a/app/models/school.rb b/app/models/school.rb
index c5018191..8342039e 100644
--- a/app/models/school.rb
+++ b/app/models/school.rb
@@ -16,6 +16,7 @@ class School < ActiveRecord::Base
has_many :ec_majors, :through => :ec_major_schools
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 :customers, :dependent => :destroy
diff --git a/app/services/cnmoocs_service.rb b/app/services/cnmoocs_service.rb
new file mode 100644
index 00000000..33f166da
--- /dev/null
+++ b/app/services/cnmoocs_service.rb
@@ -0,0 +1,89 @@
+class CnmoocsService
+ include ApplicationHelper
+ include GamesHelper
+
+ def get_resources_data params
+ page = params[:pageNo].to_i
+ limit = params[:pageSize] || 16
+ offset = page * limit.to_i
+ shixuns = Shixun.select([:id, :identifier, :name, :myshixuns_count, :averge_star, :challenges_count, :trainee]).
+ where(status: 2, hidden: 0)
+ shixun_count = shixuns.count
+ pageCount = ((shixun_count / limit.to_f) == (shixun_count / limit)) ? (shixun_count / limit) : ((shixun_count / limit) + 1)
+ Rails.logger.info("#####{pageCount}")
+ Rails.logger.info("#####{limit}")
+ shixuns = shixuns.order("myshixuns_count desc").offset(offset).limit(limit)
+ shixun_list = shixun_data shixuns
+ {error: 0, messages: "请求成功",
+ page: {count: shixuns.count, totalCount: shixun_count, pageNo: page, pageSize: limit, pageCount: pageCount},
+ data: shixun_list }
+ end
+
+ def search_resources params
+ page = params[:pageNo].to_i
+ limit = params[:pageSize] || 16
+ offset = page * limit.to_i
+ shixuns = Shixun.select([:id, :identifier, :name, :myshixuns_count, :averge_star, :challenges_count, :trainee]).
+ where(status: 2, hidden: 0).where("name like ?", "%#{params[:name]}%")
+ shixun_count = shixuns.count
+ pageCount = ((shixun_count / limit.to_f) == (shixun_count / limit)) ? (shixun_count / limit) : ((shixun_count / limit) + 1)
+ shixuns = shixuns.order("myshixuns_count desc").offset(offset).limit(limit)
+ shixun_list = shixun_data shixuns
+ {error: 0, messages: "请求成功",
+ page: {count: shixuns.count, totalCount: shixun_count, pageNo: page, pageSize: limit, pageCount: pageCount},
+ data: shixun_list }
+ end
+
+ def find_user params
+ user = User.find_by_mail params[:mail]
+ if user
+ {error: 0, messages: "找到用户"}
+ else
+ {error: -1, messages: "找不到用户"}
+ end
+ end
+
+ def create_user params
+ user = User.find_by_mail params[:mail]
+ if user.blank?
+ ActiveRecord::Base.transaction do
+ # 如果Educoder中已存在与该OpenI用户的邮箱相同的用户,则会直接跳转到登录educoder的登录页面
+ user = User.new(lastname: params[:name], mail: params[:mail], mail_notification: email)
+ user.login = generate_login('m')
+ user.password = params[:password]
+ user.certification = 1
+ user.save!
+ UserExtensions.create!(user_id: user.id, school_id: School.first.id, identity: 4, gender: 0)
+ end
+ {error: 0, messages: "创建成功"}
+ else
+ {error: -1, messages: "邮箱已经存在,请直接使用邮箱登录"}
+ end
+ end
+
+ def login_educoder params
+ user, last_login_on = User.try_to_login(params[:mail], params[:password])
+ if user
+ self.logged_user = user
+ {error: 0, messages: "登录成功"}
+ else
+ {error: -1, messages: "登录失败,请检查邮箱和密码是否正确"}
+ end
+
+ end
+
+
+ private
+ def shixun_data shixuns
+ shixun_list = []
+ shixuns.includes(:tag_repertoires).each do |shixun|
+ tag_name = shixun.tag_repertoires.first.try(:name)
+ level = %W(初级 中级 高级 顶级)[shixun.trainee - 1]
+ shixun_list << {identifier: shixun.identifier, name: shixun.name, students_count: shixun.myshixuns_count,
+ challenges_count: shixun.challenges_count, score_info: shixun.averge_star, level: level}
+
+ end
+ {resouces: shixun_list}
+ end
+
+end
\ No newline at end of file
diff --git a/app/services/copy_ec_year_service.rb b/app/services/copy_ec_year_service.rb
new file mode 100644
index 00000000..31bac9f9
--- /dev/null
+++ b/app/services/copy_ec_year_service.rb
@@ -0,0 +1,344 @@
+ 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_course_target_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]
+ # 可能不存在,所以为 -1
+ to_relate.ec_course_evaluation_subitem_id = course_evaluation_subitem_map[relate.ec_course_evaluation_subitem_id] || -1
+ to_relate.save!
+
+ achievement_evaluation_relates_map[relate.id] = to_relate.id
+ 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, :ec_course_student_scores, :ec_student_score_targets)
+
+ 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_at')
+ to_student.save!
+
+ copy_student_achievements!(student, to_student)
+ copy_course_student_scores!(student, to_student)
+ copy_student_score_targets!(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 copy_course_student_scores!(student, to_student)
+ student.ec_course_student_scores.each do |score|
+ to_score = to_student.ec_course_student_scores.new
+ to_score.attributes = score.attributes.except('id', 'ec_year_student_id', 'ec_course_id', 'created_at', 'updated_at')
+ to_score.ec_course_id = course_map[score.ec_course_id]
+ to_score.save!
+
+ course_student_score_map[score.id] = to_score.id
+ end
+ end
+
+ def copy_student_score_targets!(student, to_student)
+ student.ec_student_score_targets.each do |target|
+ to_target = to_student.ec_student_score_targets.new
+ to_target.attributes = target.attributes.except('id', 'ec_course_id', 'ec_course_student_score_id',
+ 'ec_course_target_id', 'ec_year_student_id', 'eaer_id',
+ 'created_at', 'updated_at')
+ to_target.ec_course_id = course_map[target.ec_course_id]
+ to_target.ec_course_student_score_id = course_student_score_map[target.ec_course_student_score_id]
+ to_target.ec_course_target_id = course_target_map[target.ec_course_target_id]
+ to_target.eaer_id = achievement_evaluation_relates_map[target.eaer_id]
+ to_target.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 achievement_evaluation_relates_map
+ @_achievement_evaluation_relates_map ||= {}
+ end
+
+ def course_target_map
+ @_course_target_map ||= {}
+ end
+
+ def course_student_score_map
+ @_course_student_score_map ||= {}
+ end
+ end
\ No newline at end of file
diff --git a/app/services/games_service.rb b/app/services/games_service.rb
index 91645e84..e413c101 100644
--- a/app/services/games_service.rb
+++ b/app/services/games_service.rb
@@ -347,10 +347,11 @@ class GamesService
rev = params[:rev] ? params[:rev] : "master"
content_modified = 0
ActiveRecord::Base.transaction do
- sec_key = generates_identifier(EvaluateRecord, 10)
+
# params[:evaluate] 实训评测时更新必须给的参数,需要依据该参数做性能统计,其它类型的更新可以跳过
# 自动保存的时候evaluate为0;点评测的时候为1
if params[:evaluate] == 1
+ 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")}")
@@ -370,7 +371,8 @@ class GamesService
end
if content != last_content
content_modified = 1
- code_file = @g.edit_file(@myshixun.gpid, current_user.login, :content => content, :file_path => path, :branch_name => "master", :commit_message => "auto commit")
+ code_file = @g.edit_file(@myshixun.gpid, current_user.login, :content => content, :file_path => path, :branch_name => "master",
+ :commit_message => (params[:evaluate] == 1 ? "commit by author" : "auto commit" ))
end
# REDO:是否有读写分离的问题
if record.present?
@@ -387,7 +389,7 @@ class GamesService
if content != last_content && code_file.blank?
raise("update file failed")
else
- return {:success => "success", :resubmit => resubmit ,:content_modified => content_modified, sec_key: record.identifier}
+ return {:success => "success", :resubmit => resubmit ,:content_modified => content_modified, sec_key: record.try(:identifier)}
end
end
rescue Exception => e
@@ -800,6 +802,7 @@ class GamesService
# 轮询获取状态
# resubmit是在file_update中生成的,从game_build中传入的
def game_status params, current_user
+ Rails.logger.info("sec_key is #{params[:sec_key]}**1")
game = Game.find_by_identifier(params[:identifier])
resubmit_identifier = game.resubmit_identifier
# 如果没有超时并且正在评测中
@@ -811,6 +814,7 @@ class GamesService
return {:running_code_status => running_code_status, :running_code_message => running_code_message}
end
+ Rails.logger.info("sec_key is #{params[:sec_key]}**2")
Rails.logger.info("##### resubmit_identifier is #{resubmit_identifier}")
port = params[:port]
score = 0
@@ -837,6 +841,7 @@ class GamesService
end
end
+ Rails.logger.info("sec_key is #{params[:sec_key]}**3")
# 实训的最大评测次数,这个值是为了优化查询,每次只取最新的最新一次评测的结果集
max_query_index = game.query_index - 1
# 区分评测过未评测过,未评测过按需求取数据
@@ -853,7 +858,7 @@ class GamesService
# 能进入到此处,肯定是已经返回了结果,也就是说outputs中肯定有了数据
-
+ Rails.logger.info("sec_key is #{params[:sec_key]}**4")
test_sets_count = qurey_test_sets.size
# had_test = Output.where(:game_id => game.id, :query_index => max_query_index)
# had_test_count = had_test.count
@@ -880,6 +885,7 @@ class GamesService
web_route = game_challenge.try(:web_route)
mirror_name = shixun.mirror_name
+ Rails.logger.info("sec_key is #{params[:sec_key]}**5")
# 轮询结束,更新评测耗时
e_record = EvaluateRecord.where(:identifier => params[:sec_key]).first
if game_status == 0 || game_status == 2
@@ -897,12 +903,14 @@ class GamesService
# 实训制作者当前拥有的金币
grade = User.where(:id => game.user_id).pluck(:grade).first
+ Rails.logger.info("sec_key is #{params[:sec_key]}**6")
# 高性能取上一关、下一关
prev_game = Game.prev_identifier(shixun.id, game.myshixun_id, game_challenge.position)
next_game = Game.next_game(shixun.id, game.myshixun_id, game_challenge.position).try(:identifier)
output_hash = {:test_sets => test_sets, :had_test_count => test_sets_count, :test_sets_count => test_sets_count, :had_passed_testsests_error_count => had_passed_testsests_error_count}
+ Rails.logger.info("sec_key is #{params[:sec_key]}**7")
return {:grade => grade, :gold => score, :experience => experience, :status => game_status, :had_done => had_done,
:position => game_challenge.position, :port => port, :power => power, :record => record,
:mirror_name => mirror_name, :picture => picture, :web_route => web_route, :latest_output => latest_output,
@@ -1039,6 +1047,15 @@ class GamesService
end
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
user_info = []
diff --git a/app/views/common/index.html.erb b/app/views/common/index.html.erb
index d99476a6..df334ea8 100644
--- a/app/views/common/index.html.erb
+++ b/app/views/common/index.html.erb
@@ -1 +1 @@
-
Educoder You need to enable JavaScript to run this app.
\ No newline at end of file
+Educoder You need to enable JavaScript to run this app.
\ No newline at end of file
diff --git a/app/views/ec_major_schools/_year_list.html.erb b/app/views/ec_major_schools/_year_list.html.erb
index 45a85d29..1e561782 100644
--- a/app/views/ec_major_schools/_year_list.html.erb
+++ b/app/views/ec_major_schools/_year_list.html.erb
@@ -15,12 +15,12 @@
<%= graduation_requirements > 0 ? graduation_requirements : @btn_text %>
-
- <% students = year.ec_year_students.count %>
-
- <%= students > 0 ? students : @btn_text %>
-
-
+
+
+
+
+
+
<% courses = year.ec_courses.count %>
diff --git a/app/views/ec_major_schools/show.html.erb b/app/views/ec_major_schools/show.html.erb
index 05b58399..c3e4c924 100644
--- a/app/views/ec_major_schools/show.html.erb
+++ b/app/views/ec_major_schools/show.html.erb
@@ -4,21 +4,26 @@
@@ -31,7 +36,7 @@
届别
培养目标
毕业要求
-
学生
+
课程体系
课程目标 (达成情况)
毕业要求指标点 (达成情况)
diff --git a/app/views/ec_years/ec_course_setting.html.erb b/app/views/ec_years/ec_course_setting.html.erb
index 865d7733..9a697ba3 100644
--- a/app/views/ec_years/ec_course_setting.html.erb
+++ b/app/views/ec_years/ec_course_setting.html.erb
@@ -1,9 +1,10 @@
<%= render :partial => "ecs/ec_top_navigation" %>
-
- 课程体系(<%= @ec_courses.count %>)
-
+
温馨提醒:请下载课程模板( 点击下载 ),将本届所有参与认证的课程名称导入系统,以便录入教学活动相关数据
<%= file_field_tag 'attachments[dummy][file]',
diff --git a/app/views/ec_years/graduation_requirement.html.erb b/app/views/ec_years/graduation_requirement.html.erb
index 955f226d..eab92924 100644
--- a/app/views/ec_years/graduation_requirement.html.erb
+++ b/app/views/ec_years/graduation_requirement.html.erb
@@ -10,12 +10,15 @@
<%= render :partial => "ecs/ec_top_navigation" %>
-
- 毕业要求(及其指标点)
+
指标点
diff --git a/app/views/ec_years/requirement_vs_objective.html.erb b/app/views/ec_years/requirement_vs_objective.html.erb
index ad49d552..fc5c9198 100644
--- a/app/views/ec_years/requirement_vs_objective.html.erb
+++ b/app/views/ec_years/requirement_vs_objective.html.erb
@@ -1,12 +1,15 @@
<%= render :partial => "ecs/ec_top_navigation" %>
-
- 毕业要求对培养目标的支撑
+
表示支撑
diff --git a/app/views/ec_years/requirement_vs_standard.html.erb b/app/views/ec_years/requirement_vs_standard.html.erb
index 90c4ecce..64acade8 100644
--- a/app/views/ec_years/requirement_vs_standard.html.erb
+++ b/app/views/ec_years/requirement_vs_standard.html.erb
@@ -1,12 +1,15 @@
<%= render :partial => "ecs/ec_top_navigation" %>
-
- 毕业要求对通用标准的支撑
+
表示支撑
diff --git a/app/views/ec_years/training_objectives.html.erb b/app/views/ec_years/training_objectives.html.erb
index 585e8e22..fb8d860b 100644
--- a/app/views/ec_years/training_objectives.html.erb
+++ b/app/views/ec_years/training_objectives.html.erb
@@ -2,12 +2,15 @@
<%= render :partial => "ecs/ec_top_navigation" %>
-
- 培养目标
+
<%= render :partial => "training_objective_contents" %>
diff --git a/app/views/ecs/_ec_top_navigation.html.erb b/app/views/ecs/_ec_top_navigation.html.erb
index 56583596..40f3b50e 100644
--- a/app/views/ecs/_ec_top_navigation.html.erb
+++ b/app/views/ecs/_ec_top_navigation.html.erb
@@ -45,12 +45,16 @@
">4
" href="<%= requirement_vs_standard_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id) %>">毕业要求 vs 通用标准
+
">
+ ">5
+ " href="<%= student_lists_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id) %>">学生
+
">
- ">5
+ ">6
" href="<%= ec_course_setting_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id) %>">课程体系
">
- ">6
+ ">7
" href="<%= requirement_vs_courses_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id) %>">课程体系 vs 毕业要求
diff --git a/app/views/ecs/department.html.erb b/app/views/ecs/department.html.erb
index d31e0726..a072094a 100644
--- a/app/views/ecs/department.html.erb
+++ b/app/views/ecs/department.html.erb
@@ -19,12 +19,15 @@
<% end %>
-
- 专业列表
+
+
+ 专业列表
+ 请添加参与认证的专业名称 查看详情
+
<% if @is_school_manager %>
- 添加专业
+ 添加专业
<% end %>
-
+
<%= @obj_count %>
diff --git a/app/views/homework_common/_homework_index_list.html.erb b/app/views/homework_common/_homework_index_list.html.erb
index 884fd0b9..bcc9bae8 100644
--- a/app/views/homework_common/_homework_index_list.html.erb
+++ b/app/views/homework_common/_homework_index_list.html.erb
@@ -11,7 +11,8 @@
+ 课堂名称搜索
创建者姓名搜索
创建者单位搜索
diff --git a/app/views/managements/evaluate_simple.html.erb b/app/views/managements/evaluate_simple.html.erb
index cecfe4a9..a278395c 100644
--- a/app/views/managements/evaluate_simple.html.erb
+++ b/app/views/managements/evaluate_simple.html.erb
@@ -1,54 +1,29 @@
-<% if false %>
-
-
-<% end %>
-
<% if @recodes.present? %>
- 序号
- 总耗时
+ ID
+ 总耗时
作品更新
文件更新
中间层总耗时
pull代码
pod启动
pod执行
- 中间层回传
+ 回传时间
前端轮询
- 回调结果存储
+ 结果存储
创建时间
- 实训名称
+ 唯一表示
+ 实训名称
- <% @recodes.each_with_index do |record, index| %>
+ <% @recodes.each do |record| %>
- <%= index %>
+ <%= record.id %>
<%= record.consume_time %>
<%= record.student_work %>
<%= record.file_update %>
@@ -60,6 +35,7 @@
<%= record.front_js %>
<%= record.test_cases %>
<%= format_time record.created_at %>
+ <%= record.identifier %>
<%= link_to record.shixun.try(:name), task_path(record.game), :target => "_blank", :title => "#{record.shixun.try(:name)}" %>
<% end %>
diff --git a/app/views/shixuns/_settings_show.html.erb b/app/views/shixuns/_settings_show.html.erb
index 92417f49..72752703 100644
--- a/app/views/shixuns/_settings_show.html.erb
+++ b/app/views/shixuns/_settings_show.html.erb
@@ -1,3 +1,4 @@
+
配置
diff --git a/app/views/student_work/index.html.erb b/app/views/student_work/index.html.erb
index 99384dfc..0e66401c 100644
--- a/app/views/student_work/index.html.erb
+++ b/app/views/student_work/index.html.erb
@@ -199,14 +199,11 @@
不限
>
-
未提交(<%= @all_student_works.where(:work_status => 0).count %>
- )
+
未提交(<%= @all_student_works.where(:work_status => 0).count %>)
>
-
按时提交(<%= student_works.where(:work_status => 1).count %>
- )
+
按时提交(<%= student_works.where(:work_status => 1).count %>)
>
-
延时提交(<%= student_works.where(:work_status => 2).count %>
- )
+
延时提交(<%= student_works.where(:work_status => 2).count %>)
diff --git a/app/views/subjects/_subject_members.html.erb b/app/views/subjects/_subject_members.html.erb
index 87c518c7..b2665099 100644
--- a/app/views/subjects/_subject_members.html.erb
+++ b/app/views/subjects/_subject_members.html.erb
@@ -4,48 +4,47 @@
-
+
<%= image_tag(url_to_avatar(member.user), :width =>"80", :height => "80", :class => "radius", :alt=>"头像") %>
+
+
<%= member.user.try(:show_name) %>
+
+
+
+ <%= member.user.identity == "学生" ? "" : member.user.identity %>
+
+
+
+
-
+
-
+ <% if User.current.admin? && member.role != 1 %>
+
+
+
+ <% end %>
- <% if User.current.admin? && member.role != 1 %>
-
-
-
- <% end %>
+ <% if User.current.member_of_subject?(@subject) && member.position > 1 %>
+
+
+
+ <% end %>
- <% if User.current.member_of_subject?(@subject) && member.position > 1 %>
-
-
-
- <% end %>
+ <% if User.current.member_of_subject?(@subject) && member.position < @subject.subject_members.size %>
+
+
+
+ <% end %>
- <% if User.current.member_of_subject?(@subject) && member.position < @subject.subject_members.size %>
-
-
-
- <% end %>
+
-
+
-
-
-
<%= member.user.try(:show_name) %>
-
-
-
- <%= member.user.identity == "学生" ? "" : member.user.identity %>
-
-
-
-
<% end %>
<% end %>
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index e4dfe08d..137a1231 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1103,6 +1103,8 @@ RedmineApp::Application.routes.draw do ## oauth相关
match 'move_to_category', :via => [:get,:post]
match 'homework_code_repeat', :via => [:get,:post]
get 'review_detail'
+ post 'rename_homework'
+ get 'rename_modal'
end
collection do
diff --git a/db/migrate/20190525060616_modify_exec_time_for_shixun.rb b/db/migrate/20190525060616_modify_exec_time_for_shixun.rb
new file mode 100644
index 00000000..a5602ca8
--- /dev/null
+++ b/db/migrate/20190525060616_modify_exec_time_for_shixun.rb
@@ -0,0 +1,8 @@
+class ModifyExecTimeForShixun < ActiveRecord::Migration
+ def up
+ change_column(:shixuns, :exec_time, :integer, :default => 20)
+ end
+
+ def down
+ end
+end
diff --git a/public/javascripts/educoder/edu_application.js b/public/javascripts/educoder/edu_application.js
index 437fb319..f1caa2c5 100644
--- a/public/javascripts/educoder/edu_application.js
+++ b/public/javascripts/educoder/edu_application.js
@@ -1229,3 +1229,55 @@ $(document).bind('ajaxError', function(event, xhr, settings) {
}
});
/** tpm实训开启按钮,不允许多次点击 END */
+
+
+//工程认证各个页面的查看详情弹层
+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='' +
+ '
'+ subject +' ' +
+ '返回
' +
+ '
'
+
+ $(".newMain").after(html).hide();
+
+ editormd.markdownToHTML("MDContent", {
+ htmlDecode: "style,script,iframe", // you can filter tags decode
+ taskList: true,
+ tex: true, // 默认不解析
+ flowChart: true, // 默认不解析
+ sequenceDiagram: true // 默认不解析
+ });
+}
+function removeElasticLayer(){
+ $(".layerContent").hide();
+ $(".newMain").show();
+}
diff --git a/public/react/.vscode/settings.json b/public/react/.vscode/settings.json
deleted file mode 100644
index 0e0dcd23..00000000
--- a/public/react/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-
-}
\ No newline at end of file
diff --git a/public/react/public/index.html b/public/react/public/index.html
index 71088e5f..e1f4976e 100644
--- a/public/react/public/index.html
+++ b/public/react/public/index.html
@@ -107,7 +107,9 @@
+
+