2014-09-28 17:14:09 +08:00
|
|
|
|
# encoding: utf-8
|
|
|
|
|
## This helper be included in applicationHelper
|
|
|
|
|
module CoursesHelper
|
|
|
|
|
=begin
|
|
|
|
|
1. define TeacherRoles, StudentRoles
|
|
|
|
|
2. define count function
|
|
|
|
|
3. define search by roles
|
|
|
|
|
4. define search member function
|
|
|
|
|
=end
|
|
|
|
|
#TeacherRoles = [3, 4, 7, 9]
|
|
|
|
|
#StudentRoles = [5, 10]
|
|
|
|
|
#AllPeople = StudentRoles+TeacherRoles
|
|
|
|
|
## return people count
|
|
|
|
|
|
|
|
|
|
# 返回x项目成员数量,即roles表中定义的所有成员
|
|
|
|
|
def projectCount project
|
|
|
|
|
#searchCountByRoles project, AllPeople
|
|
|
|
|
project.members.count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# 返回教师数量,即roles表中定义的Manager
|
|
|
|
|
def teacherCount project
|
2015-01-08 17:04:25 +08:00
|
|
|
|
project.members.count - studentCount(project).to_i
|
2014-09-28 17:14:09 +08:00
|
|
|
|
# or
|
|
|
|
|
# searchTeacherAndAssistant(project).count
|
|
|
|
|
end
|
|
|
|
|
|
2015-03-17 15:30:15 +08:00
|
|
|
|
#课程模块需要展示的模块
|
|
|
|
|
def course_model
|
|
|
|
|
@nav_dispaly_course_all_label = 1
|
|
|
|
|
@nav_dispaly_forum_label = 1
|
|
|
|
|
@nav_dispaly_course_label = nil
|
|
|
|
|
@nav_dispaly_store_all_label = 1
|
|
|
|
|
end
|
|
|
|
|
|
2015-03-18 15:18:06 +08:00
|
|
|
|
#生成课程老师成员链接
|
|
|
|
|
def course_teacher_link teacher_num
|
|
|
|
|
if User.current.member_of_course?(@course)
|
|
|
|
|
link_to "#{teacher_num}", course_member_path(@course, :role => 1), :class => 'info_foot_num c_blue'
|
|
|
|
|
else
|
|
|
|
|
content_tag 'span',teacher_num, :class => 'info_foot_num c_blue'
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#生成课程学生列表连接
|
|
|
|
|
def course_student_link student_num
|
|
|
|
|
if (User.current.logged? && @course.open_student == 1) || (User.current.member_of_course?(@course))
|
|
|
|
|
link_to "#{student_num}", course_member_path(@course, :role => 2), :class => 'info_foot_num c_blue'
|
|
|
|
|
else
|
|
|
|
|
content_tag 'span',student_num, :class => 'info_foot_num c_blue'
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def course_poll_count
|
|
|
|
|
Poll.where("polls_type = 'Course' and polls_group_id = #{@course.id}").count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def course_feedback_count
|
|
|
|
|
@course.journals_for_messages.where('m_parent_id IS NULL').count
|
|
|
|
|
end
|
|
|
|
|
|
2014-09-28 17:14:09 +08:00
|
|
|
|
# 返回学生数量,即roles表中定义的Reporter
|
|
|
|
|
#def studentCount project
|
|
|
|
|
# searchStudent(project).count
|
|
|
|
|
# or
|
|
|
|
|
# searchStudent(project).count
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
|
|
# 判断用户是否是课程的管理员
|
|
|
|
|
# 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
|
|
|
|
|
|
|
|
|
|
# 返回课程设置界面
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
#是否启动互评下拉框
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
# garble count 混淆数量
|
|
|
|
|
# alias projectCountOrigin projectCount
|
|
|
|
|
# def projectCount project
|
|
|
|
|
# count = projectCountOrigin project
|
|
|
|
|
# garble count
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
def proportion_option
|
|
|
|
|
type = []
|
|
|
|
|
i = 0
|
|
|
|
|
while i <= 100
|
|
|
|
|
option = []
|
|
|
|
|
option << i.to_s + "%"
|
|
|
|
|
option << i
|
|
|
|
|
type << option
|
|
|
|
|
i = i + 10
|
|
|
|
|
end
|
|
|
|
|
type
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#alias teacherCountOrigin teacherCount
|
|
|
|
|
#def teacherCount project
|
|
|
|
|
# count = teacherCountOrigin project
|
|
|
|
|
# garble count
|
|
|
|
|
#end
|
|
|
|
|
|
|
|
|
|
# 注意:此方法有问题,速度慢且结果不准
|
|
|
|
|
# alias studentCountOrigin studentCount
|
|
|
|
|
#def studentCount course
|
|
|
|
|
# count = studentCountOrigin course
|
|
|
|
|
#garble count
|
|
|
|
|
# end
|
|
|
|
|
|
2015-01-21 11:33:29 +08:00
|
|
|
|
#获取课程所有成员
|
2015-01-21 12:01:02 +08:00
|
|
|
|
def course_all_member course
|
2015-01-21 11:33:29 +08:00
|
|
|
|
course.members
|
|
|
|
|
end
|
2014-09-28 17:14:09 +08:00
|
|
|
|
# 学生人数计算
|
|
|
|
|
# add by nwb
|
|
|
|
|
def studentCount course
|
2015-01-08 16:16:59 +08:00
|
|
|
|
course.student.count.to_s#course.student.count
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#课程成员数计算
|
|
|
|
|
def memberCount course
|
|
|
|
|
count = searchStudent(course).count + searchTeacherAndAssistant(course).count
|
2014-12-05 11:30:19 +08:00
|
|
|
|
count.to_s
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
# =====================================================================================
|
|
|
|
|
# return people list
|
|
|
|
|
def searchTeacherAndAssistant project
|
|
|
|
|
#searchPeopleByRoles(project, TeacherRoles)
|
|
|
|
|
members = []
|
|
|
|
|
project.members.each do |m|
|
|
|
|
|
members << m if m && m.user && m.user.allowed_to?(:as_teacher,project)
|
|
|
|
|
end
|
|
|
|
|
members
|
|
|
|
|
end
|
|
|
|
|
|
2014-12-02 14:41:36 +08:00
|
|
|
|
def search_student_in_group(project, course_group_id)
|
2014-09-28 17:14:09 +08:00
|
|
|
|
#searchPeopleByRoles(project, StudentRoles)
|
|
|
|
|
members = []
|
|
|
|
|
project.members.each do |m|
|
|
|
|
|
members << m if m && m.user && m.user.allowed_to?(:as_student,project)
|
|
|
|
|
end
|
|
|
|
|
members
|
|
|
|
|
end
|
|
|
|
|
def searchStudent project
|
2014-12-18 18:24:37 +08:00
|
|
|
|
#searchPeopleByRoles(project, StudentRoles)
|
|
|
|
|
members = []
|
|
|
|
|
|
|
|
|
|
project.members.each do |m|
|
|
|
|
|
if m && m.user && m.user.allowed_to?(:as_student,project)
|
|
|
|
|
members << m
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
members
|
|
|
|
|
end
|
2014-12-17 17:36:12 +08:00
|
|
|
|
|
2014-12-18 18:24:37 +08:00
|
|
|
|
|
|
|
|
|
|
2014-12-03 19:17:10 +08:00
|
|
|
|
def searchStudent_by_name project, name
|
2014-09-28 17:14:09 +08:00
|
|
|
|
#searchPeopleByRoles(project, StudentRoles)
|
|
|
|
|
members = []
|
|
|
|
|
project.members.each do |m|
|
2014-12-03 19:17:10 +08:00
|
|
|
|
if m && m.user && m.user.allowed_to?(:as_student,project)
|
|
|
|
|
username = m.user[:lastname].to_s + m.user[:firstname].to_s
|
|
|
|
|
if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
|
|
|
|
|
members << m
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
members
|
|
|
|
|
end
|
2014-12-24 18:31:45 +08:00
|
|
|
|
def searchmember_by_name members, name
|
|
|
|
|
#searchPeopleByRoles(project, StudentRoles)
|
|
|
|
|
mems = []
|
2014-12-25 10:23:59 +08:00
|
|
|
|
if name != ""
|
|
|
|
|
members.each do |m|
|
2014-12-24 18:31:45 +08:00
|
|
|
|
|
|
|
|
|
username = m.user[:lastname].to_s + m.user[:firstname].to_s
|
|
|
|
|
if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
|
|
|
|
|
mems << m
|
|
|
|
|
end
|
2014-12-25 10:23:59 +08:00
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
mems = members
|
2014-12-24 18:31:45 +08:00
|
|
|
|
end
|
|
|
|
|
mems
|
|
|
|
|
end
|
|
|
|
|
def searchgroupmember_by_name members, name, group
|
|
|
|
|
#searchPeopleByRoles(project, StudentRoles)
|
|
|
|
|
mems = []
|
2014-12-25 10:23:59 +08:00
|
|
|
|
if name != ""
|
2014-12-24 18:31:45 +08:00
|
|
|
|
members.each do |m|
|
|
|
|
|
if m.course_group_id == group.id
|
|
|
|
|
username = m.user[:lastname].to_s + m.user[:firstname].to_s
|
|
|
|
|
if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
|
|
|
|
|
mems << m
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2014-12-25 10:23:59 +08:00
|
|
|
|
else
|
|
|
|
|
mems = members
|
|
|
|
|
end
|
2014-12-24 18:31:45 +08:00
|
|
|
|
mems
|
|
|
|
|
end
|
2014-12-09 15:16:43 +08:00
|
|
|
|
def searchgroupstudent_by_name(group, project, name)
|
2014-12-09 14:57:10 +08:00
|
|
|
|
members = []
|
|
|
|
|
group.members.each do |m|
|
|
|
|
|
if m && m.user && m.user.allowed_to?(:as_student,project)
|
|
|
|
|
username = m.user[:lastname].to_s + m.user[:firstname].to_s
|
|
|
|
|
if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
|
|
|
|
|
members << m
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
members
|
|
|
|
|
end
|
2014-12-04 22:02:10 +08:00
|
|
|
|
def searchStudent_by_group group, project
|
2014-12-04 19:09:10 +08:00
|
|
|
|
#searchPeopleByRoles(project, StudentRoles)
|
|
|
|
|
members = []
|
|
|
|
|
group.members.each do |m|
|
2014-09-28 17:14:09 +08:00
|
|
|
|
members << m if m && m.user && m.user.allowed_to?(:as_student,project)
|
|
|
|
|
end
|
|
|
|
|
members
|
|
|
|
|
end
|
|
|
|
|
# =====================================================================================
|
|
|
|
|
|
|
|
|
|
#def searchCountByRoles project, roles_id
|
|
|
|
|
# members = searchPeopleByRoles project, roles_id
|
|
|
|
|
# members.count
|
|
|
|
|
#end
|
|
|
|
|
|
|
|
|
|
#def searchPeopleByRoles project, roles_id
|
|
|
|
|
# members = []
|
|
|
|
|
# begin
|
|
|
|
|
# members = project.members.joins(:member_roles).where("member_roles.role_id IN (:role_id)", {:role_id => roles_id})
|
|
|
|
|
# rescue Exception => e
|
|
|
|
|
# logger.error "[CoursesHelper] ===> #{e}"
|
|
|
|
|
# end
|
|
|
|
|
# members
|
|
|
|
|
#end
|
|
|
|
|
|
|
|
|
|
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|
|
2014-10-25 16:19:19 +08:00
|
|
|
|
s = link_to_course(course, {}, :class => "#{course.css_classes} #{User.current.member_of_course?(course) ? 'my-course' : nil}").html_safe
|
2014-09-28 17:14:09 +08:00
|
|
|
|
s
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#useless
|
|
|
|
|
#def searchMembersByRole project, role_id
|
|
|
|
|
# members = []
|
|
|
|
|
# begin
|
|
|
|
|
# members = project.members.joins(:member_roles).where("member_roles.role_id = :role_id", {:role_id => role_id })
|
|
|
|
|
# rescue Exception => e
|
|
|
|
|
# logger.error "[CoursesHelper] ===> #{e}"
|
|
|
|
|
# end
|
|
|
|
|
# members
|
|
|
|
|
#end
|
|
|
|
|
|
|
|
|
|
def sort_course(state, school_id)
|
|
|
|
|
content = ''.html_safe
|
|
|
|
|
case state
|
|
|
|
|
when 0
|
|
|
|
|
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)))
|
|
|
|
|
|
|
|
|
|
when 1
|
|
|
|
|
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)))
|
|
|
|
|
|
|
|
|
|
when 2
|
|
|
|
|
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)))
|
|
|
|
|
|
|
|
|
|
#gcm
|
|
|
|
|
when 3
|
|
|
|
|
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")
|
|
|
|
|
end
|
|
|
|
|
#gcmend
|
|
|
|
|
|
|
|
|
|
content = content_tag('ul', content)
|
|
|
|
|
content_tag('div', content, :class => "tabs")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def findCourseTime project
|
|
|
|
|
str = ""
|
|
|
|
|
begin
|
|
|
|
|
@course = Course.find_by_extra(@project.identifier)
|
|
|
|
|
date_format = l(:zh_date)[:formats][:default]
|
|
|
|
|
if @course
|
|
|
|
|
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
|
|
|
|
|
|
2015-03-10 09:45:36 +08:00
|
|
|
|
# added by meng
|
|
|
|
|
# 课程time+term简写(2014.春/2014.秋)国际化输出
|
2014-09-28 17:14:09 +08:00
|
|
|
|
def get_course_term course
|
2015-03-10 09:45:36 +08:00
|
|
|
|
strterm = course.try(:term).to_s
|
|
|
|
|
if !(User.current.language == 'zh')
|
|
|
|
|
strterm == '春季学期' ? strterm = 'spring term' : strterm = 'autumn term'
|
|
|
|
|
str = ( course.try(:time).to_s << '.' << strterm )
|
|
|
|
|
str[0..-6]
|
|
|
|
|
else
|
|
|
|
|
str = ( course.try(:time).to_s << '.' << strterm )
|
|
|
|
|
str[0..-4]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# added by meng
|
|
|
|
|
# 课程term(春季学期/秋季学期)国际化输出
|
|
|
|
|
def get_course_term_locales course
|
|
|
|
|
str = course.try(:term).to_s
|
|
|
|
|
if !(User.current.language == 'zh')
|
|
|
|
|
str == '春季学期' ? str = ' ' + 'spring term' : str = ' ' + 'autumn term'
|
|
|
|
|
end
|
|
|
|
|
return str
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def members_to_user_ids members
|
|
|
|
|
people = []
|
|
|
|
|
members.each { |member|
|
|
|
|
|
people << member.user_id
|
|
|
|
|
}
|
|
|
|
|
people
|
|
|
|
|
end
|
|
|
|
|
# 截至到2014-03-17 这个是最终的判断课程是否过期的方法
|
|
|
|
|
def course_endTime_timeout? course
|
|
|
|
|
end_time_str = course.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
|
|
|
|
|
def find_by_extra_from_project extra
|
|
|
|
|
Course.find_by_extra(try(extra))
|
|
|
|
|
end
|
|
|
|
|
#判断指定用户是不是当前课程的老师
|
|
|
|
|
def is_course_teacher (user,course)
|
|
|
|
|
#course.members.joins(:member_roles).where("member_roles.role_id IN (:role_id) and members.user_id = #{user.id}", {:role_id => TeacherRoles}).count != 0
|
|
|
|
|
user.allowed_to?(:as_teacher,course)
|
|
|
|
|
#修改为根据用户是否有发布任务的权限来判断用户是否是课程的老师
|
|
|
|
|
#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
|
|
|
|
|
# end
|
|
|
|
|
#end
|
|
|
|
|
#is_teacher
|
|
|
|
|
end
|
|
|
|
|
#当前用户是不是指定课程的学生
|
|
|
|
|
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
|
2014-11-21 11:33:11 +08:00
|
|
|
|
User.current.logged? && User.current.member_of_course?(course) && !(User.current.allowed_to?(:as_teacher,course))
|
2014-09-28 17:14:09 +08:00
|
|
|
|
#修改:能新建占位且不能新建任务的角色判定为学生
|
|
|
|
|
#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
|
|
|
|
|
# end
|
|
|
|
|
#end
|
|
|
|
|
#is_student
|
|
|
|
|
end
|
|
|
|
|
#获取当前用户在指定作业下提交的作业的集合
|
|
|
|
|
def cur_user_homework_for_bid bid
|
2014-11-05 14:13:50 +08:00
|
|
|
|
bid.homeworks.where("user_id = ?",User.current)
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#判断当前用户对指定作业是否已经评价过
|
|
|
|
|
def has_evaluation? homework
|
|
|
|
|
seem_count = homework.rates(:quality).where("rater_id = ?",User.current).count
|
|
|
|
|
seem_count > 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#获取指定作业的所有成员
|
|
|
|
|
def users_for_homework homework
|
|
|
|
|
homework.nil? ? [] : (homework.users + [homework.user])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#获取指定作业的最终评分
|
|
|
|
|
#最终评分 = 学生评分的平均分 * 0.4 +教师评分 * 0.6
|
|
|
|
|
def score_for_homework homework
|
|
|
|
|
if homework.bid.is_evaluation == 1 || homework.bid.is_evaluation == nil
|
|
|
|
|
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))
|
|
|
|
|
else
|
|
|
|
|
return teacher_score_for_homework homework
|
|
|
|
|
end
|
|
|
|
|
end
|
2014-12-17 17:36:12 +08:00
|
|
|
|
def score_for_homework_new homework
|
|
|
|
|
if teacher_score_for_homework(homework) != 0
|
|
|
|
|
return teacher_score_for_homework homework
|
|
|
|
|
else
|
|
|
|
|
return student_score_for_homework homework
|
|
|
|
|
end
|
|
|
|
|
end
|
2014-09-28 17:14:09 +08:00
|
|
|
|
#获取作业的互评得分
|
|
|
|
|
def student_score_for_homework homework
|
|
|
|
|
#member = searchTeacherAndAssistant(homework.bid.courses.first).first#searchPeopleByRoles(homework.bid.courses.first,TeacherRoles).first
|
|
|
|
|
#if member.nil?
|
|
|
|
|
# return "0.00"
|
|
|
|
|
#end
|
|
|
|
|
#student_stars = homework.rates(:quality).where("rater_id <> #{member.user_id}").select("stars")
|
|
|
|
|
members = searchStudent(homework.bid.courses.first)
|
|
|
|
|
user_ids = []
|
|
|
|
|
members.each do |user|
|
|
|
|
|
user_ids << user.user_id
|
|
|
|
|
end
|
|
|
|
|
student_stars = homework.rates(:quality).where("rater_id in (:user_ids)",{:user_ids => user_ids}).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
|
2014-10-30 19:32:43 +08:00
|
|
|
|
members = searchTeacherAndAssistant(homework.bid.courses.first)
|
2014-09-28 17:14:09 +08:00
|
|
|
|
teacher_ids = []
|
|
|
|
|
members.each do |user|
|
|
|
|
|
teacher_ids << user.user_id
|
|
|
|
|
end
|
|
|
|
|
teacher_stars = homework.rates(:quality).where("rater_id in (:teacher_ids)",{:teacher_ids => teacher_ids}).select("stars")
|
|
|
|
|
teacher_stars_count = 0
|
|
|
|
|
teacher_stars.each do |star|
|
|
|
|
|
teacher_stars_count = teacher_stars_count + star.stars
|
|
|
|
|
end
|
2014-10-30 19:32:43 +08:00
|
|
|
|
return format("%.2f",teacher_stars.count > 0 ? teacher_stars_count/teacher_stars.count : 0)
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#获取指定项目的得分
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
#获取指定作业的参与人员
|
|
|
|
|
#返回结果:张三、李四、王五
|
|
|
|
|
def homework_user_of_homework homework,is_teacher
|
|
|
|
|
homework_users = ""
|
|
|
|
|
homework.users.each do |user|
|
|
|
|
|
homework_users = homework_users + (is_teacher ? (user.lastname + user.firstname) : user.login)
|
|
|
|
|
if user != homework.users.last
|
|
|
|
|
homework_users = homework_users + "、"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return homework_users
|
|
|
|
|
end
|
|
|
|
|
|
2014-10-30 09:32:33 +08:00
|
|
|
|
def get_courses_by_tag(tag_name)
|
|
|
|
|
Course.tagged_with(tag_name).order('updated_at desc')
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#课程实践年份下拉框
|
2014-11-26 16:08:14 +08:00
|
|
|
|
def course_time_option year
|
2014-09-28 17:14:09 +08:00
|
|
|
|
type = []
|
2014-11-26 16:08:14 +08:00
|
|
|
|
now_year = year.nil? ? Time.now.year : (Time.now.year <= year ? Time.now.year : year)
|
2014-09-28 17:14:09 +08:00
|
|
|
|
for i in (now_year..now_year + 10)
|
|
|
|
|
option = []
|
|
|
|
|
option << i
|
|
|
|
|
option << i
|
|
|
|
|
type << option
|
|
|
|
|
end
|
|
|
|
|
type
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#课程课时下拉框
|
|
|
|
|
def course_term_option
|
|
|
|
|
type = []
|
|
|
|
|
option1 = []
|
|
|
|
|
option1 << l(:label_spring)
|
|
|
|
|
option1 << l(:label_spring)
|
|
|
|
|
option2 = []
|
|
|
|
|
option2 << l(:label_autumn)
|
|
|
|
|
option2 << l(:label_autumn)
|
|
|
|
|
type << option1
|
|
|
|
|
type << option2
|
|
|
|
|
type
|
|
|
|
|
end
|
2014-11-05 14:46:01 +08:00
|
|
|
|
|
|
|
|
|
def cur_course_term
|
|
|
|
|
month = Time.now.month
|
|
|
|
|
if month >= 9 || month < 3
|
|
|
|
|
term = "秋季学期"
|
|
|
|
|
else
|
|
|
|
|
term = "春季学期"
|
|
|
|
|
end
|
|
|
|
|
term
|
|
|
|
|
end
|
|
|
|
|
|
2014-11-26 17:38:46 +08:00
|
|
|
|
def course_in_current_or_next_term course
|
|
|
|
|
is_current_term = false
|
|
|
|
|
is_next_term = false
|
2015-01-19 15:00:46 +08:00
|
|
|
|
year_now = Time.now.month < 3 ? Time.now.year - 1:Time.now.year
|
|
|
|
|
if course.time == year_now && course.term == cur_course_term
|
2014-11-26 17:38:46 +08:00
|
|
|
|
is_current_term = true
|
|
|
|
|
end
|
2015-01-19 15:00:46 +08:00
|
|
|
|
if cur_course_term == "秋季学期" && course.time == (year_now + 1) && course.term == "春季学期"
|
2014-11-26 17:38:46 +08:00
|
|
|
|
is_next_term = true
|
2015-01-19 15:00:46 +08:00
|
|
|
|
elsif cur_course_term == "春季学期" && course.time == year_now && course.term == "秋季学期"
|
2014-11-26 17:38:46 +08:00
|
|
|
|
is_next_term = true
|
|
|
|
|
end
|
|
|
|
|
is_current_term || is_next_term
|
|
|
|
|
end
|
|
|
|
|
|
2014-09-28 17:14:09 +08:00
|
|
|
|
#获取课程动态
|
|
|
|
|
def get_course_activity courses, activities
|
|
|
|
|
@course_ids=activities.keys()
|
|
|
|
|
|
|
|
|
|
days = Setting.activity_days_default.to_i
|
|
|
|
|
date_to ||= Date.today + 1
|
|
|
|
|
date_from = date_to - days-1.years
|
|
|
|
|
|
|
|
|
|
#file_count
|
|
|
|
|
Attachment.where(container_id: @course_ids, container_type: Course).where("created_on>?", date_from).each do |attachment|
|
|
|
|
|
activities[attachment.container_id]+=1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#message_count
|
|
|
|
|
Board.where(course_id: @course_ids).each do |board|
|
|
|
|
|
# activities[board.course_id]+=1
|
|
|
|
|
activities[board.course_id]+=board.messages.where("updated_on>?", date_from).count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#news
|
|
|
|
|
News.where(course_id: @course_ids).where("created_on>?",date_from).each do |news|
|
|
|
|
|
activities[news.course_id]+=1
|
|
|
|
|
end
|
|
|
|
|
|
2014-10-23 00:16:07 +08:00
|
|
|
|
# 动态数 + 1 ( 某某创建了该课程 )
|
|
|
|
|
activities.each_pair { |key, value| activities[key] = value + 1 }
|
2014-09-28 17:14:09 +08:00
|
|
|
|
return activities
|
|
|
|
|
end
|
|
|
|
|
|
2015-03-18 16:34:25 +08:00
|
|
|
|
#获取某个课程的动态数
|
|
|
|
|
def course_activity_count course
|
|
|
|
|
course_activity_count=Hash.new
|
|
|
|
|
course_activity_count[course.id]=0
|
|
|
|
|
count = get_course_activity([course],course_activity_count)[course.id]
|
|
|
|
|
count.nil? ? 0 : count
|
|
|
|
|
end
|
2015-03-18 17:14:26 +08:00
|
|
|
|
|
|
|
|
|
#重启、关闭课程按钮
|
|
|
|
|
def set_course_time course
|
|
|
|
|
id = "finish_course_#{course.id}"
|
|
|
|
|
linkPath = course_endTime_timeout?(course) ? restartcourse_course_path(course) : finishcourse_course_path(course, format: :js)
|
|
|
|
|
desc = course_endTime_timeout?(course) ? l(:label_course_reload) : l(:label_course_closed)
|
|
|
|
|
link_to "<span class='pr_close'></span>#{desc}".html_safe, linkPath, :remote => true, :method => :post, :id => id, :confirm => l(:label_course_closed_tips, :desc => desc), :class => "pr_join_a"
|
|
|
|
|
end
|
|
|
|
|
|
2015-03-18 18:03:17 +08:00
|
|
|
|
#加入课程、退出课程按钮
|
2015-03-18 17:14:26 +08:00
|
|
|
|
def join_in_course_header(course, user, options=[])
|
|
|
|
|
if user.logged?
|
|
|
|
|
joined = user.member_of_course? course
|
|
|
|
|
text = joined ? ("<em class='pr_arrow'></em>".html_safe + l(:label_course_exit_student)) : ("<em class='pr_add'></em>".html_safe + l(:label_course_join_student))
|
|
|
|
|
url = joined ? join_path(:object_id => course.id) : try_join_path(:object_id => course.id)
|
|
|
|
|
method = joined ? 'delete' : 'post'
|
|
|
|
|
if joined
|
|
|
|
|
link = "<span class='pr_join_span' ><em class='pr_add'></em>#{l(:label_course_join_student)}</span>" + link_to(text, url, :remote => true, :method => method, :class => "pr_join_a", :id => "#{course.id}", :confirm => l(:text_are_you_sure_out))
|
|
|
|
|
else
|
|
|
|
|
link = link_to(text, url, :remote => true, :method => method, :id => "#{course.id}", :class => "pr_join_a") + "<span class='pr_join_span' ><em class='pr_arrow'></em>#{l(:label_course_exit_student)}</span>".html_safe
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
link = "<span class='pr_join_span' ><em class='pr_add'></em>#{l(:label_course_join_student)}</span>" +
|
|
|
|
|
"<span class='pr_join_span' ><em class='pr_arrow'></em>#{l(:label_course_exit_student)}</span>"
|
|
|
|
|
end
|
|
|
|
|
link.html_safe
|
|
|
|
|
end
|
2015-03-19 17:43:20 +08:00
|
|
|
|
|
|
|
|
|
def bid_anonymous_comment bid
|
2015-03-23 20:30:38 +08:00
|
|
|
|
if bid.open_anonymous_evaluation == 1
|
|
|
|
|
if bid.homeworks.count >= 2
|
|
|
|
|
case bid.comment_status
|
|
|
|
|
when 0
|
|
|
|
|
link = link_to '启动匿评', alert_anonymous_comment_bid_path(bid), id: "#{bid.id}_start_anonymous_comment", remote: true, disable_with: '加载中...',:class => 'fr mr10 work_edit'
|
|
|
|
|
when 1
|
|
|
|
|
link = link_to '关闭匿评', alert_anonymous_comment_bid_path(bid), id: "#{bid.id}_stop_anonymous_comment", remote: true,:class => 'fr mr10 work_edit'
|
|
|
|
|
when 2
|
|
|
|
|
link = "<span class='fr mr10 pr_join_span ' title='匿评结束'>匿评结束</span>".html_safe
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
link = "<span class='fr mr10 pr_join_span ' title='学生提交作业数大于2时才可以启动匿评'>启动匿评</span>".html_safe
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
link = "<span class='fr mr10 pr_join_span ' title='未开启匿评作业不可以启动匿评'>启动匿评</span>".html_safe
|
|
|
|
|
end
|
|
|
|
|
link
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def student_new_homework bid
|
|
|
|
|
user_homework = cur_user_homework_for_bid bid
|
|
|
|
|
if user_homework && user_homework.empty?
|
|
|
|
|
link_to l(:label_commit_homework), new_exercise_book_path(bid),:class => 'fr mr10 work_edit'
|
|
|
|
|
else
|
|
|
|
|
"<span class='fr mr10 pr_join_span '>作业已交</span>".html_safe
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def student_anonymous_comment bid
|
|
|
|
|
if bid.open_anonymous_evaluation == 1
|
2015-03-19 17:43:20 +08:00
|
|
|
|
case bid.comment_status
|
|
|
|
|
when 0
|
2015-03-23 20:30:38 +08:00
|
|
|
|
"<span class='fr mr10 pr_join_span '>未开启匿评</span>".html_safe
|
2015-03-19 17:43:20 +08:00
|
|
|
|
when 1
|
2015-03-23 20:30:38 +08:00
|
|
|
|
"<span class='fr mr10 pr_join_span '>正在匿评中</span>".html_safe
|
2015-03-19 17:43:20 +08:00
|
|
|
|
when 2
|
2015-03-23 20:30:38 +08:00
|
|
|
|
"<span class='fr mr10 pr_join_span '>匿评已结束</span>".html_safe
|
2015-03-19 17:43:20 +08:00
|
|
|
|
end
|
2015-03-23 20:30:38 +08:00
|
|
|
|
else
|
|
|
|
|
"<span class='fr mr10 pr_join_span '>未启用匿评</span>".html_safe
|
2015-03-19 17:43:20 +08:00
|
|
|
|
end
|
|
|
|
|
end
|
2014-09-28 17:14:09 +08:00
|
|
|
|
end
|