@ -3,6 +3,8 @@ class HomeworkCommonController < ApplicationController
require 'json'
require 'json'
require " base64 "
require " base64 "
layout " base_courses "
layout " base_courses "
include StudentWorkHelper
before_filter :find_course , :only = > [ :index , :new , :create , :next_step ]
before_filter :find_course , :only = > [ :index , :new , :create , :next_step ]
before_filter :find_homework , :only = > [ :edit , :update , :alert_anonymous_comment , :start_anonymous_comment , :stop_anonymous_comment , :destroy ]
before_filter :find_homework , :only = > [ :edit , :update , :alert_anonymous_comment , :start_anonymous_comment , :stop_anonymous_comment , :destroy ]
before_filter :teacher_of_course , :only = > [ :new , :create , :edit , :update , :destroy , :start_anonymous_comment , :stop_anonymous_comment , :alert_anonymous_comment ]
before_filter :teacher_of_course , :only = > [ :new , :create , :edit , :update , :destroy , :start_anonymous_comment , :stop_anonymous_comment , :alert_anonymous_comment ]
@ -18,265 +20,161 @@ class HomeworkCommonController < ApplicationController
end
end
end
end
#新建作业,在个人作业列表创建作业
def new
def new
@homework_type = " 1 "
render_404
# @homework_type = "1"
@homework = HomeworkCommon . new
#
@homework . safe_attributes = params [ :homework_common ]
# @homework = HomeworkCommon.new
@homework . late_penalty = 2
# @homework.safe_attributes = params[:homework_common]
@homework . end_time = ( Time . now + 3600 * 24 ) . strftime ( '%Y-%m-%d' )
# @homework.late_penalty = 2
@homework . publish_time = Time . now . strftime ( '%Y-%m-%d' )
# @homework.end_time = (Time.now + 3600 * 24).strftime('%Y-%m-%d')
# @homework.publish_time = Time.now.strftime('%Y-%m-%d')
if @homework_type == " 1 "
#
#匿评作业相关属性
# if @homework_type == "1"
@homework_detail_manual = HomeworkDetailManual . new
# #匿评作业相关属性
@homework_detail_manual . ta_proportion = 0 . 6
# @homework_detail_manual = HomeworkDetailManual.new
@homework_detail_manual . absence_penalty = 2
# @homework_detail_manual.ta_proportion = 0.6
@homework_detail_manual . evaluation_num = 3
# @homework_detail_manual.absence_penalty = 2
@homework_detail_manual . evaluation_start = Time . now . strftime ( '%Y-%m-%d' )
# @homework_detail_manual.evaluation_num = 3
@homework_detail_manual . evaluation_end = ( Time . now + 3600 * 24 ) . strftime ( '%Y-%m-%d' )
# @homework_detail_manual.evaluation_start = Time.now.strftime('%Y-%m-%d')
@homework . homework_detail_manual = @homework_detail_manual
# @homework_detail_manual.evaluation_end = (Time.now + 3600 * 24).strftime('%Y-%m-%d')
elsif @homework_type == " 2 "
# @homework.homework_detail_manual = @homework_detail_manual
#编程作业相关属性
# elsif @homework_type == "2"
@homework_detail_programing = HomeworkDetailPrograming . new
# #编程作业相关属性
@homework . homework_detail_programing = @homework_detail_programing
# @homework_detail_programing = HomeworkDetailPrograming.new
end
# @homework.homework_detail_programing = @homework_detail_programing
respond_to do | format |
# end
format . html
# respond_to do |format|
end
# format.html
end
# end
#新建作业下一步
def next_step
@homework_type = params [ :homework_common_type ]
@homework = HomeworkCommon . new
@homework . safe_attributes = params [ :homework_common ]
@homework . late_penalty = 2
@homework . end_time = ( Time . now + 3600 * 24 ) . strftime ( '%Y-%m-%d' )
@homework . publish_time = Time . now . strftime ( '%Y-%m-%d' )
if @homework_type == " 1 "
#匿评作业相关属性
@homework_detail_manual = HomeworkDetailManual . new
@homework_detail_manual . ta_proportion = 0 . 6
@homework_detail_manual . absence_penalty = 2
@homework_detail_manual . evaluation_num = 3
@homework_detail_manual . evaluation_start = Time . now . strftime ( '%Y-%m-%d' )
@homework_detail_manual . evaluation_end = ( Time . now + 3600 * 24 ) . strftime ( '%Y-%m-%d' )
@homework . homework_detail_manual = @homework_detail_manual
elsif @homework_type == " 2 "
#编程作业相关属性
@homework_detail_programing = HomeworkDetailPrograming . new
@homework . homework_detail_programing = @homework_detail_programing
end
respond_to do | format |
format . html
end
end
end
#新建作业,在个人作业列表创建作业
def create
def create
if params [ :homework_common ]
redirect_to user_homeworks_user_path ( User . current . id )
homework = HomeworkCommon . new
# if params[:homework_common]
homework . name = params [ :homework_common ] [ :name ]
# homework = HomeworkCommon.new
homework . description = params [ :homework_common ] [ :description ]
# homework.name = params[:homework_common][:name]
homework . end_time = params [ :homework_common ] [ :end_time ]
# homework.description = params[:homework_common][:description]
homework . publish_time = params [ :homework_common ] [ :publish_time ]
# homework.end_time = params[:homework_common][:end_time]
homework . homework_type = params [ :homework_common ] [ :homework_type ]
# homework.publish_time = params[:homework_common][:publish_time]
homework . late_penalty = params [ :late_penalty ]
# homework.homework_type = params[:homework_common][:homework_type]
homework . user_id = User . current . id
# homework.late_penalty = params[:late_penalty]
homework . course_id = @course . id
# homework.user_id = User.current.id
# homework.course_id = @course.id
homework . save_attachments ( params [ :attachments ] )
#
render_attachment_warning_if_needed ( homework )
# homework.save_attachments(params[:attachments])
# render_attachment_warning_if_needed(homework)
if homework . homework_type == 2
#
homework_detail_programing = HomeworkDetailPrograming . new
# if homework.homework_type == 2
homework_detail_programing . language = params [ :language ]
# homework_detail_programing = HomeworkDetailPrograming.new
homework_detail_programing . standard_code = params [ :standard_code ]
# homework_detail_programing.language = params[:language]
homework_detail_programing . ta_proportion = params [ :ta_proportion ] || 0 . 6
# homework_detail_programing.standard_code = params[:standard_code]
question = { title : homework . name , content : homework . description }
# homework_detail_programing.ta_proportion = params[:ta_proportion] || 0.6
question [ :input ] = [ ]
# question = {title:homework.name,content:homework.description}
question [ :output ] = [ ]
# question[:input] = []
if params [ :input ] && params [ :output ] && params [ :result ]
# question[:output] = []
params [ :input ] . each do | k , v |
# if params[:input] && params[:output] && params[:result]
if params [ :output ] . include? k
# params[:input].each do |k,v|
homework_test = HomeworkTest . new
# if params[:output].include? k
homework_test . input = v
# homework_test = HomeworkTest.new
homework_test . output = params [ :output ] [ k ]
# homework_test.input = v
homework_test . result = params [ :result ] [ k ]
# homework_test.output = params[:output][k]
homework_test . error_msg = params [ :error_msg ]
# homework_test.result = params[:result][k]
homework . homework_tests << homework_test
# homework_test.error_msg = params[:error_msg]
question [ :input ] << homework_test . input
# homework.homework_tests << homework_test
question [ :output ] << homework_test . output
# question[:input] << homework_test.input
end
# question[:output] << homework_test.output
end
# end
end
# end
# end
# uri = URI('http://192.168.80.21:8080/api/questions.json')
#
# body = question.to_json
# # uri = URI('http://192.168.80.21:8080/api/questions.json')
# res = Net::HTTP.new(uri.host, uri.port).start do |client|
# # body = question.to_json
# request = Net::HTTP::Post.new(uri.path)
# # res = Net::HTTP.new(uri.host, uri.port).start do |client|
# request.body = body
# # request = Net::HTTP::Post.new(uri.path)
# request["Content-Type"] = "application/json"
# # request.body = body
# client.request(request)
# # request["Content-Type"] = "application/json"
# end
# # client.request(request)
# result = JSON.parse(res.body)
# # end
# homework_detail_programing.question_id = result["id"] if result["status"] && result["status"] == 0
# # result = JSON.parse(res.body)
# # homework_detail_programing.question_id = result["id"] if result["status"] && result["status"] == 0
homework . homework_detail_programing = homework_detail_programing
#
else
# homework.homework_detail_programing = homework_detail_programing
#匿评作业相关属性
# else
homework_detail_manual = HomeworkDetailManual . new
# #匿评作业相关属性
homework_detail_manual . ta_proportion = params [ :ta_proportion ] || 0 . 6
# homework_detail_manual = HomeworkDetailManual.new
homework_detail_manual . comment_status = 1
# homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6
homework_detail_manual . evaluation_start = params [ :evaluation_start ]
# homework_detail_manual.comment_status = 1
homework_detail_manual . evaluation_end = params [ :evaluation_end ]
# homework_detail_manual.evaluation_start = params[:evaluation_start]
homework_detail_manual . evaluation_num = params [ :evaluation_num ]
# homework_detail_manual.evaluation_end = params[:evaluation_end]
homework_detail_manual . absence_penalty = params [ :absence_penalty ]
# homework_detail_manual.evaluation_num = params[:evaluation_num]
homework . homework_detail_manual = homework_detail_manual
# homework_detail_manual.absence_penalty = params[:absence_penalty]
end
# homework.homework_detail_manual = homework_detail_manual
# end
if homework . save
#
homework_detail_programing . save if homework_detail_programing
# if homework.save
homework_detail_manual . save if homework_detail_manual
# homework_detail_programing.save if homework_detail_programing
respond_to do | format |
# homework_detail_manual.save if homework_detail_manual
format . html {
# respond_to do |format|
flash [ :notice ] = l ( :notice_successful_create )
# format.html {
redirect_to homework_common_index_path ( :course = > @course . id )
# flash[:notice] = l(:notice_successful_create)
}
# redirect_to homework_common_index_path(:course => @course.id)
end
# }
return
# end
end
# return
end
# end
# end
respond_to do | format |
#
format . html {
# respond_to do |format|
flash [ :notice ] = l ( :notice_failed_create )
# format.html {
redirect_to new_homework_common_path ( :course = > @course . id )
# flash[:notice] = l(:notice_failed_create)
}
# redirect_to new_homework_common_path(:course => @course.id)
end
# }
# end
end
end
def edit
def edit
@user = User . current
respond_to do | format |
respond_to do | format |
format . html
format . html { render :layout = > 'new_base_user' }
end
end
end
end
def update
def update
@homework . name = params [ :homework_common ] [ :name ]
if params [ :homework_common ]
@homework . description = params [ :homework_common ] [ :description ]
@homework . name = params [ :homework_common ] [ :name ]
@homework . end_time = params [ :homework_common ] [ :end_time ]
@homework . description = params [ :homework_common ] [ :description ]
@homework . publish_time = params [ :homework_common ] [ :publish_time ]
@homework . end_time = params [ :homework_common ] [ :end_time ] || Time . now
@homework . homework_type = params [ :homework_common ] [ :homework_type ] if params [ :homework_common ] [ :homework_type ]
@homework . course_id = params [ :course_id ]
unless @homework . late_penalty == params [ :late_penalty ]
@homework . student_works . where ( " created_at > ' #{ @homework . end_time } 23:59:59' " ) . each do | student_work |
student_work . late_penalty = params [ :late_penalty ]
student_work . save
end
@homework . late_penalty = params [ :late_penalty ]
end
# @homework.course_id = @course.id
#匿评作业相关属性
@homework . save_attachments ( params [ :attachments ] )
if @homework . homework_type == 1 && @homework_detail_manual
render_attachment_warning_if_needed ( @homework )
@homework_detail_manual . ta_proportion = params [ :ta_proportion ] || 0 . 6
@homework_detail_manual . evaluation_start = params [ :evaluation_start ]
@homework_detail_manual . evaluation_end = params [ :evaluation_end ]
@homework_detail_manual . evaluation_num = params [ :evaluation_num ]
unless @homework_detail_manual . absence_penalty == params [ :absence_penalty ]
if @homework_detail_manual . comment_status == 3 #当前作业处于匿评结束状态,修改缺评扣分才会修改每个作品应扣分的值
work_ids = " ( " + @homework . student_works . map ( & :id ) . join ( " , " ) + " ) "
@homework . student_works . each do | student_work |
absence_penalty_count = student_work . user . student_works_evaluation_distributions . where ( " student_work_id IN #{ work_ids } " ) . count - student_work . user . student_works_scores . where ( " student_work_id IN #{ work_ids } " ) . count
student_work . absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual . absence_penalty : 0
student_work . save
end
end
@homework_detail_manual . absence_penalty = params [ :absence_penalty ]
end
elsif @homework . homework_type == 0 #普通作业, 缺评扣分为0分, 每个作品的缺评扣分改为0分, 防止某些作业在结束匿评之后改为普通作业
@homework . student_works . where ( " absence_penalty != 0 " ) . each do | student_work |
student_work . late_penalty = 0
student_work . save
end
@homework_detail_manual . absence_penalty = 0 if @homework_detail_manual
end
if @homework . homework_type == 2 && @homework_detail_programing #编程作业
#编程作业相关属性
@homework_detail_programing . language = params [ :language ]
if @homework . homework_type == 2
@homework_detail_programing . standard_code = params [ :standard_code ]
@homework . homework_detail_programing || = HomeworkDetailPrograming . new
@homework_detail_programing . ta_proportion = params [ :ta_proportion ] || 0 . 6
@homework_detail_programing = @homework . homework_detail_programing
homework_tests = @homework . homework_tests
@homework_detail_programing . ta_proportion = params [ :ta_proportion ] || 0 . 6
#需要删除的测试
@homework_detail_programing . language = params [ :language_type ] . to_i
ids = homework_tests . map ( & :id ) - params [ :input ] . keys . map ( & :to_i )
ids . each do | id |
@homework . homework_tests . delete_all
homework_test = HomeworkTest . find id
inputs = params [ :program ] [ :input ]
homework_test . destroy if homework_test
if Array === inputs
end
inputs . each_with_index do | val , i |
if params [ :input ] && params [ :output ] && params [ :result ]
@homework . homework_tests << HomeworkTest . new (
params [ :input ] . each do | k , v |
input : val ,
if params [ :output ] . include? k
output : params [ :program ] [ :output ] [ i ]
homework_test = HomeworkTest . find_by_id k
)
if homework_test #已存在的测试,修改
homework_test . input = v
homework_test . output = params [ :output ] [ k ]
homework_test . result = params [ :result ] [ k ]
homework_test . error_msg = params [ :error_msg ]
else #不存在的测试,增加
homework_test = HomeworkTest . new
homework_test . input = v
homework_test . output = params [ :output ] [ k ]
homework_test . result = params [ :result ] [ k ]
homework_test . error_msg = params [ :error_msg ]
homework_test . homework_common = @homework
end
end
homework_test . save
end
end
end
end
#发送修改作业的请求
question = { title : @homework . name , content : @homework . description }
question [ :input ] = [ ]
question [ :output ] = [ ]
@homework . homework_tests . each do | test |
question [ :input ] << test . input
question [ :output ] << test . output
end
end
# uri = URI("http://192.168.80.21:8080/api/questions/#{@homework_detail_programing.question_id}.json")
# body = question.to_json
# res = Net::HTTP.new(uri.host, uri.port).start do |client|
# request = Net::HTTP::Put.new(uri.path)
# request.body = body
# request["Content-Type"] = "application/json"
# client.request(request)
# end
# result = JSON.parse(res.body)
end
@homework . save_attachments ( params [ :attachments ] )
if @homework . save
render_attachment_warning_if_needed ( @homework )
@homework_detail_manual . save if @homework_detail_manual
@homework_detail_programing . save if @homework_detail_programing
if @homework . save
redirect_to user_homeworks_user_path ( User . current . id )
@homework_detail_manual . save if @homework_detail_manual
@homework_detail_programing . save if @homework_detail_programing
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_edit )
redirect_to homework_common_index_path ( :course = > @course . id )
}
end
return
else
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_failed_edit )
redirect_to edit_homework_common_path ( @homework )
}
end
end
end
end
end
end
@ -284,7 +182,7 @@ class HomeworkCommonController < ApplicationController
def destroy
def destroy
if @homework . destroy
if @homework . destroy
respond_to do | format |
respond_to do | format |
format . html { redirect_to homework_common_index_path( :course = > @course . id ) }
format . html { redirect_to user_homeworks_user_path( User . current . id ) }
end
end
end
end
end
end