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-06-12 16:22:35 +08:00
# 判断用户是否是课程的管理员
# add by nwb
def is_course_manager? ( user_id , course_id )
@result = false
@user_id = CourseInfo . find_by_course_id ( course_id )
if @user_id == user . id
@result = true
end
return @result
end
2014-06-09 14:23:31 +08:00
# 返回课程设置界面
def course_settings_tabs
tabs = [ { :name = > 'info' , :action = > :edit_course , :partial = > 'courses/edit' , :label = > :label_information_plural } ,
{ :name = > 'members' , :action = > :manage_members , :partial = > 'courses/settings/members' , :label = > :label_member_plural }
]
tabs . select { | tab | User . current . allowed_to? ( tab [ :action ] , @course ) }
end
2014-06-17 11:32:41 +08:00
#是否启动互评下拉框
def is_evaluation_option
type = [ ]
option1 = [ ]
option2 = [ ]
option1 << l ( :lable_start_mutual_evaluation )
option1 << 1
option2 << l ( :lable_close_mutual_evaluation )
option2 << 2
type << option1
type << option2
end
2014-05-19 17:56:39 +08:00
# garble count 混淆数量
# alias projectCountOrigin projectCount
# def projectCount project
# count = projectCountOrigin project
# garble count
# end
2014-06-09 14:23:31 +08:00
def homework_type_option
type = [ ]
option1 = [ ]
option2 = [ ]
option1 << l ( :label_task_submit_form_accessory )
option1 << 1
option2 << l ( :label_task_submit_form_project )
option2 << 2
type << option1
type << option2
end
2014-07-01 11:53:55 +08:00
def proportion_option
type = [ ]
i = 0
while i < = 100
option = [ ]
option << i . to_s + " % "
option << i
type << option
i = i + 10
end
type
end
2014-06-09 14:23:31 +08:00
2014-05-19 17:56:39 +08:00
alias teacherCountOrigin teacherCount
def teacherCount project
count = teacherCountOrigin project
garble count
end
alias studentCountOrigin studentCount
2014-06-18 11:08:44 +08:00
def studentCount course
count = studentCountOrigin course
2014-05-19 17:56:39 +08:00
garble count
end
2014-06-06 13:56:48 +08:00
def eventToLanguageCourse event_type , course
case event_type
when " issue-note "
l :label_issue
when " issue "
l :label_issue
when " attachment "
l :label_attachment
when " news "
l :label_notification
else
" "
end
end
2014-05-19 17:56:39 +08:00
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
2014-05-29 16:35:34 +08:00
def sort_courses ( state )
content = '' . html_safe
case state
when 0
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :courses_sort_type = > '1' ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , courses_path ( :courses_sort_type = > '2' ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :courses_sort_type = > '0' ) , :class = > " selected " ) , :class = > " selected " )
when 1
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :courses_sort_type = > '1' ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , courses_path ( :courses_sort_type = > '2' ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :courses_sort_type = > '0' ) ) )
when 2
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :courses_sort_type = > '1' ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , courses_path ( :courses_sort_type = > '2' ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :courses_sort_type = > '0' ) ) )
end
content = content_tag ( 'ul' , content )
content_tag ( 'div' , content , :class = > " tabs " )
end
def render_course_hierarchy ( courses )
render_course_nested_lists ( courses ) do | course |
s = link_to_course ( course , { } , :class = > " #{ course . css_classes } #{ User . current . member_of? ( course ) ? 'my-course' : nil } " ) . html_safe
s
end
end
2013-11-06 16:43:07 +08:00
#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
2014-06-03 09:56:54 +08:00
def sort_course ( state , school_id )
content = '' . html_safe
case state
when 0
2014-06-03 16:21:00 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :course_sort_type = > '0' ) , :school_id = > school_id , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :course_sort_type = > '1' , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , courses_path ( :course_sort_type = > '3' , :school_id = > school_id ) ) )
2014-06-03 09:56:54 +08:00
when 1
2014-06-03 16:21:00 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :course_sort_type = > '0' , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :course_sort_type = > '1' , :school_id = > school_id ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , courses_path ( :course_sort_type = > '3' , :school_id = > school_id ) ) )
2014-06-03 09:56:54 +08:00
when 2
2014-06-03 16:21:00 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :course_sort_type = > '0' , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :course_sort_type = > '1' , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , courses_path ( :course_sort_type = > '3' , :school_id = > school_id ) ) )
2014-06-03 09:56:54 +08:00
#gcm
when 3
2014-06-03 16:21:00 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , courses_path ( :course_sort_type = > '0' , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , courses_path ( :course_sort_type = > '1' , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , courses_path ( :course_sort_type = > '3' , :school_id = > school_id ) , :class = > " selected " ) , :class = > " selected " )
2014-06-03 09:56:54 +08:00
end
#gcmend
content = content_tag ( 'ul' , content )
content_tag ( 'div' , content , :class = > " tabs " )
end
2013-11-06 16:43:07 +08:00
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-06-10 17:03:02 +08:00
# added by nwb
def get_course_term course
str = ( course . try ( :time ) . to_s << '.' << course . try ( :term ) . to_s )
2014-03-17 22:43:38 +08:00
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
2014-06-04 16:45:20 +08:00
end_time_str = Course . find_by_extra ( project . try ( :extra ) ) . try ( :endup_time )
2014-03-17 22:43:38 +08:00
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
2014-06-19 17:49:18 +08:00
if homework . bid . is_evaluation == 1 || homework . bid . is_evaluation == nil
2014-07-01 11:53:55 +08:00
return format ( " %.2f " , ( homework . bid . proportion * 1 . 0 / 100 ) * ( teacher_score_for_homework ( homework ) . to_f ) + ( 1 - homework . bid . proportion * 1 . 0 / 100 ) * ( student_score_for_homework ( homework ) . to_f ) )
2014-06-19 17:49:18 +08:00
else
return teacher_score_for_homework homework
end
2014-06-19 15:55:42 +08:00
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
2014-06-19 20:14:48 +08:00
2014-07-01 10:29:37 +08:00
#获取指定项目的得分
2014-06-19 20:14:48 +08:00
def project_score project
issue_count = project . issues . count
issue_journal_count = project . issue_changes . count
issue_score = issue_count * 0 . 2
issue_journal_score = issue_journal_count * 0 . 1
finall_issue_score = issue_score + issue_journal_score
new_count = project . news . count
new_score = new_count * 0 . 1
finall_new_score = new_score
document_count = project . documents . count
file_score = document_count * 0 . 1
finall_file_score = file_score
changeset_count = project . changesets . count
code_submit_score = changeset_count * 0 . 3
finall_code_submit_score = code_submit_score
board_message_count = 0
project . boards . each do | board |
board_message_count += board . messages_count
end
topic_score = board_message_count * 0 . 1
#finall_topic_score = topic_score
finall_project_score = finall_issue_score + finall_new_score + finall_file_score + finall_code_submit_score + topic_score
format ( " %.2f " , finall_project_score )
end
2014-06-20 09:40:12 +08:00
#获取指定作业的参与人员
#返回结果:张三、李四、王五
def homework_user_of_homework homework , is_teacher
homework_users = " "
homework . users . each do | user |
homework_users = homework_users + ( is_teacher ? user . realname : user . name )
if user != homework . users . last
homework_users = homework_users + " 、 "
end
end
return homework_users
end
2014-07-03 17:22:48 +08:00
def get_courses_by_tag ( tag_name )
Course . tagged_with ( tag_name ) . order ( 'updated_at desc' )
end
2013-10-31 10:57:46 +08:00
end