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-07-07 17:18:29 +08:00
include ActionView :: Helpers :: DateHelper
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 .
2015-10-24 11:13:01 +08:00
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " )
2014-12-08 15:19:10 +08:00
else
@courses_all = Course . active . visible .
2015-10-24 11:13:01 +08:00
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " ) .
where ( " #{ Course . table_name } .school_id = ? " , @school_id )
2014-12-08 15:19:10 +08:00
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
2016-06-27 16:03:07 +08:00
def user_courses_list ( current_user )
courses = current_user . courses . not_deleted
courses . inject ( [ ] ) { | course_list , 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 ) ,
course_student_num : searchStudent ( course ) . count
}
}
end
2016-07-04 16:19:05 +08:00
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
2016-09-01 10:21:29 +08:00
# if current_user.nil? || !(current_user.admin? || c.is_public == 1 || (c.is_public == 0 && current_user.member_of_course?(c)))
if current_user . nil?
2014-12-15 10:41:09 +08:00
raise '403'
end
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
2016-07-27 14:30:19 +08:00
# @members = searchStudent(c)
@members = searchmember_by_name ( student_homework_score ( 0 , c . id , 0 , " desc " ) , " " )
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 |
2016-08-09 14:09:13 +08:00
img_url = " /images/ " + url_to_avatar ( m . user )
2015-01-07 15:24:43 +08:00
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
2016-08-04 09:08:18 +08:00
role_ids = [ ]
m . roles . each do | r |
role_ids << r . id
end
#双重身份 学生列表中不显示
2016-08-10 16:08:30 +08:00
# unless (params[:role] == '2' && role_ids.length >= 2)
2016-08-04 09:08:18 +08:00
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 ,
role_name : m . roles . first . name ,
name : m . user . show_name ,
roles_id : role_ids . include? ( 7 ) ? 7 : ( role_ids . include? ( 9 ) ? 9 : 10 ) ,
2016-09-19 13:22:29 +08:00
:brief_introduction = > m . user . user_extensions . brief_introduction , :realname = > m . user . realname , :is_me = > current_user . id == m . user . id ? 1 : 0 }
2016-08-10 16:08:30 +08:00
# end
2016-08-04 09:08:18 +08:00
2015-01-07 15:24:43 +08:00
end
users
end
2016-08-02 15:50:15 +08:00
def reviewers_list course_id
reviewers = [ ]
c = Course . find ( course_id )
if c
messages = CourseMessage . where ( " course_id=? and course_message_type = 'JoinCourseRequest' and status = 0 " , course_id )
messages . each do | m |
user = User . find ( m . course_message_id )
if user
img_url = url_to_avatar ( user )
gender = user . user_extensions . gender . nil? ? 0 : user . user_extensions . gender
work_unit = get_user_work_unit user
location = get_user_location user
roles_ids = m . content . split ( " , " )
reviewers << { :id = > user . id , :img_url = > img_url , :nickname = > user . login , :gender = > gender ,
:work_unit = > work_unit , :mail = > user . mail , :location = > location ,
role_name : " " ,
name : user . show_name ,
roles_id : roles_ids . include? ( " 7 " ) ? 7 : 9 ,
:brief_introduction = > user . user_extensions . brief_introduction , :realname = > user . realname }
end
end
end
reviewers
end
def get_reviewer_info params
2016-08-04 18:09:54 +08:00
status = - 1
2016-08-02 15:50:15 +08:00
info = nil
c = Course . find ( params [ :course_id ] )
if c
2016-08-04 18:09:54 +08:00
messages = CourseMessage . where ( " course_id=? and course_message_id = ? and course_message_type = 'JoinCourseRequest' " , params [ :course_id ] , params [ :user_id ] ) . last
2016-08-02 15:50:15 +08:00
if messages
2016-08-04 18:09:54 +08:00
#status 0未处理 1同意 2 通过
status = messages . status
2016-08-02 15:50:15 +08:00
user = User . find ( params [ :user_id ] )
if user
img_url = url_to_avatar ( user )
gender = user . user_extensions . gender . nil? ? 0 : user . user_extensions . gender
work_unit = get_user_work_unit user
location = get_user_location user
roles_ids = messages . content . split ( " , " )
info = { :id = > user . id , :img_url = > img_url , :nickname = > user . login , :gender = > gender ,
:work_unit = > work_unit , :mail = > user . mail , :location = > location ,
role_name : " " ,
name : user . show_name ,
roles_id : roles_ids . include? ( " 7 " ) ? 7 : 9 ,
:brief_introduction = > user . user_extensions . brief_introduction , :realname = > user . realname }
end
end
end
2016-08-04 18:09:54 +08:00
{ status : status , reviewer : info }
2016-08-02 15:50:15 +08:00
end
def deal_join_apply params , current_user
status = - 1
message = " "
c = Course . find ( params [ :course_id ] )
if c
messages = CourseMessage . where ( " course_id=? and course_message_id = ? and course_message_type = 'JoinCourseRequest' and status = 0 " , params [ :course_id ] , params [ :user_id ] ) . first
if messages
apply_user = User . find ( params [ :user_id ] )
ids = messages . content . split ( " , " ) # content保存的是申请的职位角色
integer_ids = [ ]
ids . each do | role_id |
integer_ids << role_id . to_i
end
if params [ :type ] == 0
if apply_user . member_of_course? ( c )
#将角色改为老师或者教辅
member = c . members . where ( :user_id = > apply_user . id ) . all [ 0 ]
member . role_ids = integer_ids
#删除为学生的记录
unless member . role_ids . include? ( 10 )
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , member . user_id , c . id )
joined . each do | join |
join . delete
end
end
member . course_group_id = 0
member . save
CourseMessage . create ( :user_id = > apply_user . id , :course_id = > c . id , :viewed = > false , :content = > messages . content , :course_message_id = > current_user . id , :course_message_type = > 'CourseRequestDealResult' , :status = > 1 )
messages . update_attributes ( :status = > 1 , :viewed = > 1 )
else
members = [ ]
members << Member . new ( :role_ids = > integer_ids , :user_id = > apply_user . id )
c . members << members
CourseMessage . create ( :user_id = > apply_user . id , :course_id = > c . id , :viewed = > false , :content = > messages . content , :course_message_id = > current_user . id , :course_message_type = > 'CourseRequestDealResult' , :status = > 1 )
messages . update_attributes ( :status = > 1 , :viewed = > 1 )
end
if integer_ids . include? ( 9 )
message = " 您已同意教师 " + apply_user . show_name + " ,加入班级 "
2016-08-10 16:08:30 +08:00
send_wechat_join_class_notice apply_user , c , 9 , 0
2016-08-02 15:50:15 +08:00
else
message = " 您已同意助教 " + apply_user . show_name + " ,加入班级 "
2016-08-10 16:08:30 +08:00
send_wechat_join_class_notice apply_user , c , 7 , 0
2016-08-02 15:50:15 +08:00
end
else
CourseMessage . create ( :user_id = > apply_user . id , :course_id = > c . id , :viewed = > false , :content = > messages . content , :course_message_id = > current_user . id , :course_message_type = > 'CourseRequestDealResult' , :status = > 2 )
2016-08-04 14:07:35 +08:00
messages . update_attributes ( :status = > 2 , :viewed = > 1 )
2016-08-02 15:50:15 +08:00
if integer_ids . include? ( 9 )
message = " 您已拒绝教师 " + apply_user . show_name + " ,加入班级 "
2016-08-10 16:08:30 +08:00
send_wechat_join_class_notice apply_user , c , 9 , 1
2016-08-02 15:50:15 +08:00
else
message = " 您已拒绝助教 " + apply_user . show_name + " ,加入班级 "
2016-08-10 16:08:30 +08:00
send_wechat_join_class_notice apply_user , c , 7 , 1
2016-08-02 15:50:15 +08:00
end
end
status = 0
else
message = " 该申请不存在或已被处理 "
end
else
message = " 该班级不存在或已被删除 "
end
{ :status = > status , :message = > message }
end
2015-01-07 15:24:43 +08:00
#获取用户的工作单位
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
2015-06-30 15:17:22 +08:00
scope = @course ? @course . news . order ( " news.created_on desc " ) . course_visible ( current_user ) : News . order ( " news.created_on desc " ) . course_visible ( current_user )
2015-01-20 15:17:02 +08:00
news = [ ]
scope . each do | n |
2015-06-26 17:16:03 +08:00
news << { :id = > n . id , :title = > n . title , :author_name = > n . author . name , :author_id = > n . author . id , :author = > n . author , :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
2016-07-20 17:00:18 +08:00
@comments = @news . comments . reorder ( " created_on desc " )
2014-12-15 16:53:20 +08:00
@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 ] )
2016-06-24 14:59:50 +08:00
course . generate_invite_code
course . generate_qrcode
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
2016-07-15 19:08:05 +08:00
# unless (course.is_public == 1 || current_user.member_of_course?(course) || current_user.admin?)
# raise '403'
# end
2016-09-20 14:58:37 +08:00
groupnum = 0
groupnum = course . course_groups . length if course . course_groups
2016-09-22 09:56:46 +08:00
{ :course = > course , :syllabus_title = > course . syllabus . nil? ? " " :course . syllabus . title , :work_unit = > work_unit , :img_url = > " /images/ " + url_to_avatar ( course ) , :current_user_is_member = > current_user . nil? ? false : current_user . member_of_course? ( course ) , :current_user_is_teacher = > current_user . nil? ? false : is_course_teacher ( current_user , course ) , :course_student_num = > course ? course . student . count . to_s : 0 , :groupnum = > groupnum }
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-11-19 15:13:34 +08:00
#params[:course][:publish_resource]允许学生上传资源
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])
2016-06-24 15:33:45 +08:00
#@course.password = params[:course][:password]
2015-01-05 16:58:11 +08:00
@course . tea_id = current_user . id
2016-06-28 15:13:04 +08:00
@course . syllabus_id = params [ :syllabus_id ] . to_i
2014-12-11 17:11:05 +08:00
@course . term = params [ :term ]
@course . time = params [ :time ]
2015-12-31 11:12:09 +08:00
@course . end_term = params [ :end_term ]
@course . end_time = params [ :end_time ]
2014-12-11 17:11:05 +08:00
#@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
2015-11-19 15:13:34 +08:00
params [ :course ] [ :publish_resource ] ? @course . publish_resource = 1 : @course . publish_resource = 0
2015-07-01 10:02:50 +08:00
else
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
2015-07-01 10:02:50 +08:00
if @course && @course . save
2014-12-11 17:11:05 +08:00
#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-11-17 16:43:50 +08:00
#params[:publish_resource] 允许学生上传资源 0 不允许 1 允许
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]
2016-06-24 15:33:45 +08:00
#course.password = params[:course][:password]
2016-10-08 16:41:06 +08:00
#course.syllabus_id = params[:syllabus_id].to_i
2014-12-12 14:54:01 +08:00
course . time = params [ :time ]
course . term = params [ :term ]
2016-01-22 15:17:11 +08:00
course . end_time = params [ :end_time ]
course . end_term = params [ :end_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
2015-11-17 16:43:50 +08:00
params [ :course ] [ :publish_resource ] ? course . publish_resource = 1 : course . publish_resource = 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
end
2016-09-01 10:21:29 +08:00
@state = 0
2015-01-07 11:37:48 +08:00
@state
2014-12-12 14:54:01 +08:00
end
2016-06-15 13:44:28 +08:00
class JoinCourseError < Errors
define_error [
0 , '加入成功' ,
1 , '密码错误' ,
2016-07-15 09:16:37 +08:00
2 , '班级已过期 请联系班级管理员重启班级。' ,
2016-08-02 15:50:15 +08:00
3 , '您已经是该班级的成员了' ,
2016-07-02 23:46:45 +08:00
4 , '您的邀请码不正确' ,
2016-06-15 13:44:28 +08:00
5 , '您还未登录' ,
2016-08-02 15:50:15 +08:00
6 , '您的申请已提交,请等待管理员审批' ,
2016-06-15 13:44:28 +08:00
7 , '您已经发送过申请了,请耐心等待' ,
2016-07-01 20:38:33 +08:00
8 , '您已经是该班级的教师了' ,
9 , '您已经是该班级的教辅了' ,
10 , '您已经是该班级的管理员了' ,
2016-07-21 15:21:09 +08:00
11 , '该班级不存在或已被删除啦' ,
2016-08-02 15:50:15 +08:00
12 , '您已经发送过申请了,请耐心等待' ,
13 , '您的申请已提交,请等待管理员审批' ,
2016-06-15 13:44:28 +08:00
'未知错误,请稍后再试'
]
end
2014-12-12 14:54:01 +08:00
#加入课程
2014-12-23 11:07:17 +08:00
#object_id: 课程id
#course_password :加入课程的密码
2015-01-07 11:20:27 +08:00
def join_course params , current_user
2016-06-24 16:12:24 +08:00
course = Course . find_by_invite_code ( params [ :invite_code ] ) if params [ :invite_code ]
2015-10-30 15:55:48 +08:00
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
2016-07-21 15:21:09 +08:00
elsif course [ :is_delete ] == 1
@state = 11
2014-12-12 14:54:01 +08:00
else
2015-10-21 14:52:00 +08:00
if current_user . member_of_course? ( course ) #如果已经是成员
2015-10-30 15:55:48 +08:00
member = course . members . where ( " user_id= #{ current_user . id } and course_id= #{ course . id } " ) [ 0 ]
roleName = member . roles [ 0 ] . name if member
2016-06-24 16:12:24 +08:00
if params [ :invite_code ] . present?
2015-10-30 15:55:48 +08:00
#如果加入角色为学生 并且当前是学生
2016-07-15 09:48:10 +08:00
if roleName == " Student "
2015-10-24 16:12:03 +08:00
@state = 3
2015-11-03 17:34:59 +08:00
#如果加入的角色为老师,并且当前已经是老师
2016-07-15 09:48:10 +08:00
elsif roleName == " Teacher "
2015-10-30 15:55:48 +08:00
@state = 8
2015-11-03 17:34:59 +08:00
#如果加入的角色教辅并且当前为教辅
2016-07-15 09:48:10 +08:00
elsif roleName == " TeachingAsistant "
2015-10-30 15:55:48 +08:00
@state = 9
2015-11-03 17:41:25 +08:00
elsif roleName == " Manager "
@state = 10
2015-10-24 11:13:01 +08:00
end
2015-10-21 14:52:00 +08:00
else
2015-10-24 11:13:01 +08:00
@state = 1
2015-10-21 14:52:00 +08:00
end
2014-12-12 14:54:01 +08:00
else
2016-06-24 16:12:24 +08:00
if params [ :invite_code ] . present?
2015-11-03 17:41:25 +08:00
members = [ ]
members << Member . new ( :role_ids = > [ 10 ] , :user_id = > current_user . id )
course . members << members
2016-06-24 16:12:24 +08:00
StudentsForCourse . create ( :student_id = > current_user . id , :course_id = > course . id )
2015-11-03 17:41:25 +08:00
@state = 0
else
@state = 1
end
2014-12-12 14:54:01 +08:00
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
2016-08-10 16:08:30 +08:00
#加入班级结果
def send_wechat_join_class_notice user , course , role_id , result
count = ShieldWechatMessage . where ( " container_type='User' and container_id= #{ user . id } and shield_type='Course' and shield_id= #{ course . id } " ) . count
if count == 0
ws = WechatService . new
2016-08-11 09:58:45 +08:00
role_name = role_id == 7 ? " 助教 " : role_id == 9 ? " 教师 " : " 学生 "
result_name = result == 0 ? " 通过 " : " 被拒绝 "
content = " 您以 " + role_name + " 身份加入班级的申请已 " + result_name + " 。 "
2016-08-10 16:08:30 +08:00
2016-08-11 09:58:45 +08:00
if result == 0
title = " 恭喜您加入班级成功。 "
remark = " 点击查看班级详情。 "
uid = 0
type = " class "
else
title = " 很遗憾您未能成功加入班级。 "
remark = " 点击查看申请详情。 "
uid = user . id
type = " review_class_member "
2016-08-10 16:08:30 +08:00
end
2016-09-14 15:10:24 +08:00
name = course . syllabus . nil? ? course . name : course . syllabus . title + " • " + course . name
2016-08-11 09:58:45 +08:00
ws = WechatService . new
2016-09-14 15:10:24 +08:00
ws . class_notice user . id , type , course . id , title , name , user . show_name , format_time ( Time . now ) , content , remark , uid
2016-08-11 09:58:45 +08:00
2016-08-10 16:08:30 +08:00
end
end
2016-07-29 19:19:58 +08:00
#多个角色加入课程
def join_course_roles params , current_user
course = Course . find_by_invite_code ( params [ :invite_code ] ) if params [ :invite_code ]
2016-09-18 16:12:38 +08:00
go_coursegroup_flag = 0
course_id = 0
2016-07-29 19:19:58 +08:00
@state = 10
if course
if course_endTime_timeout? course
@state = 2
2016-07-29 20:18:26 +08:00
elsif course [ :is_delete ] == 1
@state = 11
2016-07-29 19:19:58 +08:00
else
if current_user . member_of_course? ( course ) #如果已经是成员
@state = 3
# member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0]
# role_ids = params[:role]
# #roleName = member.roles[0].name if member
# #roleName = member.roles.map{|role| role.name}.join(",") if member
# if params[:invite_code].present?
# #如果加入角色为学生 并且当前是学生
# if role_ids == "10" && roleName.include?("Student") && !roleName.include?("Teacher") && !roleName.include?("TeachingAsistant")&& !roleName.include?("Manager")
# @state = 3
# #如果加入的角色为老师,并且当前已经是老师
# elsif role_ids == "9" && roleName.include?("Teacher") && !roleName.include?("Student")
# @state = 8
# #如果加入的角色教辅并且当前为教辅
# elsif role_ids == "7" && roleName.include?("TeachingAsistant") && !roleName.include?("Student")
# @state = 9
# elsif roleName.include?("Manager")
# @state = 10
# #如果加入角色为教师或者教辅,并且当前是学生,或者是要成为教辅,当前不是教辅,或者要成为教师,当前不是教师。那么要发送请求
# elsif (params[:role] != "10" && roleName == "Student") || (params[:role] == "7" && roleName != "TeachingAsistant" ) || (params[:role] == "9" && roleName != "Teacher" )
# #如果已经发送过消息了,那么就要给个提示
# if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} and content = #{params[:role]} and course_message_id = #{User.current.id} and course_id = #{course.id} and status = 0 ").count != 0
# @state = 7
# else
# Mailer.run.join_course_request(course, User.current, params[:role])
# CourseMessage.create(:user_id => course.tea_id, :course_id => course.id, :viewed => false,:content=> params[:role],:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest',:status=>0)
# @state = 6
# end
# #如果加入角色是学生,但是是当前课程的教师或者教辅
# elsif params[:role] == "10" && roleName != "Student"
# member.role_ids = [params[:role]]
# member.save
# StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id)
# @state = 0
# end
# else
# @state = 1
# end
else
if params [ :invite_code ] . present?
role_ids = params [ :role ]
role_str = role_ids . join ( " , " )
if role_ids . include? ( " 10 " ) && ! role_ids . include? ( " 7 " ) && ! role_ids . include? ( " 9 " )
members = [ ]
members << Member . new ( :role_ids = > [ 10 ] , :user_id = > current_user . id )
course . members << members
StudentsForCourse . create ( :student_id = > current_user . id , :course_id = > course . id )
@state = 0
2016-09-18 16:12:38 +08:00
go_coursegroup_flag = 1 if course . course_groups
course_id = course . id
2016-08-10 16:08:30 +08:00
send_wechat_join_class_notice current_user , course , 10 , 0
2016-07-29 19:19:58 +08:00
else
is_stu = false
if role_ids . include? ( " 10 " )
members = [ ]
members << Member . new ( :role_ids = > [ 10 ] , :user_id = > current_user . id )
course . members << members
StudentsForCourse . create ( :student_id = > current_user . id , :course_id = > course . id )
is_stu = true
2016-09-18 16:12:38 +08:00
go_coursegroup_flag = 1 if course . course_groups
course_id = course . id
2016-08-10 16:08:30 +08:00
send_wechat_join_class_notice current_user , course , 10 , 0
2016-07-29 19:19:58 +08:00
end
#如果已经发送过消息了,那么就要给个提示
2016-08-02 15:50:15 +08:00
if CourseMessage . where ( " course_message_type = 'JoinCourseRequest' and user_id = #{ course . tea_id } and content = ' #{ role_str } ' and course_message_id = #{ current_user . id } and course_id = #{ course . id } and status = 0 " ) . count != 0
2016-07-29 19:19:58 +08:00
if is_stu
@state = 12
else
@state = 7
end
else
2016-08-02 15:50:15 +08:00
Mailer . run . join_course_request ( course , current_user , params [ :role ] )
CourseMessage . create ( :user_id = > course . tea_id , :course_id = > course . id , :viewed = > false , :content = > role_str , :course_message_id = > current_user . id , :course_message_type = > 'JoinCourseRequest' , :status = > 0 )
#----------------微信通知----------------------
if role_ids . include? ( " 7 " ) || role_ids . include? ( " 9 " )
tea_user = User . find ( course . tea_id )
count = ShieldWechatMessage . where ( " container_type='User' and container_id= #{ tea_user . id } and shield_type='Course' and shield_id= #{ course . id } " ) . count
if count == 0
rolename = role_ids . include? ( " 7 " ) ? " 助教 " : " 教师 "
content = current_user . show_name + " 申请以 " + rolename + " 身份加入班级,等待您的审批。 "
2016-09-14 15:10:24 +08:00
name = course . syllabus . nil? ? course . name : course . syllabus . title + " • " + course . name
2016-08-02 15:50:15 +08:00
ws = WechatService . new
2016-09-14 15:10:24 +08:00
ws . class_notice tea_user . id , " review_class_member " , course . id , " 班级成员审批通知。 " , name , tea_user . show_name , format_time ( Time . now ) , content , " 点击查看申请详情。 " , current_user . id
2016-08-02 15:50:15 +08:00
end
end
#--------------------------------------------
2016-07-29 19:19:58 +08:00
if is_stu
@state = 13
else
@state = 6
end
end
end
else
@state = 1
end
end
end
else
@state = 4
end
2016-09-18 16:12:38 +08:00
{ :state = > @state , :course = > course , :go_coursegroup_flag = > go_coursegroup_flag , :course_id = > course_id }
2016-07-29 19:19:58 +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 )
2016-07-19 10:50:36 +08:00
bids = course . homework_commons . where ( " publish_time <= ? " , Time . now . strftime ( " %Y-%m-%d " ) ) . page ( params [ :page ] || 1 ) . per ( 20 ) . reorder ( 'created_at DESC' )
2015-01-20 15:17:02 +08:00
bids = bids . like ( params [ :name ] ) if params [ :name ] . present?
2015-10-24 11:13:01 +08:00
homeworks = [ ]
bids . each do | bid |
homeworks << show_homework_info ( course , bid , current_user , is_course_teacher ( current_user , course ) )
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-05-27 08:56:34 +08:00
latest_course_dynamics << { :type = > 1 , :time = > latest_news . created_on ,
:message = > latest_news . author . realname << l ( :label_recently_updated_notification , :locale = > get_user_language ( current_user ) ) << " : " << latest_news . title }
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-05-27 08:56:34 +08:00
latest_course_dynamics << { :type = > 2 , :time = > latest_message . created_on , :message = > latest_message . user . realname << l ( :label_recently_updated_message , :locale = > get_user_language ( current_user ) ) << " : " <<latest_message.notes}
2015-03-09 15:23:24 +08:00
end
latest_attachment = course . attachments . order ( " created_on desc " ) . first
unless latest_attachment . nil?
2015-05-27 08:56:34 +08:00
latest_course_dynamics << { :type = > 3 , :time = > latest_attachment . created_on , :message = > latest_attachment . author . realname << l ( :label_recently_updated_courseware , :locale = > get_user_language ( current_user ) ) << " : " <<latest_attachment.filename}
2015-03-09 15:23:24 +08:00
end
2015-06-08 17:16:34 +08:00
latest_bid = course . homework_commons . order ( 'updated_at DESC' ) . first
2015-03-09 15:23:24 +08:00
unless latest_bid . nil?
2015-06-08 17:16:34 +08:00
latest_course_dynamics << { :type = > 4 , :time = > latest_bid . updated_at , :message = > latest_bid . user . realname << l ( :label_recently_updated_homework , :locale = > get_user_language ( current_user ) ) << " : " <<latest_bid.name}
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
#每个作业中的最新留言
2015-06-08 17:16:34 +08:00
# messages = []
# course.homework_commons.each do |hc|
# jour = hc.journals_for_messages.order("created_on desc").first
# unless jour.nil?
# messages << jour
# end
# 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?
# latest_course_dynamics << {:type => 4,:time => latest_bid_message.created_on,:message => l(:label_recently_updated_message,:locale => get_user_language(current_user))}
# end
2015-03-09 15:23:24 +08:00
#每个作业中学生最后提交的作业
homeworks = [ ]
2015-06-08 17:16:34 +08:00
course . homework_commons . each do | bid |
2015-10-24 11:13:01 +08:00
homework_attach = bid . student_works . order ( 'updated_at DESC' ) . first
unless homework_attach . nil?
homeworks << homework_attach
end
2015-03-09 15:23:24 +08:00
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-05-27 08:56:34 +08:00
latest_course_dynamics << { :type = > 4 , :time = > latest_homework_attach . updated_at , :message = > latest_homework_attach . user . realname << l ( :label_recently_updated_homework , :locale = > get_user_language ( current_user ) ) << " : " << ( latest_homework_attach . name . nil? ? latest_homework_attach . description : latest_homework_attach . name ) }
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-10-24 11:13:01 +08:00
# 课程课件
def course_attachments params
result = [ ]
course = Course . find ( params [ :course_id ] )
2016-07-19 10:50:36 +08:00
attachments = course . attachments . where ( " is_publish = 1 " ) . reorder ( " created_on desc " )
2015-10-24 11:13:01 +08:00
if ! params [ :name ] . nil? && params [ :name ] != " "
attachments . each do | atta |
result << atta if atta . filename . include? ( params [ :name ] )
end
else
result = attachments
end
result
end
2015-04-29 17:46:39 +08:00
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-05-13 09:56:34 +08:00
def show_member_score params
@member_score = Member . find ( params [ :member_id ] ) if params [ :member_id ]
atta = @member_score . student_homework_score [ 0 ]
result = [ ]
atta . each do | t |
if ! params [ :homeworkName ] . nil? && params [ :homeworkName ] != " "
result << { :name = > t [ :name ] , :score = > t [ :score ] } if t [ :name ] . include? ( params [ :homeworkName ] )
else
result << { :name = > t [ :name ] , :score = > t [ :score ] }
end
end
result
end
2015-05-15 09:06:36 +08:00
# 设置人员为课程教辅
def set_as_assitant_teacher params
members = [ ]
#找到课程
course = Course . find ( params [ :course_id ] )
#新建课程人员
member = Member . new ( :role_ids = > [ 7 ] , :user_id = > params [ :user_id ] , :course_id = > params [ :course_id ] )
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , member . user_id , course . id )
joined . each do | join |
join . delete
end
member . course_group_id = 0
members << member
course . members << members
#将课程人员设置为教辅
end
def del_assitant_teacher params
2015-10-24 11:13:01 +08:00
member = Member . where ( " user_id = ? and course_id = ? " , params [ :user_id ] , params [ :course_id ] )
member . each do | m |
m . destroy
end
user_admin = CourseInfos . where ( " user_id = ? and course_id = ? " , params [ :user_id ] , params [ :course_id ] )
if user_admin . size > 0
user_admin . each do | user |
user . destroy
end
end
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , params [ :user_id ] , params [ :course_id ] )
joined . each do | join |
join . delete
end
2015-05-15 09:06:36 +08:00
end
2015-05-15 16:13:32 +08:00
def create_course_notice params , current_user
n = News . new ( :course_id = > params [ :course_id ] , :author_id = > current_user . id , :title = > params [ :title ] , :description = > params [ :desc ] )
n . save
{ :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 }
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-06-08 17:16:34 +08:00
author_real_name = bid . user . lastname + bid . user . firstname
many_times = course . homework_commons . index ( bid ) + 1
2015-01-20 15:17:02 +08:00
name = bid . name
2015-06-08 17:16:34 +08:00
homework_count = bid . student_works . count #已提交的作业数量
#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
2015-06-26 09:18:12 +08:00
#state = bid.homework_detail_manual.comment_status
if ! bid . nil?
if bid . homework_type == 1 && bid . homework_detail_manual
case bid . homework_detail_manual . comment_status
when 1
state = show_homework_deadline bid
when 2
state = " 正在匿评中 "
when 3
state = " 匿评已结束 "
end
elsif bid . homework_type == 0
state = " 未启用匿评 "
elsif bid . homework_type == 2
state = " 编程作业 "
else
end
end
2015-07-09 14:32:10 +08:00
# studentlist = []
# bid.student_works.order("created_at desc").page(1).per(6).each do |work|
# studentlist << work.user
# end
2015-07-09 14:57:27 +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
2015-06-08 17:16:34 +08:00
open_anonymous_evaluation = bid . homework_detail_manual . comment_status
2015-07-09 14:32:10 +08:00
{ :course_name = > course . name , :course_id = > course . id , :id = > bid . id ,
:author = > bid . user , :author_real_name = > author_real_name ,
:homework_times = > many_times , :homework_name = > name ,
:homework_count = > homework_count , :student_questions_count = > 0 ,
:description = > description , :homework_state = > state ,
:open_anonymous_evaluation = > open_anonymous_evaluation ,
2015-07-09 14:57:27 +08:00
#:homework_for_anonymous_comments => homework_for_anonymous_comments,
2015-07-09 14:32:10 +08:00
:created_on = > bid . created_at , :deadline = > bid . end_time ,
2015-10-24 11:13:01 +08:00
:homework_notsubmit_num = > bid . course . members . count - bid . student_works . count ,
:homework_submit_num = > bid . student_works . count ,
:homework_status_student = > get_homework_status ( bid ) , :homework_status_teacher = > homework_status_desc ( bid ) ,
:student_evaluation_part = > get_evaluation_part ( bid , 3 ) ,
2016-07-21 15:21:09 +08:00
:ta_evaluation_part = > get_evaluation_part ( bid , 2 ) , :homework_anony_type = > bid . homework_type == 1 && ! bid . homework_detail_manual . nil? , :current_user_is_teacher = > is_course_teacher }
2015-03-03 17:36:05 +08:00
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
2015-10-24 11:13:01 +08:00
#if is_course_teacher(User.current, course) && @bid.open_anonymous_evaluation == 1 && @bid.homeworks.count >= 2
2015-01-30 16:58:05 +08:00
state = bid . comment_status
2015-10-24 11:13:01 +08:00
#end
2015-01-30 16:58:05 +08:00
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
2016-09-05 16:38:25 +08:00
def student_homework_score ( groupid , course_id , nums , score_sort_by , sort_type = 'score' )
2015-05-04 17:36:48 +08:00
sql_select = " "
if groupid == 0
2016-09-05 16:38:25 +08:00
sql_select = " SELECT members.*,(
SELECT SUM ( student_works . work_score )
FROM student_works , homework_commons
WHERE student_works . homework_common_id = homework_commons . id
AND homework_commons . course_id = course_id
AND student_works . user_id = members . user_id
) AS score , ( SELECT ( message_num * 2 + message_reply_num * 1 + news_reply_num * 1 + news_num * 1 +
resource_num * 5 + journal_num * 1 + homework_journal_num * 1 ) FROM ` course_contributor_scores ` AS ccs WHERE ccs . course_id = #{course_id} AND ccs.user_id = members.user_id
) AS act_score
FROM members
JOIN students_for_courses
ON students_for_courses . student_id = members . user_id AND students_for_courses . course_id = members . course_id
WHERE members . course_id = #{course_id} ORDER BY #{sort_type} #{score_sort_by}"
2015-05-04 17:36:48 +08:00
else
2016-09-05 16:38:25 +08:00
sql_select = " SELECT members.*,(
SELECT SUM ( student_works . work_score )
FROM student_works , homework_commons
WHERE student_works . homework_common_id = homework_commons . id
AND homework_commons . course_id = #{course_id}
AND student_works . user_id = members . user_id
) AS score , ( SELECT ( message_num * 2 + message_reply_num * 1 + news_reply_num * 1 + news_num * 1 +
resource_num * 5 + journal_num * 1 + homework_journal_num * 1 ) FROM ` course_contributor_scores ` AS ccs WHERE ccs . course_id = #{course_id} AND ccs.user_id = members.user_id
) AS act_score
FROM members
JOIN students_for_courses
ON students_for_courses . student_id = members . user_id AND students_for_courses . course_id = members . course_id
WHERE members . course_id = #{course_id} AND members.course_group_id = #{groupid} ORDER BY #{sort_type} #{score_sort_by}"
2015-05-04 17:36:48 +08:00
end
sql = ActiveRecord :: Base . connection ( )
homework_scores = Member . find_by_sql ( sql_select )
sql . close ( )
homework_scores
end
2015-06-19 15:05:25 +08:00
#app新版api
#
#
#课程动态
public
def all_course_dynamics params , current_user
#获取当前用户的所有课程
@user = User . find ( params [ :id ] )
if current_user . nil? && ! current_user . admin? && ! @user . active?
raise '404'
return
end
if current_user == @user || current_user . admin?
2015-07-24 09:37:53 +08:00
membership = @user . coursememberships
2015-06-19 15:05:25 +08:00
else
2015-07-24 09:37:53 +08:00
membership = @user . coursememberships . all ( :conditions = > Course . visible_condition ( current_user ) )
2015-06-19 15:05:25 +08:00
end
if membership . nil? || membership . count == 0
raise l ( :label_no_courses , :locale = > get_user_language ( current_user ) )
end
2015-07-24 09:37:53 +08:00
#membership.sort! { |older, newer| newer.created_on <=> older.created_on }
2015-06-19 15:05:25 +08:00
#定义一个数组集合, 存放hash数组, 该hash数组包括课程的信息, 并包含课程的最新发布的资源, 最新的讨论区留言, 最新的作业, 最新的通知
result = [ ]
#对用户所有的课程进行循环,找到每个课程最新发布的资源,最新的讨论区留言,最新的作业,最新的通知,并存进数组
2015-07-24 09:37:53 +08:00
2015-06-19 15:05:25 +08:00
membership . each do | mp |
course = mp . course
latest_course_dynamics = [ ]
2015-07-24 10:56:19 +08:00
notices_count = 0
topic_count = 0
topics = nil
homeworkss = nil
notices = nil
2015-07-07 17:18:29 +08:00
2015-06-19 15:05:25 +08:00
# 课程通知
2015-06-30 15:17:22 +08:00
latest_news = course . news . page ( 1 ) . per ( 2 ) . order ( " created_on desc " )
unless latest_news . first . nil?
2015-07-24 10:56:19 +08:00
notices_count = course . news . count
notices = latest_news . all
latest_course_dynamics << { :time = > latest_news . first . created_on }
2015-06-19 15:05:25 +08:00
end
# 课程讨论区
2015-10-24 11:13:01 +08:00
latest_message = course . boards . first . topics . page ( 1 ) . per ( 2 )
unless latest_message . first . nil?
topic_count = course . boards . nil? ? 0 : course . boards . first . topics . count
topics = latest_message . all
latest_course_dynamics << { :time = > latest_message . first . created_on }
end
2015-06-19 15:05:25 +08:00
# 课程资源
2015-07-02 17:31:30 +08:00
# latest_attachment = course.attachments.order("created_on desc").page(1).per(2)
# unless latest_attachment.first.nil?
# latest_course_dynamics << {:type => 3, :time => latest_attachment.first.created_on,:count =>course.attachments.count , :documents=>latest_attachment}
# dynamics_count += 1
# end
2015-05-13 09:56:34 +08:00
2015-06-19 15:05:25 +08:00
#课程作业 已经交的学生列表( 暂定显示6人) , 未交的学生列表, 作业的状态
2015-06-30 15:17:22 +08:00
homeworks = course . homework_commons . page ( 1 ) . per ( 2 ) . order ( 'created_at desc' )
unless homeworks . first . nil?
2015-07-24 10:56:19 +08:00
homeworkss = homeworks
latest_course_dynamics << { :time = > homeworks . first . updated_at }
2015-06-19 15:05:25 +08:00
end
2015-07-07 17:18:29 +08:00
latest_course_dynamics . sort! { | order , newer | newer [ :time ] < = > order [ :time ] }
# 课程学霸 学生总分数排名靠前的5个人
homework_count = course . homework_commons . count
2015-07-13 11:10:04 +08:00
sql = " select users.*,ROUND(sum(student_works.final_score),2) score from student_works left outer join users on student_works.user_id = users.id " <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{ course . id } ) GROUP BY student_works.user_id ORDER BY score desc limit 0,4 "
2015-07-24 09:37:53 +08:00
2015-07-07 17:18:29 +08:00
better_students = User . find_by_sql ( sql )
2015-07-24 09:37:53 +08:00
2015-07-07 17:18:29 +08:00
# 找出在课程讨论区发帖回帖数最多的
active_students = [ ]
2015-07-13 11:10:04 +08:00
sql1 = " select users.*,count(author_id)*2 active_count from messages " <<
2015-07-07 17:18:29 +08:00
" LEFT JOIN users on messages.author_id = users.id " <<
" where messages.board_id in (select id from boards where boards.course_id = #{ course . id } ) " <<
" GROUP BY messages.author_id ORDER BY count(author_id) desc " <<
" limit 0,4 "
active_students = User . find_by_sql ( sql1 )
2015-07-24 09:37:53 +08:00
2015-07-07 17:18:29 +08:00
if homework_count != 0 && ! better_students . empty?
2015-07-24 10:56:19 +08:00
latest_course_dynamics << { :time = > " 1970-01-01 0:0:0 +0800 " }
2015-07-07 17:18:29 +08:00
end
unless active_students . empty?
2015-07-24 10:56:19 +08:00
latest_course_dynamics << { :time = > " 1970-01-01 0:0:0 +0800 " }
2015-07-07 17:18:29 +08:00
end
2015-10-24 11:13:01 +08:00
latest_course_dynamic = latest_course_dynamics . first
unless latest_course_dynamic . nil?
result << { :course_name = > course . name ,
:current_user_is_member = > current_user . member_of_course? ( course ) ,
:current_user_is_teacher = > is_course_teacher ( current_user , course ) ,
:course_id = > course . id ,
:course_img_url = > url_to_avatar ( course ) ,
:course_time = > course . time ,
:course_term = > course . term ,
:news_count = > notices_count ,
:homework_count = > homework_count ,
:topic_count = > topic_count ,
:news = > notices ,
:homeworks = > homeworkss ,
:topics = > topics ,
:better_students = > better_students ,
:active_students = > active_students ,
:message = > " " ,
:course_student_num = > course ? course . members . count : 0 ,
#:time_from_now=> distance_of_time_in_words(Time.now, latest_course_dynamic[:time].to_time) << "前",
:time_from_now = > time_from_now ( latest_course_dynamic [ :time ] . to_time ) , #.strftime('%Y-%m-%d %H:%M:%S').to_s,
:time = > latest_course_dynamic [ :time ] . to_time }
end
2015-07-24 09:37:53 +08:00
2015-06-19 15:05:25 +08:00
end
#返回数组集合
2015-07-20 15:03:42 +08:00
result . sort! { | order , newer | newer [ :time ] < = > order [ :time ] }
2015-07-24 09:37:53 +08:00
2015-06-19 15:05:25 +08:00
result
end
2015-05-15 09:06:36 +08:00
2015-07-01 16:56:03 +08:00
# 获取课程历次作业的学生总成绩
def students_score_list params , current_user
page = ( params [ :page ] || 1 ) - 1
2015-07-09 14:32:10 +08:00
user_list = [ ]
max_size = 0
2015-07-08 17:36:17 +08:00
if params [ :type ] == 1
2015-07-13 11:10:04 +08:00
sql = " select users.*,ROUND(sum(student_works.final_score),2) score from student_works left outer join users on student_works.user_id = users.id " <<
2015-07-10 17:58:42 +08:00
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{ params [ :course_id ] } ) GROUP BY student_works.user_id ORDER BY score desc limit #{ page * 10 } ,10 "
2015-07-09 14:32:10 +08:00
sql_count = " select count(distinct(student_works.user_id) ) " <<
2015-10-24 11:13:01 +08:00
" from student_works left outer join users on student_works.user_id = users.id " <<
" where homework_common_id in " <<
" ( select id from homework_commons where homework_commons.course_id = #{ params [ :course_id ] } ) "
2015-07-09 14:32:10 +08:00
max_size = ActiveRecord :: Base . connection ( ) . select_value ( sql_count )
user_list = User . find_by_sql ( sql )
2015-07-08 17:36:17 +08:00
else
sql1 = " select users.*,count(author_id)*2 active_count from messages " <<
" LEFT JOIN users on messages.author_id = users.id " <<
" where messages.board_id in (select id from boards where boards.course_id = #{ params [ :course_id ] } ) " <<
" GROUP BY messages.author_id ORDER BY count(author_id) desc " <<
" limit #{ page * 10 } ,10 "
2015-07-09 14:32:10 +08:00
sql1_count = " select count(DISTINCT(messages.author_id)) " <<
" from messages LEFT JOIN users on messages.author_id = users.id " <<
" where messages.board_id in (select id from boards where boards.course_id = #{ params [ :course_id ] } ) "
max_size = ActiveRecord :: Base . connection ( ) . select_value ( sql1_count )
user_list = User . find_by_sql ( sql1 )
2015-07-08 17:36:17 +08:00
end
2015-07-09 14:32:10 +08:00
{ :user_list = > user_list , :max_size = > max_size }
2015-07-01 16:56:03 +08:00
end
2015-07-02 17:31:30 +08:00
# 获取某次作业的所有作业列表
def student_work_list params , current_user
2015-07-18 17:31:29 +08:00
is_teacher = current_user . allowed_to? ( :as_teacher , Course . find ( params [ :course_id ] ) )
2015-07-02 17:31:30 +08:00
homework = HomeworkCommon . find ( params [ :homework_id ] )
student_works = [ ]
#老师 || 非匿评作业 || 匿评结束 显示所有的作品
show_all = is_teacher || homework . homework_type != 1 || homework . homework_detail_manual . comment_status == 3
if show_all
if homework . homework_type == 1 || is_teacher || current_user . admin?
student_works = homework . student_works . page ( params [ :page ] || 1 ) . per ( 10 ) . order ( " final_score desc " )
else
my_work = homework . student_works . where ( :user_id = > current_user . id )
if my_work . empty?
student_works = [ ]
else
student_works = homework . student_works . page ( params [ :page ] || 1 ) . per ( 10 ) . order ( " final_score desc " )
end
end
else #学生
if homework . homework_detail_manual . comment_status == 1 #未开启匿评,只显示我的作品
student_works = homework . student_works . where ( :user_id = > current_user . id ) . page ( params [ :page ] || 1 ) . per ( 10 )
elsif homework . homework_detail_manual . comment_status == 2 #匿评列表,显示匿评作品和我的作品
#is_evaluation = true
my_work = homework . student_works . where ( :user_id = > current_user . id ) . page ( params [ :page ] || 1 ) . per ( 10 )
student_works = my_work + current_user . student_works_evaluation_distributions . map ( & :student_work ) . select { | work | work . homework_common_id == homework . id }
end
end
student_works
end
2015-07-16 17:56:35 +08:00
# 获取课程的讨论区信息
def board_message_list params , current_user
# 课程讨论区
course = Course . find ( params [ :course_id ] )
latest_message = course . boards . first . topics . page ( params [ :page ] || 1 ) . per ( 10 )
end
#获取回复列表
def board_message_reply_list params , current_user
board = Board . find ( params [ :board_id ] )
reply_list = board . topics . where ( " id = #{ params [ :msg_id ] } " ) . first . children . order ( " created_on desc " ) . page ( params [ :page ] || 1 ) . per ( 10 )
end
#回复讨论区
def board_message_reply params , current_user
author = Message . find ( params [ :parent_id ] ) . author
quote = " <blockquote> " << author . realname << " ( " << author . nickname << " )写到: <br/> " << params [ :quote ] << " <div class='cl'></div></blockquote> "
reply = Message . new
reply . author = current_user
reply . board = Board . find ( params [ :board_id ] )
params [ :reply ] = { }
params [ :reply ] [ :subject ] = params [ :subject ] #本回复标题
params [ :reply ] [ :content ] = params [ :content ] #本回复内容
params [ :reply ] [ :quote ] = { }
params [ :reply ] [ :quote ] [ :quote ] = params [ :quote ] #本回复引用的内容, 也是父id内容
params [ :reply ] [ :parent_topic ] = params [ :parent_id ] # 父id
params [ :reply ] [ :board_id ] = params [ :board_id ] #讨论区id
params [ :reply ] [ :id ] = params [ :root_id ] #根id
reply . safe_attributes = params [ :reply ]
if params [ :root_id ] == params [ :parent_id ]
reply . content = reply . content
else
reply . content = quote + reply . content
end
Message . find ( params [ :root_id ] ) . children << reply
reply
end
2015-07-04 15:53:01 +08:00
# # 开启匿评
# #statue 1:启动成功, 2: 启动失败, 作业总数大于等于2份时才能启动匿评, 3:已开启匿评,请务重复开启,4:没有开启匿评的权限
# def start_anonymous_comment params,current_user
# homework = HomeworkCommon.find(params[:homework_id])
# return {:status=>4} unless current_user.admin? || current_user.allowed_to?(:as_teacher,Course.find(params[:course_id]))
# return {:status=>5} if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
# homework_detail_manual = homework.homework_detail_manual
# if homework_detail_manual.comment_status == 1
# student_works = homework.student_works
# if student_works && student_works.size >=2
# student_works.each_with_index do |work, index|
# user = work.user
# n = homework_detail_manual.evaluation_num
# n = n < student_works.size ? n : student_works.size - 1
# assigned_homeworks = get_assigned_homeworks(student_works, n, index)
# assigned_homeworks.each do |h|
# student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
# student_works_evaluation_distributions.save
# end
# end
# homework_detail_manual.update_column('comment_status', 2)
# statue = 1
# else
# statue = 2
# end
# else
# statue = 3
# end
# {:status => statue}
# end
#
# def get_assigned_homeworks(student_works, n, index)
# student_works += student_works
# student_works[index + 1 .. index + n]
# end
2015-07-03 12:22:33 +08:00
2016-07-28 14:49:45 +08:00
#修改班级成员角色
2016-08-02 15:50:15 +08:00
def modify_user_course_role params , roles_id
2016-07-28 14:49:45 +08:00
status = - 1
2016-07-27 14:30:19 +08:00
2016-07-28 14:49:45 +08:00
c = Course . find ( " #{ params [ :id ] } " )
2016-07-27 14:30:19 +08:00
2016-08-02 15:50:15 +08:00
# member = c.member_principals.includes(:roles, :principal).where("user_id=?",params[:user_id]).first
member = c . members . where ( " user_id=? " , params [ :user_id ] ) . first
2016-07-27 14:30:19 +08:00
2016-07-28 14:49:45 +08:00
if member
2016-08-02 15:50:15 +08:00
member . role_ids = roles_id
2016-07-27 14:30:19 +08:00
2016-08-02 15:50:15 +08:00
role = Role . find ( roles_id [ 0 ] )
2016-07-27 14:30:19 +08:00
2016-07-28 14:49:45 +08:00
# 这里的判断只能通过角色名,可以弄成常量
2016-08-02 15:50:15 +08:00
if roles_id && roles_id . include? ( 10 )
2016-07-28 14:49:45 +08:00
StudentsForCourse . create ( :student_id = > params [ :user_id ] , :course_id = > params [ :id ] )
else
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , params [ :user_id ] , params [ :id ] )
joined . each do | join |
join . delete
end
member . course_group_id = 0
end
if role . allowed_to? ( :is_manager )
courseInfo = CourseInfos . new ( :user_id = > params [ :user_id ] , :course_id = > params [ :id ] )
courseInfo . save
else
user_admin = CourseInfos . where ( " user_id = ? and course_id = ? " , params [ :user_id ] , params [ :id ] )
if user_admin . size > 0
user_admin . each do | user |
user . destroy
end
end
end
2016-07-27 14:30:19 +08:00
2016-07-28 14:49:45 +08:00
Role . givable . all [ 3 .. 5 ]
2016-07-27 14:30:19 +08:00
2016-08-02 15:50:15 +08:00
if member . save
2016-07-28 14:49:45 +08:00
status = 0
end
end
status
2016-07-27 14:30:19 +08:00
end
2016-08-31 14:21:38 +08:00
#删除班级成员
def delete_course_member course , user_id , current_user
if current_user . nil?
state = - 1
return state
end
member = course . members . where ( " user_id=? " , user_id ) . first
if member != nil
member . destroy
user_admin = CourseInfos . where ( " user_id = ? and course_id = ? " , member . user_id , course . id )
if user_admin . size > 0
user_admin . each do | user |
user . destroy
end
end
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , member . user_id , course . id )
joined . each do | join |
join . delete
end
roles = Role . givable . all [ 3 .. 5 ]
#移出课程发送消息
CourseMessage . create ( :user_id = > member . user_id , :course_id = > course . id , :course_message_type = > " RemoveFromCourse " , :viewed = > false , :course_message_id = > current_user . id )
return 0
else
return 1
end
end
2015-06-30 15:17:22 +08:00
end
2015-05-15 09:06:36 +08:00