You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/helpers/homework_commons_helper.rb

241 lines
11 KiB

6 years ago
module HomeworkCommonsHelper
# 未发布时非老师角色不能访问,发布后非课堂成员不能访问未公开的作业,学生需要考虑分班设置的作业是否已发布
def homework_publish
if (@user_course_identity >= Course::STUDENT && (@homework.publish_time.nil? || @homework.publish_time > Time.now)) ||
(@user_course_identity > Course::STUDENT && (!@homework.unified_setting || @course.is_public == 0 || !@homework.is_public))
tip_exception(403,"没有操作权限")
elsif @user_course_identity == Course::STUDENT && !@homework.unified_setting
member = @course.course_member(current_user.id)
group_setting = @homework.homework_group_settings.find_by(course_group_id: member.try(:course_group_id))
if group_setting.try(:publish_time).nil? || group_setting.try(:publish_time) > Time.now
tip_exception(403,"没有操作权限")
end
end
end
def homework_curr_status homework_common, identity, course, member, teacher_course_groups
result = {}
status = []
time = ""
time_status = nil
if course.try(:is_end)
status << "已结束"
time = course.end_date.strftime("%Y-%m-%d")
time_status = 6
else
if homework_common.end_time && homework_common.end_time < Time.now && homework_common.allow_late &&
(homework_common.late_time.nil? || homework_common.late_time > Time.now)
status << "补交中"
end
ho_detail_manual = homework_common.homework_detail_manual
if ho_detail_manual
# 作业状态大于“提交”状态时,不用考虑分班权限
if ho_detail_manual.comment_status > 1
case ho_detail_manual.comment_status
when 3
if ho_detail_manual.evaluation_end && ho_detail_manual.evaluation_end > Time.now
status << "匿评中"
time = how_much_time(ho_detail_manual.evaluation_end)
time_status = 3
end
when 4
if ho_detail_manual.appeal_time && ho_detail_manual.appeal_time > Time.now
status << "申诉中"
time = how_much_time(ho_detail_manual.appeal_time)
time_status = 4
end
when 2, 5, 6
status << "评阅中"
time = course.end_date.present? ? how_much_time(course.end_date.end_of_day) : ""
time_status = 5
end
# 如果还在补交阶段则显示补交结束时间
if homework_common.end_time && homework_common.end_time < Time.now && homework_common.allow_late &&
homework_common.late_time && homework_common.late_time > Time.now
time = how_much_time(homework_common.late_time)
time_status = 2
end
else
# member = course.course_members.find_by(user_id: user.id, is_active: 1)
# teacher_course_groups = member.try(:teacher_course_groups)
# identity = user.course_identity(course)
# 作业统一设置、游客身份、超级管理员、分班权限不限的老师身份
if homework_common.unified_setting || identity > Course::STUDENT || identity == Course::ADMIN ||
(identity < Course::STUDENT && teacher_course_groups.size == 0)
case ho_detail_manual.comment_status
when 0
status << "未发布"
time = homework_common.publish_time.present? ? "将于 #{format_time(homework_common.publish_time)} 发布" : "创建于#{time_from_now(homework_common.created_at)}"
time_status = 0
when 1
if homework_common.end_time && homework_common.end_time >= Time.now
status << "提交中"
time = how_much_time(homework_common.end_time)
time_status = 1
elsif homework_common.end_time && homework_common.end_time < Time.now
time_status = 5
if homework_common.allow_late && (homework_common.late_time.nil? || homework_common.late_time >= Time.now)
time = how_much_time(homework_common.late_time)
time_status = 2
end
status << "评阅中"
end
end
else
# 未分班的学生始终显示“未发布”(按理不会来到这个判断)
if member.role == "STUDENT" && member.course_group_id == 0
status << "未发布"
time = ""
time_status = 0
else
if member.role == "STUDENT"
setting = homework_common.homework_group_settings.find_by(course_group_id: member.course_group_id)
min_publish_time = setting.try(:publish_time)
max_end_time = setting.try(:end_time)
else
# 多个分班权限的取最小publish_time最大end_time
min_publish_time = homework_common.homework_group_settings.where.not(publish_time: nil).
where(course_group_id: teacher_course_groups.pluck(:course_group_id)).pluck(:publish_time).min
max_end_time = homework_common.homework_group_settings.where.not(end_time: nil).
where(course_group_id: teacher_course_groups.pluck(:course_group_id)).pluck(:end_time).max
end
if min_publish_time.nil?
status << "未发布"
time = "创建于#{time_from_now(homework_common.created_at)}"
time_status = 0
elsif min_publish_time > Time.now
status << "未发布"
time = "将于 #{format_time(min_publish_time)} 发布"
time_status = 0
elsif max_end_time.present? && max_end_time > Time.now #6.14 -hs 添加present?
status << "提交中"
time = how_much_time(max_end_time)
time_status = 1
elsif homework_common.allow_late && (homework_common.late_time.nil? || homework_common.late_time >= Time.now)
status << "评阅中"
time = how_much_time(homework_common.late_time)
time_status = 2
else
status << "评阅中"
time = ""
time_status = 5
end
end
end
status << "未开启补交" if !homework_common.allow_late && time_status != 0
end
end
end
# 如果作业状态都没有的话,在课堂结束前,都显示评阅中
if status.blank?
status << "评阅中"
end
result[:status] = status
result[:time] = time
result[:time_status] = time_status
result
end
# 阶段剩余时间
def left_time homework, user_id
setting = homework.homework_group_setting(user_id)
if setting.publish_time && setting.publish_time < Time.now
if setting.end_time > Time.now
status = "剩余提交时间"
time = "#{how_much_time(setting.end_time)}"
else
ho_detail_manual = homework.homework_detail_manual
case ho_detail_manual.comment_status
when 3
if ho_detail_manual.evaluation_end && ho_detail_manual.evaluation_end > Time.now
status = "剩余匿评时间"
time = "#{how_much_time(ho_detail_manual.evaluation_end)}"
end
when 4
if ho_detail_manual.appeal_time && ho_detail_manual.appeal_time > Time.now
status = "剩余申诉时间"
time = "#{how_much_time(ho_detail_manual.appeal_time)}"
end
else
if homework.allow_late && homework.late_time && homework.late_time >= Time.now
status = "剩余补交时间"
time = "#{how_much_time(homework.late_time)}"
end
end
end
end
{status: status, time: time}
end
# 作品数统计type 1 已提交 0 未提交
def studentwork_count homework_common, type, user_id
student_works = homework_common.teacher_works(user_id)
type == 1 ? student_works.select{|work| work.work_status != 0}.size : student_works.select{|work| work.work_status = 0}.size
end
# 上次查重的时间
def last_review_time homework_common, course_group
review = homework_common.homework_group_reviews.where(:course_group_id => course_group.id).last
review ? (format_time review.created_at) : "--"
end
# 分班的有效作品数
def homework_works_count homework_common, course_group
myshixun_ids = homework_common.student_works.where(user_id: course_group.course_members.pluck(:user_id)).pluck(:myshixun_id)
myshixuns = Myshixun.joins(:games).where(id: myshixun_ids).where("games.status = ?", 2).count
end
# 未分班的有效作品数
def homework_ungroup_works_count homework_common, user_ids
myshixun_ids = homework_common.student_works.where(user_id: user_ids).pluck(:myshixun_id)
myshixuns = Myshixun.joins(:games).where(id: myshixun_ids).where("games.status = ?", 2).count
end
def ungroup_last_review_time homework_common
review = homework_common.homework_group_reviews.where(:course_group_id => 0).last
review ? (format_time review.created_at) : "--"
end
def work_finished_time challenge_id, user_id
Challenge.find(challenge_id).games.find_by(user_id: user_id)
end
def challenge_setting homework, challenge_id
homework.homework_challenge_settings.find_by(challenge_id: challenge_id)
end
def group_homework_setting homework, group_id
homework.homework_group_settings.find_by(course_group_id: group_id)
end
def homework_st_proportion homework
(1.0 - homework.homework_detail_manual.te_proportion - homework.homework_detail_manual.ta_proportion).round(2)
end
def teacher_comment homework, user_id
[{ id: 0 ,name: "未评", count: homework.uncomment_count(user_id)}, {id: 1, name: "已评", count: homework.comment_count(user_id)}]
end
# 作品状态
def homework_status homework, user_id
[{id: 0, name: "未提交", count: homework.unfinished_count(user_id)},
{id: 1, name: "按时提交", count: homework.finished_count(user_id)},
{id: 2, name: "延时提交", count: homework.delay_finished_count(user_id)}]
end
# 作品分数的显示
def work_score_format score, current_user, score_open
score.nil? ? "--" : (current_user || score_open) ? number_with_precision(score, precision: 1) : "**"
end
def anon_comments user, work_id
StudentWorksScore.where(student_work_id: work_id, reviewer_role: 3, user_id: user.id)
end
end