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