2015-03-13 13:41:26 +08:00
#coding=utf-8
2014-12-08 15:19:10 +08:00
class CoursesService
include ApplicationHelper
2014-12-10 20:53:41 +08:00
include CoursesHelper
2015-01-30 16:58:05 +08:00
include HomeworkAttachHelper
2015-02-06 14:29:42 +08:00
include ApiHelper
2015-03-01 17:31:38 +08:00
2014-12-08 15:19:10 +08:00
#参数school_id为0或不传时返回所有课程, 否则返回对应学校的课程
#参数per_page_count分页功能, 每页显示的课程数
#参数page分页功能, 当前页码
2015-02-10 17:03:59 +08:00
def course_list params , current_user
2014-12-08 15:19:10 +08:00
@school_id = params [ :school_id ]
per_page_option = params [ :per_page_count ] || 10
page_no = params [ :page ] || 1
if @school_id == " 0 " || @school_id . nil?
@courses_all = Course . active . visible .
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " )
else
@courses_all = Course . active . visible .
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " ) .
where ( " #{ Course . table_name } .school_id = ? " , @school_id )
end
@course_count = @courses_all . count
@course_pages = Redmine :: Pagination :: Paginator . new @course_count , per_page_option , page_no
@courses = @courses_all . order ( " created_at desc " )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
course_list = [ ]
@courses . each do | course |
2015-02-10 17:03:59 +08:00
course_list << { :course = > course , :img_url = > url_to_avatar ( course ) , :current_user_is_member = > current_user . member_of_course? ( course ) , :current_user_is_teacher = > is_course_teacher ( current_user , course ) }
2014-12-08 15:19:10 +08:00
end
course_list
end
2014-12-10 18:26:38 +08:00
#搜索课程
2015-02-10 16:36:29 +08:00
def search_course params , current_user
2014-12-10 18:26:38 +08:00
courses_all = Course . all_course
name = params [ :name ]
if name . blank?
raise 'sumbit empty'
end
2015-03-19 10:13:43 +08:00
@courses = courses_all . visible ( current_user )
2014-12-10 18:26:38 +08:00
if params [ :name ] . present?
2015-04-16 15:48:15 +08:00
@courses_all = @courses . like ( params [ :name ] ) . order ( " created_at desc " )
2014-12-10 18:26:38 +08:00
else
2015-04-16 15:48:15 +08:00
@courses_all = @courses . order ( " created_at desc " ) ;
2014-12-10 18:26:38 +08:00
end
@courses_all
2015-02-10 16:36:29 +08:00
course_list = [ ]
@courses_all . each do | course |
course_list << { :course = > course , :img_url = > url_to_avatar ( course ) , :current_user_is_member = > current_user . member_of_course? ( course ) , :current_user_is_teacher = > is_course_teacher ( current_user , course ) }
end
course_list
2014-12-10 18:26:38 +08:00
end
#获取头像
def get_img obj
url_to_avatar ( obj )
end
2014-12-23 11:07:17 +08:00
#课程老师或课程学生列表
2014-12-15 10:41:09 +08:00
def course_teacher_or_student_list params , course , current_user
if course . is_a? ( Course )
c = course
else
c = Course . find ( course )
end
2014-12-23 15:24:18 +08:00
if current_user . nil? || ! ( current_user . admin? || c . is_public == 1 || ( c . is_public == 0 && current_user . member_of_course? ( c ) ) )
2014-12-15 10:41:09 +08:00
raise '403'
end
@teachers = searchTeacherAndAssistant ( c )
2014-12-10 20:53:41 +08:00
#@canShowCode = isCourseTeacher(User.current.id,course) && params[:role] != '1'
case params [ :role ]
when '1'
#@subPage_title = l :label_teacher_list
2014-12-15 10:41:09 +08:00
@members = searchTeacherAndAssistant ( c )
2014-12-10 20:53:41 +08:00
when '2'
#@subPage_title = l :label_student_list
2014-12-15 10:41:09 +08:00
@members = searchStudent ( c )
2014-12-10 20:53:41 +08:00
else
#@subPage_title = ''
2014-12-15 10:41:09 +08:00
@members = c . member_principals . includes ( :roles , :principal ) . all . sort
2014-12-10 20:53:41 +08:00
end
2015-01-07 15:24:43 +08:00
users = [ ]
@members . each do | m |
img_url = url_to_avatar ( m . user )
gender = m . user . user_extensions . gender . nil? ? 0 : m . user . user_extensions . gender
work_unit = get_user_work_unit m . user
location = get_user_location m . user
users << { :id = > m . user . id , :img_url = > img_url , :nickname = > m . user . login , :gender = > gender , :work_unit = > work_unit , :mail = > m . user . mail , :location = > location , :brief_introduction = > m . user . user_extensions . brief_introduction }
end
users
end
#获取用户的工作单位
def get_user_work_unit user
work_unit = " "
if user . user_extensions . identity == 0 || user . user_extensions . identity == 1
work_unit = user . user_extensions . school . name unless user . user_extensions . school . nil?
elsif user . user_extensions . identity == 3
work_unit = user . user_extensions . occupation
elsif user . user_extensions . identity == 2
work_unit = user . firstname
end
work_unit
end
#获取用户地区
def get_user_location user
location = " "
location << ( user . user_extensions . location || '' )
location << ( user . user_extensions . location_city || '' )
location
2014-12-10 20:53:41 +08:00
end
2014-12-11 15:39:14 +08:00
#课程通知列表
2015-02-04 11:57:37 +08:00
def course_news_list params , current_user
2014-12-11 15:39:14 +08:00
if params [ :course_id ] && @course == nil
@course = Course . find ( params [ :course_id ] )
end
2015-02-04 11:57:37 +08:00
if current_user . nil? || ! ( current_user . admin? || @course . is_public == 1 || ( @course . is_public == 0 && current_user . member_of_course? ( @course ) ) )
raise '403'
end
scope = @course ? @course . news . course_visible ( current_user ) : News . course_visible ( current_user )
2015-01-20 15:17:02 +08:00
news = [ ]
scope . each do | n |
2015-02-10 10:29:47 +08:00
news << { :id = > n . id , :title = > n . title , :author_name = > n . author . name , :author_id = > n . author . id , :description = > n . description , :created_on = > format_time ( n . created_on ) , :comments_count = > n . comments_count }
2015-01-20 15:17:02 +08:00
end
news
2014-12-11 15:39:14 +08:00
end
2014-12-15 16:53:20 +08:00
#查看新闻权限验证
2015-01-20 17:42:18 +08:00
def show_course_news_authorize ( current_user )
unless current_user . allowed_to? ( { :controller = > 'news' , :action = > 'show' } , false )
2014-12-15 16:53:20 +08:00
raise '403'
end
end
2014-12-15 13:44:26 +08:00
2014-12-15 16:53:20 +08:00
#显示课程通知(包括评论) 需验证权限
def show_course_news params , current_user
@news = News . find ( params [ :id ] )
2015-02-04 14:07:00 +08:00
@course = @news . course
if @course
if current_user . nil? || ! ( current_user . admin? || @course . is_public == 1 || ( @course . is_public == 0 && current_user . member_of_course? ( @course ) ) )
raise '403'
end
end
2014-12-15 16:53:20 +08:00
@comments = @news . comments
@comments . reverse! if current_user . wants_comments_in_reverse_order?
2015-01-20 17:42:18 +08:00
{ :news = > @news , :comments = > @comments }
2015-02-04 14:07:00 +08:00
2015-01-20 17:42:18 +08:00
#comments = []
#@comments.each do |comment|
# comments << {:author_id => comment.author_id,:author_name => comment.author.name,:commont_content => comment.comments,:time => format_time(comment.created_on)}
#end
#{:title => @news.title,:author_name => @news.author.name,:author_id => @news.author.id, :description => @news.description,:created_on => format_time(@news.created_on),
# :comments_count => @news.comments_count,:comments => comments}
2014-12-15 13:44:26 +08:00
end
2014-12-15 16:53:20 +08:00
#显示课程
2015-03-07 15:36:00 +08:00
def show_course ( params , current_user )
2014-12-11 15:39:14 +08:00
course = Course . find ( params [ :id ] )
2015-04-08 18:21:36 +08:00
if course . school
work_unit = course . school . name
else
work_unit = get_user_work_unit course . teacher
end
2015-03-07 15:36:00 +08:00
unless ( course . is_public == 1 || current_user . member_of_course? ( course ) || current_user . admin? )
2014-12-15 16:53:20 +08:00
raise '403'
end
2015-05-04 17:36:48 +08:00
{ :course = > course , :work_unit = > work_unit , :img_url = > url_to_avatar ( course ) , :current_user_is_member = > current_user . member_of_course? ( course ) , :current_user_is_teacher = > is_course_teacher ( current_user , course ) , :course_student_num = > course ? course . student . count . to_s : 0 }
2014-12-11 15:39:14 +08:00
end
2014-12-11 17:11:05 +08:00
#创建课程
2014-12-23 11:07:17 +08:00
#current_user当前用户对象( 不是id)
# params[:course][:name]:课程名称
#params[:course][:password]:密码
#params[:course][:description]:描述
#params[:course][:is_public]:是否公开1公开, 0私有
#params[:course][:open_student]:是否公开学生列表1公开, 0不公开, 不公开时非课程成员无法看到学生列表
#params[:course][:course_type]:暂时默认给1值。
#params[:term]:学期(秋季学期或春季学期)
#params[:time]: 年份( 例: 2014)
#params[:setup_time]:暂不传(貌似已经没用了)
#params[:endup_time]: 暂不传(貌似已经没用了)
#params[:class_period]:学时总数
2015-01-05 16:58:11 +08:00
def create_course ( params , current_user )
2014-12-23 11:07:17 +08:00
if current_user . user_extensions . identity
2014-12-11 17:11:05 +08:00
@course = Course . new
@course . extra = 'course' + DateTime . parse ( Time . now . to_s ) . strftime ( '%Y-%m-%d_%H-%M-%S' ) . to_s
2015-01-05 16:58:11 +08:00
@course . send ( :safe_attributes = , params [ :course ] , current_user )
#@course.safe_attributes(current_user,params[:course])
@course . tea_id = current_user . id
2014-12-11 17:11:05 +08:00
@course . term = params [ :term ]
@course . time = params [ :time ]
#@course.school_id = params[:occupation]
2015-01-05 16:58:11 +08:00
@course . school_id = current_user . user_extensions . school_id
2014-12-11 17:11:05 +08:00
@course . setup_time = params [ :setup_time ]
@course . endup_time = params [ :endup_time ]
2015-04-16 10:49:58 +08:00
@course . class_period = params [ :class_period ] . to_i
2015-04-03 11:30:48 +08:00
params [ :course ] [ :is_public ] ? @course . is_public = 1 : @course . is_public = 0
params [ :course ] [ :open_student ] ? @course . open_student = 1 : @course . open_student = 0
2014-12-11 17:11:05 +08:00
end
@issue_custom_fields = IssueCustomField . sorted . all
@trackers = Tracker . sorted . all
2014-12-11 15:39:14 +08:00
2014-12-11 17:11:05 +08:00
if @course . save
#unless User.current.admin?
r = Role . givable . find_by_id ( Setting . new_project_user_role_id . to_i ) || Role . givable . first
2015-01-05 16:58:11 +08:00
m = Member . new ( :user = > current_user , :roles = > [ r ] )
2014-12-11 17:11:05 +08:00
m . project_id = - 1
2015-01-05 16:58:11 +08:00
course = CourseInfos . new ( :user_id = > current_user . id , :course_id = > @course . id )
2014-12-11 17:11:05 +08:00
#user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
if params [ :course ] [ :is_public ] == '1'
course_status = CourseStatus . create ( :course_id = > @course . id , :watchers_count = > 0 , :changesets_count = > 0 , :grade = > 0 , :course_type = > @course_tag )
end
@course . members << m
@course . course_infos << course
end
2015-02-12 15:51:52 +08:00
{ :course = > @course , :img_url = > url_to_avatar ( @course ) , :current_user_is_member = > current_user . member_of_course? ( @course ) , :current_user_is_teacher = > is_course_teacher ( current_user , @course ) }
2014-12-11 15:39:14 +08:00
end
2014-12-15 16:53:20 +08:00
#验证编辑课程的权限
2014-12-23 11:07:17 +08:00
#当前
2014-12-15 16:53:20 +08:00
def edit_course_authorize ( current_user , course )
unless current_user . allowed_to? ( { :controller = > 'courses' , :action = > 'update' } , course )
raise '403'
end
end
#编辑课程 需验证权限
2014-12-23 11:07:17 +08:00
# params[:course][:name]:课程名称
#params[:course][:password]:密码
#params[:course][:description]:描述
#params[:course][:is_public]:是否公开1公开, 0私有
#params[:course][:open_student]:是否公开学生列表1公开, 0不公开, 不公开时非课程成员无法看到学生列表
#params[:course][:course_type]:暂时默认给1值。
#params[:term]:学期(秋季学期或春季学期)
#params[:time]: 年份( 例: 2014)
#params[:class_period]:学时总数
2015-01-05 17:47:04 +08:00
def edit_course ( params , course , current_user )
course . send ( :safe_attributes = , params [ :course ] , current_user )
#course.safe_attributes = params[:course]
2014-12-12 14:54:01 +08:00
course . time = params [ :time ]
course . term = params [ :term ]
2015-04-16 10:56:48 +08:00
course . class_period = params [ :class_period ] . to_i
2015-03-26 17:17:31 +08:00
params [ :course ] [ :is_public ] ? course . is_public = 1 : course . is_public = 0
params [ :course ] [ :open_student ] ? course . open_student = 1 : course . open_student = 0
2014-12-12 14:54:01 +08:00
if course . save
if params [ :course ] [ :is_public ] == '0'
course_status = CourseStatus . find_by_course_id ( course . id )
course_status . destroy if course_status
elsif params [ :course ] [ :is_public ] == '1'
course_status = CourseStatus . find_by_course_id ( course . id )
course_status . destroy if course_status
course_status = CourseStatus . create ( :course_id = > course . id , :grade = > 0 )
end
end
2015-02-12 15:51:52 +08:00
{ :course = > course , :img_url = > url_to_avatar ( course ) , :current_user_is_member = > current_user . member_of_course? ( course ) , :current_user_is_teacher = > is_course_teacher ( current_user , course ) }
2014-12-12 14:54:01 +08:00
end
#退出课程
2014-12-23 11:07:17 +08:00
#object_id: 课程id
#user: 当前用户
2015-01-07 11:37:48 +08:00
#@state == 0 退出成功
#@state == 1 不在课程中
#@state == 2 您还未登录
#@state 其他 未知错误,请稍后再试
2014-12-12 14:54:01 +08:00
def exit_course params , user
2015-01-07 11:37:48 +08:00
if user . nil?
@state = 2
return @state
end
2014-12-12 14:54:01 +08:00
@member = Member . where ( 'course_id = ? and user_id = ?' , params [ :object_id ] , user . id )
2015-01-07 11:37:48 +08:00
if @member . nil? || @member . count == 0
@state = 1
return @state
end
2014-12-12 14:54:01 +08:00
@member . first . destroy
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , user . id , params [ :object_id ] )
joined . each do | join |
join . delete
2015-01-07 11:37:48 +08:00
@state = 0
2014-12-12 14:54:01 +08:00
end
2015-01-07 11:37:48 +08:00
@state
2014-12-12 14:54:01 +08:00
end
#加入课程
2014-12-23 11:07:17 +08:00
#object_id: 课程id
#course_password :加入课程的密码
2014-12-12 14:54:01 +08:00
#@state == 0 加入成功
#@state == 1 密码错误
#@state == 2 课程已过期 请联系课程管理员重启课程。(在配置课程处)
#@state == 3 您已经加入了课程
#@state == 4 您加入的课程不存在
#@state == 5 您还未登录
#@state 其他 未知错误,请稍后再试
2015-01-07 11:20:27 +08:00
def join_course params , current_user
2014-12-12 14:54:01 +08:00
course = Course . find_by_id params [ :object_id ]
2015-01-07 11:20:27 +08:00
@state = 10
2014-12-12 14:54:01 +08:00
if course
if course_endTime_timeout? course
@state = 2
else
2015-01-07 11:20:27 +08:00
if current_user . member_of_course? ( course )
2014-12-12 14:54:01 +08:00
@state = 3
else
if params [ :course_password ] == course . password
members = [ ]
2015-01-07 11:20:27 +08:00
members << Member . new ( :role_ids = > [ 10 ] , :user_id = > current_user . id )
2014-12-12 14:54:01 +08:00
course . members << members
2015-01-07 11:20:27 +08:00
StudentsForCourse . create ( :student_id = > current_user . id , :course_id = > params [ :object_id ] )
2014-12-12 14:54:01 +08:00
@state = 0
else
@state = 1
end
end
end
else
@state = 4
end
2015-01-07 11:20:27 +08:00
{ :state = > @state , :course = > course }
2014-12-12 14:54:01 +08:00
end
2014-12-15 13:44:26 +08:00
#作业列表
#已提交的作业数量获取 bid.homeworks.count
#学生提问数量获取 bid.commit.nil? ? 0 : bid.commit
def homework_list params , current_user
2015-01-20 15:17:02 +08:00
course = Course . find ( params [ :id ] )
if course . is_public != 0 || current_user . member_of_course? ( course )
bids = course . homeworks . order ( 'deadline DESC' )
bids = bids . like ( params [ :name ] ) if params [ :name ] . present?
homeworks = [ ]
2015-01-30 16:58:05 +08:00
bids . each do | bid |
homeworks << show_homework_info ( course , bid , current_user , is_course_teacher ( current_user , course ) )
2015-01-20 15:17:02 +08:00
end
homeworks
2014-12-15 13:44:26 +08:00
else
raise '403'
end
end
2015-02-06 15:52:34 +08:00
def course_dynamic ( params , current_user )
2015-03-03 09:11:47 +08:00
@user = User . find ( params [ :id ] )
2015-04-15 10:30:56 +08:00
if current_user . nil? && ! current_user . admin? && ! @user . active?
2015-03-03 09:11:47 +08:00
raise '404'
return
2015-02-06 15:52:34 +08:00
end
2015-03-03 09:11:47 +08:00
if current_user == @user || current_user . admin?
membership = @user . coursememberships . all
2015-02-06 15:52:34 +08:00
else
2015-03-03 09:11:47 +08:00
membership = @user . coursememberships . all ( :conditions = > Course . visible_condition ( current_user ) )
2015-02-06 15:52:34 +08:00
end
2015-03-09 15:23:24 +08:00
if membership . nil? || membership . count == 0
2015-03-19 14:41:31 +08:00
raise l ( :label_no_courses , :locale = > get_user_language ( current_user ) )
2015-03-09 15:23:24 +08:00
end
2015-03-03 09:11:47 +08:00
membership . sort! { | older , newer | newer . created_on < = > older . created_on }
2015-03-01 16:32:10 +08:00
result = [ ]
2015-03-03 09:11:47 +08:00
membership . each do | mp |
course = mp . course
2015-03-09 15:23:24 +08:00
latest_course_dynamics = [ ]
latest_news = course . news . order ( " created_on desc " ) . first
unless latest_news . nil?
2015-03-19 14:41:31 +08:00
latest_course_dynamics << { :type = > 1 , :time = > latest_news . created_on , :message = > l ( :label_recently_updated_notification , :locale = > get_user_language ( current_user ) ) }
2015-03-09 15:23:24 +08:00
end
latest_message = course . journals_for_messages . order ( " created_on desc " ) . first
unless latest_message . nil?
2015-03-19 14:41:31 +08:00
latest_course_dynamics << { :type = > 2 , :time = > latest_message . created_on , :message = > l ( :label_recently_updated_message , :locale = > get_user_language ( current_user ) ) }
2015-03-09 15:23:24 +08:00
end
latest_attachment = course . attachments . order ( " created_on desc " ) . first
unless latest_attachment . nil?
2015-03-19 14:41:31 +08:00
latest_course_dynamics << { :type = > 3 , :time = > latest_attachment . created_on , :message = > l ( :label_recently_updated_courseware , :locale = > get_user_language ( current_user ) ) }
2015-03-09 15:23:24 +08:00
end
latest_bid = course . homeworks . order ( 'updated_on DESC' ) . first
unless latest_bid . nil?
2015-03-19 14:41:31 +08:00
latest_course_dynamics << { :type = > 4 , :time = > latest_bid . updated_on , :message = > l ( :label_recently_updated_homework , :locale = > get_user_language ( current_user ) ) }
2015-03-09 15:23:24 +08:00
end
2015-04-07 16:32:53 +08:00
# Time 2015-04-07 14:58:30
# Author lizanle
# Description 添加课程创建动态
if ( User . find_by_id ( CourseInfos . find_by_course_id ( course . id ) . try ( :user_id ) ) )
create_user_name = User . find_by_id ( CourseInfos . find_by_course_id ( course . id ) . user_id ) . realname
latest_course_dynamics << { :type = > 5 , :time = > course . created_at , :message = > l ( :label_recently , :locale = > get_user_language ( current_user ) ) << create_user_name << l ( :label_creat , :locale = > get_user_language ( current_user ) ) }
end
2015-03-09 15:23:24 +08:00
#每个作业中的最新留言
messages = [ ]
course . homeworks . each do | bid |
jour = bid . journals_for_messages . order ( " created_on desc " ) . first
unless jour . nil?
messages << jour
2015-03-03 09:11:47 +08:00
end
2015-03-09 15:23:24 +08:00
end
unless messages . count == 0
messages . sort! { | order , newer | newer . created_on < = > order . created_on }
end
latest_bid_message = messages . first
unless latest_bid_message . nil?
2015-03-19 14:41:31 +08:00
latest_course_dynamics << { :type = > 4 , :time = > latest_bid_message . created_on , :message = > l ( :label_recently_updated_message , :locale = > get_user_language ( current_user ) ) }
2015-03-09 15:23:24 +08:00
end
#每个作业中学生最后提交的作业
homeworks = [ ]
course . homeworks . each do | bid |
homework_attach = bid . homeworks . order ( 'updated_at DESC' ) . first
unless homework_attach . nil?
homeworks << homework_attach
end
end
unless homeworks . count == 0
homeworks . sort! { | order , newer | newer . updated_at < = > order . updated_at }
end
latest_homework_attach = homeworks . first
unless latest_homework_attach . nil?
2015-03-19 14:41:31 +08:00
latest_course_dynamics << { :type = > 4 , :time = > latest_homework_attach . updated_at , :message = > l ( :label_recently_updated_homework , :locale = > get_user_language ( current_user ) ) }
2015-03-09 15:23:24 +08:00
end
latest_course_dynamics . sort! { | order , newer | newer [ :time ] < = > order [ :time ] }
latest_course_dynamic = latest_course_dynamics . first
unless latest_course_dynamic . nil?
2015-03-18 17:21:19 +08:00
result << { :course_name = > course . name , :course_id = > course . id , :course_img_url = > url_to_avatar ( course ) , :course_time = > course . time , :course_term = > course . term , :type = > latest_course_dynamic [ :type ] , :update_time = > latest_course_dynamic [ :time ] , :message = > latest_course_dynamic [ :message ] , :count = > nil }
2015-03-03 09:11:47 +08:00
end
end
2015-03-09 17:32:38 +08:00
result . sort! { | order , newer | newer [ :update_time ] < = > order [ :update_time ] }
2015-03-01 16:32:10 +08:00
result
2015-02-06 14:29:42 +08:00
end
2015-04-29 17:46:39 +08:00
# 课程课件
def course_attachments params
result = [ ]
@course = Course . find ( params [ :course_id ] )
@attachments = @course . attachments . order ( " created_on desc " )
2015-05-05 17:19:06 +08:00
if ! params [ :name ] . nil? && params [ :name ] != " "
@attachments . each do | atta |
result << { :filename = > atta . filename ,
:description = > atta . description ,
:downloads = > atta . downloads ,
:quotes = > atta . quotes . nil? ? 0 :atta . quotes } if atta . filename . include? ( params [ :name ] )
end
else
@attachments . each do | atta |
result << { :filename = > atta . filename ,
:description = > atta . description ,
:downloads = > atta . downloads ,
:quotes = > atta . quotes . nil? ? 0 :atta . quotes }
end
2015-04-29 17:46:39 +08:00
end
result
end
2015-05-04 17:36:48 +08:00
# 课程学生列表
def course_members params
2015-05-05 17:19:06 +08:00
@all_members = searchmember_by_name ( student_homework_score ( 0 , params [ :course_id ] , 10 , " desc " ) , params [ :name ] )
2015-05-04 17:36:48 +08:00
end
2015-01-20 15:17:02 +08:00
private
2015-05-05 17:19:06 +08:00
def searchmember_by_name members , name
#searchPeopleByRoles(project, StudentRoles)
mems = [ ]
if name != " "
name = name . to_s . downcase
members . each do | m |
username = m . user [ :lastname ] . to_s . downcase + m . user [ :firstname ] . to_s . downcase
if ( m . user [ :login ] . to_s . downcase . include? ( name ) || m . user . user_extensions [ :student_id ] . to_s . downcase . include? ( name ) || username . include? ( name ) )
mems << m
end
end
else
mems = members
end
mems
end
2015-01-30 16:58:05 +08:00
def show_homework_info course , bid , current_user , is_course_teacher
2015-03-01 17:31:38 +08:00
author_real_name = bid . author . lastname + bid . author . firstname
2015-01-20 15:17:02 +08:00
many_times = course . homeworks . index ( bid ) + 1
name = bid . name
homework_count = bid . homeworks . count #已提交的作业数量
2015-04-09 16:25:19 +08:00
student_questions_count = bid . journals_for_messages . where ( 'm_parent_id IS NULL' ) . count
2015-01-20 15:17:02 +08:00
description = bid . description
#if is_course_teacher(User.current, course) && @bid.open_anonymous_evaluation == 1 && @bid.homeworks.count >= 2
state = bid . comment_status
2015-01-30 16:58:05 +08:00
unless is_course_teacher
homework_for_anonymous_comments = get_student_batch_homework_list bid , current_user
end
2015-01-20 15:17:02 +08:00
#end
open_anonymous_evaluation = bid . open_anonymous_evaluation
2015-03-03 17:36:05 +08:00
{ :course_name = > course . name , :course_id = > course . id , :id = > bid . id , :author = > bid . author , :author_real_name = > author_real_name , :homework_times = > many_times , :homework_name = > name , :homework_count = > homework_count , :student_questions_count = > student_questions_count ,
:description = > description , :homework_state = > state , :open_anonymous_evaluation = > open_anonymous_evaluation , :homework_for_anonymous_comments = > homework_for_anonymous_comments , :created_on = > bid . created_on , :deadline = > bid . deadline }
2015-01-30 16:58:05 +08:00
end
#显示作业列表的同时显示分配给当前学生匿评的作业
def show_homework_info_with_batch course , bid
author = bid . author . lastname + bid . author . firstname
many_times = course . homeworks . index ( bid ) + 1
name = bid . name
homework_count = bid . homeworks . count #已提交的作业数量
2015-04-09 16:25:19 +08:00
student_questions_count = bid . journals_for_messages . where ( 'm_parent_id IS NULL' ) . count
2015-01-30 16:58:05 +08:00
description = bid . description
#if is_course_teacher(User.current, course) && @bid.open_anonymous_evaluation == 1 && @bid.homeworks.count >= 2
state = bid . comment_status
#end
open_anonymous_evaluation = bid . open_anonymous_evaluation
2015-01-20 15:17:02 +08:00
{ :course_name = > course . name , :id = > bid . id , :course_teacher = > author , :homework_times = > many_times , :homework_name = > name , :homework_count = > homework_count , :student_questions_count = > student_questions_count ,
:description = > description , :homework_state = > state , :open_anonymous_evaluation = > open_anonymous_evaluation }
end
2015-02-06 14:29:42 +08:00
2015-05-04 17:36:48 +08:00
def student_homework_score ( groupid , course_id , nums , score_sort_by )
#teachers = find_course_teachers(@course)
#start_from = start_from * nums
sql_select = " "
if groupid == 0
if nums == 0
sql_select = " SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
WHERE members . course_id = #{course_id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{course_id}) AND members.user_id = homework_attaches.user_id
AND homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id}) GROUP BY members.user_id
UNION all
SELECT members . * , 0 as score FROM members , homework_attaches , students_for_courses WHERE members . course_id = #{course_id} AND
students_for_courses . course_id = #{course_id} and members.user_id = students_for_courses.student_id AND
members . user_id NOT IN ( SELECT homework_attaches . user_id FROM homework_attaches WHERE homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id} )
)
GROUP BY members . user_id ORDER BY score #{score_sort_by}"
else
sql_select = " SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
WHERE members . course_id = #{course_id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{course_id}) AND members.user_id = homework_attaches.user_id
AND homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id}) GROUP BY members.user_id
UNION all
SELECT members . * , 0 as score FROM members , homework_attaches , students_for_courses WHERE members . course_id = #{course_id} AND
students_for_courses . course_id = #{course_id} and members.user_id = students_for_courses.student_id AND
members . user_id NOT IN ( SELECT homework_attaches . user_id FROM homework_attaches WHERE homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id} )
)
GROUP BY members . user_id ORDER BY score #{score_sort_by} " #limit #{start_from}, #{nums}"
end
else
sql_select = " SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
WHERE members . course_id = #{course_id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{course_id}) AND members.user_id = homework_attaches.user_id
and members . course_group_id = #{groupid} AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id})
GROUP BY members . user_id
UNION all
SELECT members . * , 0 as score FROM members , homework_attaches , students_for_courses WHERE members . course_id = #{course_id}
and members . course_group_id = #{groupid} AND
students_for_courses . course_id = #{course_id} and members.user_id = students_for_courses.student_id AND
members . user_id NOT IN ( SELECT homework_attaches . user_id FROM homework_attaches WHERE homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{course_id} )
)
GROUP BY members . user_id ORDER BY score #{score_sort_by}"
end
sql = ActiveRecord :: Base . connection ( )
homework_scores = Member . find_by_sql ( sql_select )
sql . close ( )
homework_scores
end
2015-02-06 14:29:42 +08:00
2014-12-08 15:19:10 +08:00
end