2015-05-19 17:12:43 +08:00
class HomeworkCommonController < ApplicationController
2015-07-09 15:50:04 +08:00
require 'net/http'
2015-07-16 16:15:47 +08:00
require 'json'
2015-07-31 16:59:30 +08:00
require " base64 "
2015-05-19 17:12:43 +08:00
layout " base_courses "
2015-09-11 09:36:44 +08:00
2015-09-10 17:11:16 +08:00
include StudentWorkHelper
2015-09-23 15:44:48 +08:00
before_filter :find_course , :only = > [ :index , :new , :create ]
2016-12-02 13:30:49 +08:00
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 ]
2016-02-25 16:18:24 +08:00
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 ]
2015-06-18 09:31:31 +08:00
before_filter :member_of_course , :only = > [ :index ]
2015-05-19 17:12:43 +08:00
def index
2016-05-09 16:16:03 +08:00
#unless params[:page]
# update_homework_time(@course.homework_commons)
#end
2016-05-24 10:34:36 +08:00
search = " % #{ params [ :search ] . to_s . strip . downcase } % "
2015-09-28 15:52:30 +08:00
@new_homework = HomeworkCommon . new
@new_homework . homework_detail_manual = HomeworkDetailManual . new
@new_homework . course = @course
@page = params [ :page ] ? params [ :page ] . to_i + 1 : 0
2015-05-19 17:12:43 +08:00
@is_teacher = User . current . logged? && ( User . current . admin? || User . current . allowed_to? ( :as_teacher , @course ) )
2016-01-29 15:37:03 +08:00
if @is_teacher
2016-05-19 13:50:45 +08:00
#@homeworks = @course.homework_commons.order("created_at desc").limit(10).offset(@page * 10)
2016-05-24 10:34:36 +08:00
@homework_commons = @course . homework_commons . where ( " name like '% #{ search } %' " ) . order ( " created_at desc " )
2016-01-29 15:37:03 +08:00
else
2016-05-19 13:50:45 +08:00
#@homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at desc").limit(10).offset(@page * 10)
2016-05-24 10:34:36 +08:00
@homework_commons = @course . homework_commons . where ( " name like '% #{ search } %' and publish_time <= ' #{ Date . today } ' " ) . order ( " created_at desc " )
2016-01-29 15:37:03 +08:00
end
2016-07-08 18:22:59 +08:00
#update_homework_time @homework_commons
2015-05-19 17:12:43 +08:00
@is_student = User . current . logged? && ( User . current . admin? || ( User . current . member_of_course? ( @course ) && ! @is_teacher ) )
2015-09-29 10:20:13 +08:00
@is_new = params [ :is_new ]
2015-12-17 15:14:52 +08:00
2016-05-19 13:50:45 +08:00
@homeworks = paginateHelper @homework_commons , 10
2015-12-17 15:14:52 +08:00
#设置at已读
@homeworks . each do | homework |
2016-11-10 10:41:35 +08:00
# homework.journals_for_messages.each do |j|
# User.current.at_messages.unviewed('JournalsForMessage', j.id).each {|x| x.viewed!}
# end
homework . delay . set_jour_viewed
2015-12-17 15:14:52 +08:00
end
2016-07-22 15:32:37 +08:00
@left_nav_type = 3
2015-05-19 17:12:43 +08:00
respond_to do | format |
2015-09-28 15:52:30 +08:00
format . js
2015-05-19 17:12:43 +08:00
format . html
end
end
2015-09-10 17:11:16 +08:00
#新建作业,在个人作业列表创建作业
2015-05-19 17:12:43 +08:00
def new
2015-09-10 17:11:16 +08:00
render_404
2015-05-19 17:12:43 +08:00
end
2015-09-10 17:11:16 +08:00
#新建作业,在个人作业列表创建作业
2015-05-19 17:12:43 +08:00
def create
2015-09-10 17:11:16 +08:00
redirect_to user_homeworks_user_path ( User . current . id )
2015-05-19 17:12:43 +08:00
end
def edit
2015-09-10 17:11:16 +08:00
@user = User . current
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-08-05 18:41:32 +08:00
@is_manage = params [ :is_manage ]
2016-09-19 17:14:14 +08:00
if @hw_status != 1
2016-07-22 15:32:37 +08:00
@left_nav_type = 3
2016-03-17 17:34:29 +08:00
respond_to do | format |
format . html { render :layout = > 'base_courses' }
end
else
respond_to do | format |
format . html { render :layout = > 'new_base_user' }
end
2015-05-20 16:49:19 +08:00
end
2015-05-19 17:12:43 +08:00
end
def update
2015-09-11 09:15:54 +08:00
if params [ :homework_common ]
@homework . name = params [ :homework_common ] [ :name ]
@homework . description = params [ :homework_common ] [ :description ]
2015-10-30 13:58:54 +08:00
if params [ :homework_common ] [ :publish_time ] == " "
@homework . publish_time = Date . today
else
@homework . publish_time = params [ :homework_common ] [ :publish_time ]
end
2016-04-21 17:00:30 +08:00
homework_detail_manual = @homework . homework_detail_manual || HomeworkDetailManual . new
2015-09-11 09:15:54 +08:00
@homework . end_time = params [ :homework_common ] [ :end_time ] || Time . now
@homework . course_id = params [ :course_id ]
2016-09-14 20:58:15 +08:00
if params [ :homework_type ] && params [ :homework_type ] . to_i != @homework . homework_type
if @homework . homework_type == 2
@homework . homework_detail_programing . destroy if @homework . homework_detail_programing
@homework . homework_tests . destroy_all
elsif @homework . homework_type == 3
@homework . homework_detail_group . destroy if @homework . homework_detail_group
2016-11-02 17:17:12 +08:00
create_works_list @homework
end
if params [ :homework_type ] . to_i == 3
@homework . student_works . destroy_all
2016-09-14 20:58:15 +08:00
end
end
2016-09-13 16:18:57 +08:00
@homework . homework_type = params [ :homework_type ] . to_i || @homework . homework_type
2016-09-14 16:45:10 +08:00
anonymous = params [ :homework_common ] [ :anonymous_comment ] ? params [ :homework_common ] [ :anonymous_comment ] . to_i : 1
2016-04-22 17:33:49 +08:00
if anonymous != @homework . anonymous_comment
if anonymous == 1
2016-10-20 17:31:48 +08:00
homework_detail_manual . ta_proportion = @homework . homework_type == 2 ? 0 . 4 : 1 . 0
2016-04-21 17:00:30 +08:00
else
2016-10-20 17:31:48 +08:00
homework_detail_manual . ta_proportion = @homework . homework_type == 2 ? 0 . 3 : 0 . 6
2016-04-21 17:00:30 +08:00
end
end
2015-05-19 17:12:43 +08:00
2016-08-23 10:17:08 +08:00
status = false
2015-10-30 13:58:54 +08:00
if @homework . publish_time < = Date . today && homework_detail_manual . comment_status == 0
homework_detail_manual . comment_status = 1
2016-08-23 10:17:08 +08:00
status = true
2015-10-30 13:58:54 +08:00
end
2016-03-15 17:21:12 +08:00
eval_start = homework_detail_manual . evaluation_start
2016-05-03 10:58:49 +08:00
if eval_start . nil? || ( eval_start < = @homework . end_time && homework_detail_manual . comment_status < = 1 )
2016-03-15 17:21:12 +08:00
homework_detail_manual . evaluation_start = @homework . end_time + 7
homework_detail_manual . evaluation_end = homework_detail_manual . evaluation_start + 7
end
2015-09-11 09:15:54 +08:00
@homework . save_attachments ( params [ :attachments ] )
render_attachment_warning_if_needed ( @homework )
2015-06-17 10:29:41 +08:00
2015-09-11 09:15:54 +08:00
#编程作业相关属性
if @homework . homework_type == 2
2015-09-11 14:59:30 +08:00
@homework . homework_detail_programing || = HomeworkDetailPrograming . new
@homework_detail_programing = @homework . homework_detail_programing
2016-09-14 16:45:10 +08:00
@homework_detail_programing . language = params [ :language_type ] . to_i if params [ :language_type ]
2016-04-22 17:33:49 +08:00
if anonymous != @homework . anonymous_comment
if anonymous == 1
2016-04-21 17:00:30 +08:00
@homework_detail_programing . ta_proportion = 0 . 6
else
@homework_detail_programing . ta_proportion = 0 . 5
end
end
2015-09-11 11:31:59 +08:00
2016-09-14 16:45:10 +08:00
@homework . homework_tests . delete_all if params [ :program ]
inputs = params [ :program ] [ :input ] if params [ :program ]
2015-09-11 14:59:30 +08:00
if Array === inputs
inputs . each_with_index do | val , i |
@homework . homework_tests << HomeworkTest . new (
input : val ,
output : params [ :program ] [ :output ] [ i ]
)
end
end
2015-06-17 10:29:41 +08:00
end
2015-07-22 17:47:48 +08:00
2015-12-17 10:16:29 +08:00
#分组作业
if @homework . homework_type == 3
@homework . homework_detail_group || = HomeworkDetailGroup . new
@homework_detail_group = @homework . homework_detail_group
2016-09-14 16:45:10 +08:00
@homework_detail_group . min_num = params [ :min_num ] . to_i if params [ :min_num ]
@homework_detail_group . max_num = params [ :max_num ] . to_i if params [ :max_num ]
2016-10-08 18:06:09 +08:00
@homework_detail_group . base_on_project = params [ :base_on_project ] ? 1 : 0
2015-12-17 10:16:29 +08:00
end
2016-09-14 16:45:10 +08:00
@homework . anonymous_comment = params [ :homework_common ] [ :anonymous_comment ] ? params [ :homework_common ] [ :anonymous_comment ] . to_i : 1
2015-09-11 09:15:54 +08:00
if @homework . save
2016-04-22 17:33:49 +08:00
homework_detail_manual . save if homework_detail_manual
2015-09-11 09:15:54 +08:00
@homework_detail_programing . save if @homework_detail_programing
2015-12-17 10:16:29 +08:00
@homework_detail_group . save if @homework_detail_group
2016-08-23 10:17:08 +08:00
if @homework . homework_type != 3 && homework_detail_manual . comment_status == 1 && status
create_works_list @homework
end
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-08-05 18:41:32 +08:00
if params [ :is_manage ] == " 1 "
redirect_to manage_or_receive_homeworks_user_path ( User . current . id )
elsif params [ :is_manage ] == " 2 "
redirect_to my_homeworks_user_path ( User . current . id )
2016-09-19 17:14:14 +08:00
elsif @hw_status == 1
2015-11-04 10:45:02 +08:00
redirect_to user_path ( User . current . id )
2016-09-19 17:14:14 +08:00
elsif @hw_status == 2
2015-11-04 10:45:02 +08:00
redirect_to course_path ( @course . id )
2016-09-21 10:34:38 +08:00
elsif @hw_status == 5
redirect_to student_work_index_url ( :homework = > @homework . id )
2016-09-19 17:14:14 +08:00
else
redirect_to homework_common_index_path ( :course = > @course . id )
2015-09-19 10:45:42 +08:00
end
2015-05-20 17:01:08 +08:00
end
end
2015-05-19 17:12:43 +08:00
end
def destroy
2015-05-28 14:13:47 +08:00
if @homework . destroy
respond_to do | format |
2015-09-19 10:45:42 +08:00
format . html {
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
if @hw_status == 1
redirect_to user_path ( User . current . id )
elsif @hw_status == 2
redirect_to course_path ( @course . id )
else
redirect_to homework_common_index_path ( :course = > @course . id )
2015-09-19 10:45:42 +08:00
end
}
2015-05-28 14:13:47 +08:00
end
end
2015-05-19 17:12:43 +08:00
end
2016-12-02 13:30:49 +08:00
# 成绩公开范围弹框
def alert_score_open_modal
if params [ :user_activity_id ]
@user_activity_id = params [ :user_activity_id ]
else
@user_activity_id = - 1
end
@hw_status = params [ :hw_status ] . to_i
end
def set_score_open
@homework . update_attribute ( 'score_open' , params [ :score_open ] . to_i )
@user_activity_id = params [ :user_activity_id ] . to_i
@hw_status = params [ :hw_status ] . to_i
@is_teacher = User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
end
2015-05-19 17:12:43 +08:00
#开启匿评
2015-05-26 10:22:16 +08:00
#statue 1:启动成功, 2: 启动失败, 作业总数大于等于2份时才能启动匿评, 3:已开启匿评,请务重复开启,4:没有开启匿评的权限
2015-05-19 17:12:43 +08:00
def start_anonymous_comment
2015-09-16 10:26:13 +08:00
@statue = 4 and return unless User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
2015-06-30 09:47:54 +08:00
@statue = 5 and return if Time . parse ( @homework . end_time . to_s ) . strftime ( " %Y-%m-%d " ) > = Time . now . strftime ( " %Y-%m-%d " )
2015-05-26 10:22:16 +08:00
if @homework_detail_manual . comment_status == 1
2016-07-08 13:17:14 +08:00
student_works = @homework . student_works . has_committed
2015-09-16 10:26:13 +08:00
if student_works && student_works . size > = 2
2016-11-02 16:46:47 +08:00
if @homework . homework_type == 3
student_work_projects = @homework . student_work_projects . where ( " student_work_id is not null " )
student_work_projects . each_with_index do | pro_work , pro_index |
n = @homework_detail_manual . evaluation_num
2016-11-03 10:25:53 +08:00
n = ( n < student_works . size && n != - 1 ) ? n : student_works . size - 1
2016-11-02 16:46:47 +08:00
work_index = - 1
student_works . each_with_index do | stu_work , stu_index |
if stu_work . id . to_i == pro_work . student_work_id . to_i
work_index = stu_index
end
end
assigned_homeworks = get_assigned_homeworks ( student_works , n , work_index )
assigned_homeworks . each do | h |
student_works_evaluation_distributions = StudentWorksEvaluationDistribution . new ( user_id : pro_work . user_id , student_work_id : h . id )
student_works_evaluation_distributions . save
end
end
else
2015-12-11 14:57:09 +08:00
student_works . each_with_index do | work , index |
user = work . user
n = @homework_detail_manual . evaluation_num
2016-11-03 10:25:53 +08:00
n = ( n < student_works . size && n != - 1 ) ? n : student_works . size - 1
2015-12-11 14:57:09 +08:00
assigned_homeworks = get_assigned_homeworks ( student_works , n , index )
assigned_homeworks . each do | h |
student_works_evaluation_distributions = StudentWorksEvaluationDistribution . new ( user_id : user . id , student_work_id : h . id )
student_works_evaluation_distributions . save
end
2015-05-26 10:22:16 +08:00
end
2016-11-02 16:46:47 +08:00
end
2015-05-26 10:22:16 +08:00
@homework_detail_manual . update_column ( 'comment_status' , 2 )
2015-12-18 21:34:31 +08:00
@homework_detail_manual . update_column ( 'evaluation_start' , Date . today )
2015-05-26 10:22:16 +08:00
@statue = 1
2015-09-19 10:54:50 +08:00
# 匿评开启消息邮件通知
send_message_anonymous_comment ( @homework , m_status = 2 )
2015-09-19 00:03:45 +08:00
Mailer . send_mail_anonymous_comment_open ( @homework ) . deliver
2015-05-26 10:22:16 +08:00
else
@statue = 2
2015-12-11 14:57:09 +08:00
end
2015-05-26 10:22:16 +08:00
else
@statue = 3
end
2015-11-06 14:57:39 +08:00
@user_activity_id = params [ :user_activity_id ] . to_i
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-09-21 10:34:38 +08:00
@is_teacher = User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
2015-05-19 17:12:43 +08:00
end
#关闭匿评
def stop_anonymous_comment
2015-05-26 11:24:48 +08:00
@homework_detail_manual . update_column ( 'comment_status' , 3 )
2015-12-18 21:34:31 +08:00
@homework_detail_manual . update_column ( 'evaluation_end' , Date . today )
2016-12-02 10:04:11 +08:00
# 计算缺评扣分
2016-07-08 13:17:14 +08:00
work_ids = " ( " + @homework . student_works . has_committed . map ( & :id ) . join ( " , " ) + " ) "
2016-12-02 10:04:11 +08:00
# 参与匿评的缺评计算
@homework . student_works . where ( " work_status != 0 " ) . 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 } and reviewer_role = 3 " ) . count
student_work . absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual . absence_penalty : 0
student_work . save
end
# 未参与匿评的缺评计算
if @homework_detail_manual . no_anon_penalty == 0
all_dis_eva = StudentWorksEvaluationDistribution . where ( " student_work_id IN #{ work_ids } " )
has_sw_count = all_dis_eva . select ( " distinct user_id " ) . count
anon_count = all_dis_eva . count / has_sw_count
@homework . student_works . where ( " work_status != 0 " ) . each do | student_work |
if student_work . user . student_works_evaluation_distributions . where ( " student_work_id IN #{ work_ids } " ) . count == 0
student_work . absence_penalty = @homework_detail_manual . absence_penalty * anon_count
student_work . save
2016-10-09 09:16:05 +08:00
end
end
2015-07-02 16:40:12 +08:00
end
2016-10-09 09:16:05 +08:00
2015-09-19 10:54:50 +08:00
# 匿评关闭消息邮件通知
send_message_anonymous_comment ( @homework , m_status = 3 )
2015-09-19 00:03:45 +08:00
Mailer . send_mail_anonymous_comment_close ( @homework ) . deliver
2015-11-06 14:57:39 +08:00
@user_activity_id = params [ :user_activity_id ] . to_i
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-09-21 10:34:38 +08:00
@is_teacher = User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
2015-05-26 11:24:48 +08:00
respond_to do | format |
format . js
end
2015-05-19 17:12:43 +08:00
end
2015-09-18 17:49:19 +08:00
# 开启/关闭匿评消息通知
2015-09-19 10:54:50 +08:00
def send_message_anonymous_comment ( homework , m_status )
2015-09-19 00:03:45 +08:00
# status 标记匿评状态 1为关闭 0为开启
2015-09-28 15:35:08 +08:00
course = homework . course
course . members . each do | m |
@homework . course_messages << CourseMessage . new ( :user_id = > m . user_id , :course_id = > course . id , :viewed = > false , :status = > m_status )
2015-09-19 00:03:45 +08:00
end
end
2015-05-19 17:12:43 +08:00
#提示
def alert_anonymous_comment
2015-05-26 10:00:37 +08:00
@cur_size = 0
@totle_size = 0
2016-11-02 16:46:47 +08:00
@work_size = 0
2015-05-26 10:00:37 +08:00
if @homework_detail_manual . comment_status == 1
@totle_size = @course . student . count
2016-11-02 16:46:47 +08:00
@cur_size = @homework . student_works . where ( " work_status != 0 " ) . size
@work_size = @homework . student_works . has_committed . size
2015-05-26 10:00:37 +08:00
elsif @homework_detail_manual . comment_status == 2
2016-11-04 19:10:22 +08:00
@homework . student_works . has_committed . map { | work | @totle_size += work . student_works_evaluation_distributions . count }
2015-05-26 10:00:37 +08:00
@cur_size = 0
2016-11-04 19:10:22 +08:00
@homework . student_works . has_committed . map { | work | @cur_size += work . student_works_scores . select ( " distinct user_id " ) . where ( :reviewer_role = > 3 ) . count }
2015-05-26 10:00:37 +08:00
end
@percent = format ( " %.2f " , ( @cur_size . to_f / ( @totle_size == 0 ? 1 : @totle_size ) ) * 100 )
2015-11-06 14:57:39 +08:00
@user_activity_id = params [ :user_activity_id ] . to_i
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2015-05-19 17:12:43 +08:00
respond_to do | format |
format . js
end
end
2015-11-04 10:45:02 +08:00
def alert_forbidden_anonymous_comment
if params [ :user_activity_id ]
@user_activity_id = params [ :user_activity_id ]
else
@user_activity_id = - 1
2016-02-25 16:18:24 +08:00
end
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-02-25 16:18:24 +08:00
respond_to do | format |
format . js
end
end
def open_student_works
if @homework . is_open == 0
2016-05-18 14:49:49 +08:00
@homework . update_column ( 'is_open' , 1 )
2016-02-25 16:18:24 +08:00
else
2016-05-18 14:49:49 +08:00
@homework . update_column ( 'is_open' , 0 )
2016-02-25 16:18:24 +08:00
end
@user_activity_id = params [ :user_activity_id ]
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-09-21 10:34:38 +08:00
@is_teacher = User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
2016-02-25 16:18:24 +08:00
end
def alert_open_student_works
if params [ :user_activity_id ]
@user_activity_id = params [ :user_activity_id ]
else
@user_activity_id = - 1
2015-11-04 10:45:02 +08:00
end
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2015-11-04 10:45:02 +08:00
respond_to do | format |
format . js
end
end
2015-07-30 20:36:00 +08:00
def programing_test
2015-07-31 16:59:30 +08:00
test = { language : params [ :language ] , src : Base64 . encode64 ( params [ :src ] ) , input : [ params [ :input ] ] , output : [ params [ :output ] ] }
2015-07-30 21:02:04 +08:00
@index = params [ :index ]
2015-07-30 21:07:43 +08:00
uri = URI ( 'http://192.168.80.21:8080/api/realtime.json' )
body = test . to_json
res = Net :: HTTP . new ( uri . host , uri . port ) . start do | client |
request = Net :: HTTP :: Post . new ( uri . path )
request . body = body
request [ " Content-Type " ] = " application/json "
client . request ( request )
end
result = JSON . parse ( res . body )
2015-08-04 15:25:05 +08:00
@err_msg = result [ " compile_error_msg " ]
2015-07-31 16:59:30 +08:00
result [ " results " ] . each do | re |
@result = re [ " status " ]
2015-07-31 13:58:27 +08:00
end
2015-07-30 20:36:00 +08:00
end
2015-09-23 15:44:48 +08:00
#启动匿评参数设置
def start_evaluation_set
2015-12-18 21:34:31 +08:00
if params [ :user_activity_id ]
@user_activity_id = params [ :user_activity_id ]
else
@user_activity_id = - 1
end
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2015-09-23 15:44:48 +08:00
end
#设置匿评参数
def set_evaluation_attr
if @homework_detail_manual
unless params [ :evaluation_start ] . to_s == @homework_detail_manual . evaluation_start . to_s
@homework_detail_manual . evaluation_start = params [ :evaluation_start ]
end
unless @homework_detail_manual . evaluation_end . to_s == params [ :evaluation_end ] . to_s
@homework_detail_manual . evaluation_end = params [ :evaluation_end ]
end
2016-11-02 15:19:17 +08:00
evaluation_num = @homework_detail_manual . evaluation_num
if params [ :evaluation_limit ] . to_i == 1
@homework_detail_manual . evaluation_num = params [ :evaluation_num ]
@homework_detail_manual . absence_penalty = evaluation_num == - 1 ? 5 : @homework_detail_manual . absence_penalty
else
@homework_detail_manual . evaluation_num = - 1
@homework_detail_manual . absence_penalty = 0
end
2015-09-23 15:44:48 +08:00
@homework_detail_manual . save
2015-12-18 21:34:31 +08:00
@user_activity_id = params [ :user_activity_id ] . to_i
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2016-09-21 10:34:38 +08:00
@is_teacher = User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
2015-09-23 15:44:48 +08:00
end
end
2015-10-23 14:45:56 +08:00
#评分设置
def score_rule_set
2015-10-28 10:17:45 +08:00
if params [ :user_activity_id ]
@user_activity_id = params [ :user_activity_id ]
else
@user_activity_id = - 1
end
2016-09-19 17:14:14 +08:00
@hw_status = params [ :hw_status ] . to_i
2015-10-23 14:45:56 +08:00
end
2015-05-19 17:12:43 +08:00
private
#获取课程
def find_course
@course = Course . find params [ :course ]
rescue
render_404
end
#获取作业
def find_homework
@homework = HomeworkCommon . find params [ :id ]
2015-05-20 17:01:08 +08:00
@homework_detail_manual = @homework . homework_detail_manual
2015-07-06 16:28:33 +08:00
@homework_detail_programing = @homework . homework_detail_programing
2015-12-11 14:57:09 +08:00
@homework_detail_group = @homework . homework_detail_group
2015-05-19 17:12:43 +08:00
@course = @homework . course
rescue
render_404
end
2015-05-20 17:53:01 +08:00
#是不是课程的老师
def teacher_of_course
2015-06-04 17:24:50 +08:00
render_403 unless User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
2015-05-20 17:53:01 +08:00
end
2015-05-26 10:22:16 +08:00
2015-06-18 09:31:31 +08:00
#当前用户是不是课程的成员
def member_of_course
2016-01-29 19:41:47 +08:00
render_403 unless @course . is_public == 1 || User . current . member_of_course? ( @course ) || User . current . admin?
2015-06-18 09:31:31 +08:00
end
2015-05-26 10:22:16 +08:00
def get_assigned_homeworks ( student_works , n , index )
student_works += student_works
student_works [ index + 1 .. index + n ]
end
2016-05-06 08:52:54 +08:00
def update_homework_time homeworks
unless homeworks . nil?
homeworks . each do | h |
2016-07-08 18:22:59 +08:00
if h . homework_type == 3 && h . homework_detail_group . base_on_project == 1
student_works = h . student_work_projects . where ( " is_leader = 1 && project_id != -1 " )
2016-05-06 08:52:54 +08:00
time = h . updated_at
unless student_works . nil?
student_works . each do | s |
project = Project . find s . project_id
unless project . nil? && project . gpid . nil?
2016-05-06 22:02:45 +08:00
project_time = project . updated_on
project_time = ForgeActivity . where ( " project_id=? " , project . id ) . last . updated_at if ForgeActivity . where ( " project_id=? " , project . id ) . last
2016-07-08 18:22:59 +08:00
if time . strftime ( '%Y-%m-%d %H:%M:%S' ) < project_time . strftime ( '%Y-%m-%d %H:%M:%S' )
2016-05-06 22:02:45 +08:00
time = project_time
end
2016-05-06 08:52:54 +08:00
begin
# gitlab端获取默认分支
g = Gitlab . client
default_branch = g . project ( project . gpid ) . default_branch
changesets = g . commits ( project . gpid , :ref_name = > default_branch )
changesets_latest_coimmit = changesets [ 0 ]
unless changesets [ 0 ] . blank?
2016-07-08 18:22:59 +08:00
if time . strftime ( '%Y-%m-%d %H:%M:%S' ) < changesets_latest_coimmit . created_at . strftime ( '%Y-%m-%d %H:%M:%S' )
2016-05-06 08:52:54 +08:00
time = changesets_latest_coimmit . created_at
end
end
rescue
end
end
end
end
s_time = time
2016-07-08 18:22:59 +08:00
if time . strftime ( '%Y-%m-%d %H:%M:%S' ) > h . updated_at . strftime ( '%Y-%m-%d %H:%M:%S' )
2016-05-18 14:49:49 +08:00
h . update_column ( 'updated_at' , s_time )
2016-07-08 18:22:59 +08:00
course_activity = CourseActivity . where ( " course_act_type=? and course_act_id =? " , 'HomeworkCommon' , h . id ) . first
if course_activity && ( time . strftime ( '%Y-%m-%d %H:%M:%S' ) > course_activity . updated_at . strftime ( '%Y-%m-%d %H:%M:%S' ) )
course_activity . update_column ( 'updated_at' , s_time )
end
user_activity = UserActivity . where ( " act_type=? and act_id =? " , 'HomeworkCommon' , h . id ) . first
if user_activity && ( time . strftime ( '%Y-%m-%d %H:%M:%S' ) > user_activity . updated_at . strftime ( '%Y-%m-%d %H:%M:%S' ) )
user_activity . update_column ( 'updated_at' , s_time )
end
org_activity = OrgActivity . where ( " org_act_type=? and org_act_id =? " , 'HomeworkCommon' , h . id ) . first
if org_activity && ( time . strftime ( '%Y-%m-%d %H:%M:%S' ) > org_activity . updated_at . strftime ( '%Y-%m-%d %H:%M:%S' ) )
org_activity . update_column ( 'updated_at' , s_time )
end
2016-05-06 08:52:54 +08:00
end
end
end
end
end
2015-08-26 20:23:17 +08:00
end