2013-11-06 16:43:07 +08:00
# encoding: utf-8
2013-10-31 10:57:46 +08:00
## This helper be included in applicationHelper
module CoursesHelper
2013-11-04 09:45:56 +08:00
= begin
2013-11-06 16:43:07 +08:00
1 . define TeacherRoles , StudentRoles
2 . define count function
3 . define search by roles
4 . define search member function
2013-11-04 09:45:56 +08:00
= end
2013-11-06 16:43:07 +08:00
TeacherRoles = [ 3 , 4 , 7 , 9 ]
StudentRoles = [ 5 , 10 ]
2014-03-24 10:18:42 +08:00
AllPeople = StudentRoles + TeacherRoles
2013-11-06 16:43:07 +08:00
## return people count
2014-03-24 10:18:42 +08:00
# 返回x项目成员数量, 即roles表中定义的所有成员
def projectCount project
searchCountByRoles project , AllPeople
end
2013-11-06 16:43:07 +08:00
# 返回教师数量, 即roles表中定义的Manager
def teacherCount project
2013-12-13 20:01:27 +08:00
searchCountByRoles project , TeacherRoles
2013-11-06 16:43:07 +08:00
# or
2013-12-13 20:01:27 +08:00
# searchTeacherAndAssistant(project).count
2013-11-06 16:43:07 +08:00
end
# 返回学生数量, 即roles表中定义的Reporter
def studentCount project
2013-12-13 20:01:27 +08:00
searchCountByRoles project , StudentRoles
2013-11-06 16:43:07 +08:00
# or
2013-12-13 20:01:27 +08:00
# searchStudent(project).count
2013-11-06 16:43:07 +08:00
end
2014-05-19 17:56:39 +08:00
# garble count 混淆数量
# alias projectCountOrigin projectCount
# def projectCount project
# count = projectCountOrigin project
# garble count
# end
alias teacherCountOrigin teacherCount
def teacherCount project
count = teacherCountOrigin project
garble count
end
alias studentCountOrigin studentCount
def studentCount project
count = studentCountOrigin project
garble count
end
def garble count
count = count . round ( 1 - count . to_s . size ) . to_i
return count . to_s if count . to_s . size . eql? ( 1 )
count . to_s << '+'
end
2013-11-06 16:43:07 +08:00
# =====================================================================================
# return people list
def searchTeacherAndAssistant project
searchPeopleByRoles ( project , TeacherRoles )
end
def searchStudent project
searchPeopleByRoles ( project , StudentRoles )
end
# =====================================================================================
def searchCountByRoles project , roles_id
2013-12-13 20:01:27 +08:00
members = searchPeopleByRoles project , roles_id
members . count
2013-11-06 16:43:07 +08:00
end
def searchPeopleByRoles project , roles_id
2013-12-13 20:01:27 +08:00
members = [ ]
2013-11-06 16:43:07 +08:00
begin
2013-12-13 20:01:27 +08:00
members = project . members . joins ( :member_roles ) . where ( " member_roles.role_id IN (:role_id) " , { :role_id = > roles_id } )
2013-11-06 16:43:07 +08:00
rescue Exception = > e
logger . error " [CoursesHelper] ===> #{ e } "
end
2013-12-13 20:01:27 +08:00
members
2013-11-06 16:43:07 +08:00
end
#useless
2013-12-13 20:01:27 +08:00
def searchMembersByRole project , role_id
members = [ ]
2013-11-06 16:43:07 +08:00
begin
2013-12-13 20:01:27 +08:00
members = project . members . joins ( :member_roles ) . where ( " member_roles.role_id = :role_id " , { :role_id = > role_id } )
2013-11-06 16:43:07 +08:00
rescue Exception = > e
logger . error " [CoursesHelper] ===> #{ e } "
end
2013-12-13 20:01:27 +08:00
members
2013-11-06 16:43:07 +08:00
end
def findCourseTime project
str = " "
begin
2013-11-07 14:38:37 +08:00
@course = Course . find_by_extra ( @project . identifier )
date_format = l ( :zh_date ) [ :formats ] [ :default ]
if @course
2013-11-06 16:43:07 +08:00
str = DateTime . parse ( @course . setup_time . to_s ) . strftime ( " #{ date_format } " ) . to_s unless @course . setup_time . blank?
str << '-' unless @course . setup_time . blank?
str << DateTime . parse ( @course . endup_time . to_s ) . strftime ( " #{ date_format } " ) . to_s unless @course . endup_time . blank?
end
rescue Exception = > e
logger . error " [CoursesHelper] ===> #{ e } "
end
str
end
2013-12-13 20:01:27 +08:00
2014-03-17 22:43:38 +08:00
def get_course_term project
str = ( project . try ( :course_extra ) . try ( :time ) . to_s << '.' << project . try ( :course_extra ) . try ( :term ) . to_s )
str [ 0 .. - 4 ]
end
2013-12-13 20:01:27 +08:00
def members_to_user_ids members
people = [ ]
members . each { | member |
people << member . user_id
}
people
end
2014-03-17 22:43:38 +08:00
# 截至到2014-03-17 这个是最终的判断课程是否过期的方法
def course_endTime_timeout? project
end_time_str = Course . find_by_extra ( project . try ( :identifier ) ) . try ( :endup_time )
begin
cTime = Time . parse ( end_time_str . to_s )
rescue TypeError , ArgumentError
cTime = Time . parse ( " 3000-01-01 " )
end
now = Time . now
now > cTime
end
2014-05-12 16:01:13 +08:00
def find_by_extra_from_project extra
Course . find_by_extra ( try ( extra ) )
end
2014-05-22 16:37:39 +08:00
#判断制定用户是不是当前课程的老师
2014-06-09 13:47:39 +08:00
def is_course_teacher ( user , course )
2014-06-10 09:56:00 +08:00
course . members . joins ( :member_roles ) . where ( " member_roles.role_id IN (:role_id) and members.user_id = #{ user . id } " , { :role_id = > TeacherRoles } ) . count != 0
#修改为根据用户是否有发布任务的权限来判断用户是否是课程的老师
#is_teacher = false
#@membership = user.memberships.all(:conditions => Project.visible_condition(User.current))
#@membership.each do |membership|
# unless(membership.project.project_type==0)
# if user.allowed_to?({:controller => "projects", :action => "new_homework"}, membership.project, :global => false)
# is_teacher = true
# end
2014-06-09 13:47:39 +08:00
# end
#end
2014-06-10 09:56:00 +08:00
#is_teacher
2014-05-27 20:01:21 +08:00
end
#当前用户是不是指定课程的学生
2014-06-10 09:56:00 +08:00
def is_cur_course_student course
course . members . joins ( :member_roles ) . where ( " member_roles.role_id IN (:role_id) and members.user_id = #{ User . current . id } " , { :role_id = > StudentRoles } ) . count != 0
#修改:能新建占位且不能新建任务的角色判定为学生
#is_student = false
#@membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
#@membership.each do |membership|
# unless(membership.project.project_type==0)
# if !User.current.allowed_to?({:controller => "projects", :action => "new_homework"}, membership.project, :global => false) && User.current.allowed_to?({:controller => "homework_attach", :action => "new"}, membership.project, :global => false)
# is_student = true
# end
2014-06-09 13:47:39 +08:00
# end
#end
2014-06-10 09:56:00 +08:00
#is_student
2014-05-22 16:37:39 +08:00
end
2014-06-04 09:55:38 +08:00
#获取当前用户在指定作业下提交的作业的集合
def cur_user_homework_for_bid bid
2014-06-04 16:01:33 +08:00
cur_user_homework = HomeworkAttach . where ( " user_id = ? and bid_id = ? " , User . current , bid . id )
2014-06-04 09:55:38 +08:00
cur_user_homework
end
2014-06-05 14:00:18 +08:00
#判断当前用户对指定作业是否已经评价过
def has_evaluation? homework
seem_count = homework . rates ( :quality ) . where ( " rater_id = ? " , User . current ) . count
seem_count > 0
end
2014-06-12 15:25:59 +08:00
#获取指定作业的所有成员
def users_for_homework homework
homework . nil? ? [ ] : ( homework . users + [ homework . user ] )
end
2014-06-19 15:55:42 +08:00
#获取指定作业的最终评分
#最终评分 = 学生评分的平均分 * 0.4 +教师评分 * 0.6
def score_for_homework homework
return format ( " %.2f " , ( teacher_score_for_homework ( homework ) . to_f * 0 . 6 + student_score_for_homework ( homework ) . to_f * 0 . 4 ) )
end
#获取作业的互评得分
def student_score_for_homework homework
member = searchPeopleByRoles ( homework . bid . courses . first , TeacherRoles ) . first
student_stars = homework . rates ( :quality ) . where ( " rater_id <> #{ member . user_id } " ) . select ( " stars " )
student_stars_count = 0
student_stars . each do | star |
student_stars_count = student_stars_count + star . stars
end
return format ( " %.2f " , student_stars_count / ( student_stars . count == 0 ? 1 : student_stars . count ) )
end
#获取作业的教师评分
def teacher_score_for_homework homework
member = searchPeopleByRoles ( homework . bid . courses . first , TeacherRoles ) . first
teacher_stars = homework . rates ( :quality ) . where ( " rater_id = #{ member . user_id } " ) . select ( " stars " ) . first
return format ( " %.2f " , teacher_stars == nil ? 0 : teacher_stars . stars )
end
2013-10-31 10:57:46 +08:00
end