2014-09-24 14:47:53 +08:00
class CoursesController < ApplicationController
2015-04-10 15:01:33 +08:00
# layout 'base_courses'
2014-09-24 14:47:53 +08:00
include CoursesHelper
2015-04-03 11:30:48 +08:00
include ActivitiesHelper
2014-09-24 14:47:53 +08:00
helper :activities
helper :members
helper :words
2015-05-13 16:44:12 +08:00
helper :attachments
2015-06-05 16:20:26 +08:00
helper :activity_notifys
2014-09-24 14:47:53 +08:00
2015-09-24 16:30:14 +08:00
before_filter :auth_login1 , :only = > [ :show , :course_activity , :feedback ]
2014-09-24 14:47:53 +08:00
menu_item :overview
menu_item :feedback , :only = > :feedback
menu_item :homework , :only = > :homework
2015-01-27 15:29:09 +08:00
2014-11-12 16:51:07 +08:00
menu_item :new_homework , :only = > :new_homework
2014-09-24 14:47:53 +08:00
menu_item l ( :label_sort_by_time ) , :only = > :index
menu_item l ( :label_sort_by_active ) , :only = > :index
menu_item l ( :label_sort_by_influence ) , :only = > :index
before_filter :can_show_course , :except = > [ ]
2015-07-23 16:17:13 +08:00
before_filter :logged_user_by_apptoken , :only = > [ :show , :feedback ]
before_filter :find_course , :except = > [ :index , :search , :new , :join , :unjoin , :create , :new_join , :course , :join_private_courses ]
before_filter :authorize_course , :only = > [ :show , :settings , :update , :course ]
before_filter :authorize_course_global , :only = > [ :new , :create ]
2015-01-07 09:37:35 +08:00
before_filter :toggleCourse , :only = > [ :finishcourse , :restartcourse ]
2014-09-24 14:47:53 +08:00
before_filter :require_login , :only = > [ :join , :unjoin ]
2014-10-20 17:31:45 +08:00
#before_filter :allow_join, :only => [:join]
2014-12-29 16:57:31 +08:00
2014-09-24 14:47:53 +08:00
def join
if User . current . logged?
2015-10-20 17:27:06 +08:00
if params [ :role ] == 10
cs = CoursesService . new
@user = User . current
join = cs . join_course params , user
@state = join [ :state ]
@course = join [ :course ]
else
@course = Course . find_by_id params [ :object_id ]
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' )
@state = 6
end
2014-10-17 08:59:14 +08:00
else
2014-12-12 14:54:01 +08:00
@state = 5 #未登录
2014-09-24 14:47:53 +08:00
end
2015-10-20 17:27:06 +08:00
@object_id = params [ :object_id ]
2014-10-16 11:55:42 +08:00
respond_to do | format |
2015-10-20 17:27:06 +08:00
format . js #{ render :partial => 'set_join', :locals => {:user => @user, :course => @course, :object_id => params[:object_id]} }
2014-10-16 11:55:42 +08:00
end
2015-10-20 17:27:06 +08:00
2014-09-24 14:47:53 +08:00
end
def unjoin
if User . current . logged?
2014-12-12 14:54:01 +08:00
cs = CoursesService . new
cs . exit_course params , User . current
2014-09-24 14:47:53 +08:00
end
respond_to do | format |
format . js { render :partial = > 'set_join' , :locals = > { :user = > User . current , :course = > Course . find ( params [ :object_id ] ) , :object_id = > params [ :object_id ] } }
end
end
2014-12-04 22:02:10 +08:00
2014-10-16 10:56:13 +08:00
def join_private_courses
respond_to do | format |
format . js
end
end
2014-09-24 14:47:53 +08:00
#更新课程信息
def update
2014-12-12 14:54:01 +08:00
cs = CoursesService . new
2015-03-01 17:31:38 +08:00
c = cs . edit_course params , @course , User . current
@course = c [ :course ]
2014-12-12 14:54:01 +08:00
if @course . errors . full_messages . count < = 0
respond_to do | format |
format . html {
2015-04-10 15:01:33 +08:00
# render :layout => 'base_courses'
2014-12-12 14:54:01 +08:00
flash [ :notice ] = l ( :notice_successful_update )
redirect_to settings_course_url ( @course )
}
format . api { render_api_ok }
end
2014-09-24 14:47:53 +08:00
else
respond_to do | format |
format . html {
2014-10-17 13:51:18 +08:00
settings
2015-04-10 15:01:33 +08:00
redirect_to settings_course_url ( @course )
2014-09-24 14:47:53 +08:00
}
format . api { render_validation_errors ( @course ) }
end
end
end
def new_join
@course = Course . find ( params [ :object_id ] )
2015-06-13 10:55:51 +08:00
respond_to do | format |
format . js
end
2014-09-24 14:47:53 +08:00
end
# 课程搜索
# add by nwb
def search
2015-08-14 16:24:43 +08:00
if params [ :name ] . empty?
courses = Course . visible
@courses = paginateHelper courses , 10
2014-09-24 14:47:53 +08:00
else
2015-08-14 16:24:43 +08:00
courses = Course . visible . where ( " LOWER(name) like '% #{ params [ :name ] . to_s . downcase } %' " )
@courses = paginateHelper courses , 10
2014-09-24 14:47:53 +08:00
end
2015-08-25 18:59:45 +08:00
@name = params [ :name ]
@type = 'courses'
2014-09-24 14:47:53 +08:00
respond_to do | format |
format . html {
render :layout = > 'course_base'
}
format . atom {
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
render_feed ( courses , :title = > " #{ Setting . app_title } : #{ l ( :label_course_latest ) } " )
}
end
2014-12-10 18:26:38 +08:00
rescue Exception = > e
if e . message == 'sumbit empty'
( redirect_to courses_url , :notice = > l ( :label_sumbit_empty ) ; return )
end
2014-09-24 14:47:53 +08:00
end
2014-12-03 19:17:10 +08:00
def searchmembers
2014-12-06 12:34:02 +08:00
@subPage_title = l :label_student_list
2015-03-25 20:38:07 +08:00
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
# @is_remote = true
2014-12-29 20:46:27 +08:00
@score_sort_by = " desc "
2014-12-03 19:17:10 +08:00
q = " #{ params [ :name ] . strip } "
2014-12-09 14:57:10 +08:00
if params [ :incourse ]
2015-03-25 20:38:07 +08:00
results = searchmember_by_name ( student_homework_score ( 0 , 0 , 0 , " desc " ) , q )
2014-12-09 15:16:43 +08:00
elsif params [ :ingroup ]
@group = CourseGroup . find ( params [ :search_group_id ] )
2015-03-25 20:38:07 +08:00
results = searchmember_by_name ( student_homework_score ( @group . id , 0 , 0 , " desc " ) , q )
2014-12-09 14:57:10 +08:00
end
2014-12-26 17:31:01 +08:00
@is_remote = true
2015-04-21 17:54:49 +08:00
#@result_count = results.count
#@results = paginateHelper results, 10
@results = results
2015-02-02 17:01:07 +08:00
@search_name = q
2014-12-03 19:17:10 +08:00
end
def addgroups
2014-12-06 12:34:02 +08:00
@subPage_title = l :label_student_list
2014-12-04 19:09:10 +08:00
if params [ :group_name ]
group = CourseGroup . new
group . name = params [ :group_name ]
group . course_id = @course . id
group . save
end
2015-03-26 11:30:00 +08:00
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
2014-12-05 16:21:53 +08:00
@is_remote = true
2014-12-24 18:31:45 +08:00
2014-12-04 19:09:10 +08:00
@course_groups = @course . course_groups
2014-12-03 19:17:10 +08:00
end
2014-12-08 16:50:20 +08:00
def deletegroup
CourseGroup . delete ( params [ :group_id ] )
@subPage_title = l :label_student_list
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
2014-12-24 18:31:45 +08:00
2014-12-08 16:50:20 +08:00
@course_groups = @course . course_groups
end
2014-12-03 19:17:10 +08:00
def updategroupname
2014-12-06 12:34:02 +08:00
@subPage_title = l :label_student_list
2014-12-04 19:09:10 +08:00
if params [ :group_name ]
group = CourseGroup . find ( params [ :group_id ] )
group . name = params [ :group_name ]
group . save
end
2014-12-05 10:53:43 +08:00
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
2014-12-24 18:31:45 +08:00
2014-12-04 19:09:10 +08:00
@course_groups = @course . course_groups
2014-12-03 19:17:10 +08:00
end
2014-12-19 23:12:32 +08:00
def valid_ajax
req = Hash . new ( false )
req [ :message ] = ''
valid_attr = params [ :valid ]
valid_value = params [ :value ]
2015-03-26 11:30:00 +08:00
group_id = params [ :group_id ]
# faker = CourseGroup.new
2014-12-19 23:12:32 +08:00
if valid_attr . eql? ( 'name' )
2015-03-26 11:30:00 +08:00
course = Course . find params [ :course_id ]
group_names = course . course_groups . map { | group | group . name unless group . id . to_s == group_id } . select { | group | ! group . nil? }
if group_names . include? ( valid_value )
req [ :valid ] = false
req [ :message ] = l ( :modal_valid_unpassing )
else
req [ :valid ] = true
req [ :message ] = l ( :modal_valid_passing )
end
# faker.name = valid_value
# faker.course_id = params[:course_id]
# faker.valid?
# req[:valid] = faker.errors[:name].blank?
# req[:message] = faker.errors[:name]
2014-12-19 23:12:32 +08:00
end
2015-03-26 11:30:00 +08:00
# req[:message] = l(:modal_valid_passing) if req[:message].blank?
2014-12-19 23:12:32 +08:00
render :json = > req
end
2014-12-04 22:02:10 +08:00
def join_group
2014-12-06 12:34:02 +08:00
@subPage_title = l :label_student_list
2014-12-04 22:02:10 +08:00
group = CourseGroup . find ( params [ :object_id ] )
member = Member . where ( :course_id = > @course . id , :user_id = > User . current . id ) . first
member . course_group_id = group . id
member . save
@group = group
2014-12-29 16:57:31 +08:00
2014-12-05 16:44:05 +08:00
@course_groups = @course . course_groups
2014-12-29 16:57:31 +08:00
2014-12-04 22:02:10 +08:00
search_group_members group
end
def unjoin_group
2014-12-06 12:34:02 +08:00
@subPage_title = l :label_student_list
2014-12-04 22:02:10 +08:00
group = CourseGroup . find ( params [ :object_id ] )
member = Member . where ( :course_id = > @course . id , :user_id = > User . current . id ) . first
member . course_group_id = 0
member . save
@group = group
2014-12-05 16:44:05 +08:00
@course_groups = @course . course_groups
2014-12-29 16:57:31 +08:00
2014-12-04 22:02:10 +08:00
search_group_members group
end
2014-12-03 19:17:10 +08:00
def searchgroupmembers
2014-12-06 12:34:02 +08:00
@subPage_title = l :label_student_list
2015-03-26 10:25:54 +08:00
@render_file = 'new_member_list'
2014-12-04 19:09:10 +08:00
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
2014-12-29 20:46:27 +08:00
@score_sort_by = " desc "
2014-12-04 19:09:10 +08:00
if params [ :group_id ] && params [ :group_id ] != " 0 "
@group = CourseGroup . find ( params [ :group_id ] )
2014-12-29 20:46:27 +08:00
@results = student_homework_score ( @group . id , 0 , 0 , " desc " )
2015-07-06 11:12:29 +08:00
# @results = paginateHelper @results, 10
2014-12-04 19:09:10 +08:00
else
2014-12-29 16:57:31 +08:00
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
2014-12-31 08:48:14 +08:00
@results = student_homework_score ( 0 , page_from , 10 , " desc " )
2014-12-04 19:09:10 +08:00
end
2014-12-04 22:02:10 +08:00
end
2014-12-24 18:31:45 +08:00
2014-09-24 14:47:53 +08:00
def member
## 有角色参数的才是课程,没有的就是项目
2014-12-05 14:48:33 +08:00
if ( User . current . admin? || @course . is_public == 1 || ( @course . is_public == 0 && User . current . member_of_course? ( @course ) ) )
2014-12-31 17:02:55 +08:00
2015-03-26 10:25:54 +08:00
@render_file = 'new_member_list'
2014-12-29 20:46:27 +08:00
@score_sort_by = " desc "
2015-03-25 20:13:48 +08:00
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
2014-12-29 16:57:31 +08:00
@role = params [ :role ] . nil? ? '2' :params [ :role ]
@is_remote = true
2014-12-05 14:48:33 +08:00
@course_groups = @course . course_groups if @course . course_groups
2014-12-06 11:00:15 +08:00
@show_serch = params [ :role ] == '2'
2014-12-29 16:57:31 +08:00
case @role
2014-12-05 14:48:33 +08:00
when '1'
@subPage_title = l :label_teacher_list
2014-12-30 17:49:48 +08:00
@all_members = searchTeacherAndAssistant ( @course )
2015-04-21 17:54:49 +08:00
@members = @all_members
2014-12-05 14:48:33 +08:00
when '2'
@subPage_title = l :label_student_list
2014-12-29 16:57:31 +08:00
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
2015-03-25 20:13:48 +08:00
@all_members = student_homework_score ( 0 , page , 10 , " desc " )
2015-04-21 17:54:49 +08:00
@members = @all_members
2014-12-29 16:57:31 +08:00
end
respond_to do | format |
if params [ :page ]
2015-03-30 17:03:20 +08:00
format . html { render :layout = > 'base_courses' }
2014-12-29 16:57:31 +08:00
format . js
2014-12-02 14:41:36 +08:00
else
2014-12-29 16:57:31 +08:00
format . html { render :layout = > 'base_courses' }
end
2014-12-05 14:48:33 +08:00
end
else
render_403
2014-09-24 14:47:53 +08:00
end
2014-12-17 17:36:12 +08:00
end
2014-12-18 18:24:37 +08:00
2014-12-30 17:49:48 +08:00
def export_course_member_excel
@all_members = student_homework_score ( 0 , 0 , 0 , " desc " )
2015-05-19 15:23:13 +08:00
filename = " #{ @course . teacher . lastname . to_s + @course . teacher . firstname . to_s } _ #{ @course . name } _ #{ @course . time . to_s + @course . term } #{ l ( :excel_member_list ) } " ;
2015-06-15 11:15:19 +08:00
# 如果是ie 需要转码
if ( / trident / . match ( request . env [ " HTTP_USER_AGENT " ] ) != nil )
2015-05-19 15:23:13 +08:00
filename = URI :: encode ( filename )
end
2014-12-30 17:49:48 +08:00
respond_to do | format |
format . xls {
send_data ( member_to_xls ( @all_members , @course . course_groups ) , :type = > " text/excel;charset=utf-8; header=present " ,
2015-05-19 15:23:13 +08:00
:filename = > " #{ filename } .xls " )
2014-12-30 17:49:48 +08:00
}
end
end
2014-12-18 18:24:37 +08:00
def member_score_sort
2014-12-29 20:46:27 +08:00
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@subPage_title = l :label_student_list
2015-03-26 10:25:54 +08:00
@render_file = 'new_member_list'
2014-12-29 20:46:27 +08:00
@is_remote = true
@score_sort_by = params [ :sort_by ] if params [ :sort_by ]
2015-02-02 17:01:07 +08:00
@search_name = params [ :search_name ] if params [ :search_name ]
2014-12-29 20:46:27 +08:00
group_id = params [ :group_id ]
2015-02-02 17:01:07 +08:00
if ! @search_name . nil?
if group_id == '0'
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
@results = searchmember_by_name ( student_homework_score ( 0 , 0 , 0 , @score_sort_by ) , @search_name )
@result_count = @results . count
2015-07-06 11:12:29 +08:00
# @results = paginateHelper @results, 10
2015-02-02 17:01:07 +08:00
else
@group = CourseGroup . find ( group_id )
@results = searchmember_by_name ( student_homework_score ( group_id , 0 , 0 , @score_sort_by ) , @search_name )
@result_count = @results . count
2015-07-06 11:12:29 +08:00
# @results = paginateHelper @results, 10
2015-02-02 17:01:07 +08:00
end
2014-12-29 20:46:27 +08:00
else
2015-02-02 17:01:07 +08:00
if group_id == '0'
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
@results = student_homework_score ( 0 , page , 10 , @score_sort_by )
else
@group = CourseGroup . find ( group_id )
@results = student_homework_score ( group_id , 0 , 0 , @score_sort_by )
end
2014-12-29 20:46:27 +08:00
end
2014-12-18 18:24:37 +08:00
end
2014-12-17 17:36:12 +08:00
# 显示每个学生的作业评分详情
def show_member_score
@member_score = Member . find ( params [ :member_id ] ) if params [ :member_id ]
respond_to do | format |
format . html { render :layout = > 'course_base' }
format . js
2014-09-24 14:47:53 +08:00
end
end
def handle_course courses , activities
course_activity_count_array = activities . values ( )
course_array = [ ]
i = 0 ;
courses . each do | course |
course_array [ i ] = course
i = i + 1
end
courses = desc_sort_course_by_avtivity ( course_activity_count_array , course_array )
return courses
end
def settings
2014-10-08 15:06:29 +08:00
if User . current . allowed_to? ( :as_teacher , @course )
@issue_custom_fields = IssueCustomField . sorted . all
@issue_category || = IssueCategory . new
@member || = @course . members . new
@trackers = Tracker . sorted . all
2015-03-30 11:20:16 +08:00
@roles = Role . givable . all [ 3 .. 5 ]
@members = @course . member_principals . includes ( :roles , :principal ) . all . sort
2015-04-10 15:01:33 +08:00
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . api { render_validation_errors ( @course ) }
end
2014-10-08 15:06:29 +08:00
else
render_403
end
2014-09-24 14:47:53 +08:00
end
2015-04-16 17:28:08 +08:00
def search_member
2015-04-17 11:48:47 +08:00
if User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin
q = " #{ params [ :name ] . strip } "
2015-04-16 17:28:08 +08:00
@roles = Role . givable . all [ 3 .. 5 ]
if q . nil? || q == " "
@members = @course . member_principals . includes ( :roles , :principal ) . all . sort
else
@members = searchmember_by_name ( @course . member_principals . includes ( :roles , :principal ) . all . sort , q )
end
else
render_403
end
end
2014-09-24 14:47:53 +08:00
def create
2014-12-11 17:11:05 +08:00
cs = CoursesService . new
2015-03-02 14:33:35 +08:00
@course = cs . create_course ( params , User . current ) [ :course ]
2015-07-01 10:02:50 +08:00
if @course
2014-12-11 17:11:05 +08:00
respond_to do | format |
2015-07-01 10:02:50 +08:00
flash [ :notice ] = l ( :notice_successful_create )
format . html { redirect_to settings_course_url ( @course , :course_type = > 1 ) }
format . api { render :action = > 'show' , :status = > :created , :location = > url_for ( :controller = > 'courses' , :action = > 'show' , :id = > @course . id ) }
2014-12-11 17:11:05 +08:00
end
else
respond_to do | format |
2015-07-01 10:02:50 +08:00
flash [ :notice ] = l ( :notice_create_failed )
# @course = Course.new
format . html { redirect_to new_course_path } #Added by young
format . api { render_validation_errors ( @course ) }
end
2014-12-11 17:11:05 +08:00
end
2014-09-24 14:47:53 +08:00
end
2015-01-17 15:21:18 +08:00
def course
2014-09-24 14:47:53 +08:00
@school_id = params [ :school_id ]
per_page_option = 10
if @school_id == " 0 " or @school_id . nil?
@courses_all = Course . active . visible .
2014-12-31 17:02:55 +08:00
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " )
2014-09-24 14:47:53 +08:00
else
@courses_all = Course . active . visible .
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " ) .
joins ( :course_extra ) .
where ( " #{ Course . table_name } .school_id = ? " , @school_id )
end
@course_count = @courses_all . count
@course_pages = Paginator . new @course_count , per_page_option , params [ 'page' ]
@course_activity_count = Hash . new
@courses_all . each do | course |
@course_activity_count [ course . id ] = 0
end
case params [ :course_sort_type ]
when '0'
@courses = @courses_all . order ( " created_on desc " )
@s_type = 0
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
when '1'
@courses = @courses_all . order ( " course_ac_para desc " )
@s_type = 1
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
when '2'
@courses = @courses_all . order ( " watchers_count desc " )
@s_type = 2
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
when '3'
@course_activity_count = get_course_activity @courses_all , @course_activity_count
@courses = handle_course @courses_all , @course_activity_count
@s_type = 3
@courses = @courses [ @course_pages . offset , @course_pages . per_page ]
else
@s_type = 0
@courses = @courses_all . order ( " created_on desc " )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
end
respond_to do | format |
format . html {
2015-04-16 10:49:58 +08:00
render :layout = > 'new_base'
2014-09-24 14:47:53 +08:00
}
format . api {
}
format . atom {
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
render_feed ( courses , :title = > " #{ Setting . app_title } : #{ l ( :label_course_latest ) } " )
}
end
end
def new
2015-09-11 11:40:07 +08:00
if User . current . login?
@course_type = params [ :course_type ] || = params [ :course ]
@issue_custom_fields = IssueCustomField . sorted . all
@trackers = Tracker . sorted . all
@course = Course . new
@course . safe_attributes = params [ :course ]
# month = Time.now.month
render :layout = > 'new_base'
else
redirect_to signin_url
end
2014-09-24 14:47:53 +08:00
end
def desc_sort_course_by_avtivity ( activity_count , courses )
return courses if activity_count . size < 2
( activity_count . size - 2 ) . downto ( 0 ) do | i |
( 0 .. i ) . each do | j |
if activity_count [ j ] < activity_count [ j + 1 ]
courses [ j ] , courses [ j + 1 ] = courses [ j + 1 ] , courses [ j ]
activity_count [ j ] , activity_count [ j + 1 ] = activity_count [ j + 1 ] , activity_count [ j ]
end
end
end
return courses
end
def index
2015-01-27 15:29:09 +08:00
if ! User . current . admin?
render_404
return
end
2014-09-24 14:47:53 +08:00
@course_type = params [ :course_type ]
@school_id = params [ :school_id ]
per_page_option = 10
2014-10-21 15:33:48 +08:00
if @school_id == " 0 " || @school_id . nil?
2014-09-24 14:47:53 +08:00
@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 = Paginator . new @course_count , per_page_option , params [ 'page' ]
@course_activity_count = Hash . new
@courses_all . each do | course |
@course_activity_count [ course . id ] = 0
end
case params [ :course_sort_type ]
when '0'
@courses = @courses_all . order ( " created_at desc " )
@s_type = 0
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
2014-10-21 15:33:48 +08:00
@course_activity_count = get_course_activity @courses , @course_activity_count
2014-09-24 14:47:53 +08:00
when '1'
@courses = @courses_all . order ( " course_ac_para desc " )
@s_type = 1
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
when '2'
@courses = @courses_all . order ( " watchers_count desc " )
@s_type = 2
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
when '3'
@course_activity_count = get_course_activity @courses_all , @course_activity_count
@courses = handle_course @courses_all , @course_activity_count
@s_type = 3
@courses = @courses [ @course_pages . offset , @course_pages . per_page ]
else
@s_type = 0
@courses = @courses_all . order ( " created_at desc " )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@course_activity_count = get_course_activity @courses , @course_activity_count
end
respond_to do | format |
format . html {
2015-01-27 15:29:09 +08:00
render :layout = > 'base'
2014-09-24 14:47:53 +08:00
}
format . atom {
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
render_feed ( courses , :title = > " #{ Setting . app_title } : #{ l ( :label_course_latest ) } " )
}
end
end
def toggleCourse
@course_prefs = Course . find_by_extra ( @course . extra )
2015-07-24 14:36:53 +08:00
unless ( User . current . allowed_to? ( :as_teacher , @course_prefs ) || User . current . admin? )
2014-09-24 14:47:53 +08:00
render_403
end
end
def get_courses
@user = User . current
membership = @user . coursememberships . all
membership . sort! { | older , newer | newer . created_on < = > older . created_on }
@memberships = [ ]
membership . collect { | e |
@memberships . push ( e )
}
@memberships_doing = [ ]
@memberships_done = [ ]
now_time = Time . now . year
@memberships . map { | e |
end_time = e . course . get_time . year
isDone = course_endTime_timeout? ( e . course )
if isDone
@memberships_done . push e
else
@memberships_doing . push e
end
}
end
def finishcourse
yesterday = Date . today . prev_day . to_time
@course_prefs . endup_time = yesterday
@save_flag = @course_prefs . save
get_courses
respond_to do | format |
format . js
end
end
def restartcourse
day = Time . parse ( " 3000-01-01 " )
@course_prefs . endup_time = day
@save_flag = @course_prefs . save
get_courses
respond_to do | format |
format . js {
render action : 'finishcourse'
}
end
end
2015-09-24 16:30:14 +08:00
def course_activity
redirect_to course_url ( @course , type : params [ :type ] , page : params [ :page ] )
end
2014-09-24 14:47:53 +08:00
def show
2015-10-19 15:45:24 +08:00
#更新创建课程消息状态
create_course_messages = @course . course_messages . where ( " user_id =? and course_message_type =? and course_id =? and viewed =? " , User . current . id , 'Course' , @course . id , 0 )
create_course_messages . update_all ( :viewed = > true )
2015-09-24 16:30:14 +08:00
course_activities = @course . course_activities
2015-08-12 16:24:27 +08:00
@canShowRealName = User . current . member_of_course? @course
2015-09-24 16:30:14 +08:00
@page = params [ :page ] ? params [ :page ] . to_i + 1 : 0
if params [ :type ] . present?
case params [ :type ]
when " homework "
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . where ( " course_act_type = 'HomeworkCommon' " ) . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
when " news "
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . where ( " course_act_type = 'News' " ) . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
when " message "
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . where ( " course_act_type = 'Message' " ) . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
when " poll "
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . where ( " course_act_type = 'Poll' " ) . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
when " attachment "
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . where ( " course_act_type = 'Attachment' " ) . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
when " journalsForMessage "
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . where ( " course_act_type = 'JournalsForMessage' " ) . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
else
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
end
else
2015-09-25 16:29:47 +08:00
@course_activities = course_activities . order ( 'updated_at desc' ) . limit ( 10 ) . offset ( @page * 10 )
2015-09-24 16:30:14 +08:00
end
@type = params [ :type ]
2014-09-24 14:47:53 +08:00
respond_to do | format |
2015-09-24 16:30:14 +08:00
format . js
2014-09-24 14:47:53 +08:00
format . html { render :layout = > 'base_courses' }
format . api
end
end
#判断指定用户是否为课程教师
def isCourseTeacher ( id , course )
result = false
user = User . find ( id )
2014-09-29 16:49:47 +08:00
if ! user . nil? && user . allowed_to? ( :as_teacher , course )
2014-09-24 14:47:53 +08:00
result = true
end
result
end
def feedback
2015-09-16 12:38:01 +08:00
@course . journals_for_messages . each do | messages |
query = messages . course_messages . where ( " user_id = ? " , User . current . id )
query . update_all ( :viewed = > true ) ;
end
2014-12-05 14:48:33 +08:00
if ( User . current . admin? || @course . is_public == 1 || ( @course . is_public == 0 && User . current . member_of_course? ( @course ) ) )
page = params [ :page ]
# Find the page of the requested reply
@jours = @course . journals_for_messages . where ( 'm_parent_id IS NULL' ) . order ( 'created_on DESC' )
@limit = 10
if params [ :r ] && page . nil?
offset = @jours . count ( :conditions = > [ " #{ JournalsForMessage . table_name } .id > ? " , params [ :r ] . to_i ] )
page = 1 + offset / @limit
end
@jour = paginateHelper @jours , 10
@state = false
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . api
end
else
render_403
2014-09-24 14:47:53 +08:00
end
end
2015-02-09 10:28:33 +08:00
#根据已有课程复制课程
#param id:已有课程ID
def copy_course
if @course
@new_course = Course . new @course . attributes
@new_course . tea_id = User . current . id
@new_course . created_at = DateTime . now
@new_course . updated_at = DateTime . now
@new_course . endup_time = nil
if @new_course . save
r = Role . givable . find_by_id ( Setting . new_project_user_role_id . to_i ) || Role . givable . first
m = Member . new ( :user = > User . current , :roles = > [ r ] )
m . project_id = - 1
course = CourseInfos . new ( :user_id = > User . current . id , :course_id = > @new_course . id )
#user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
if @new_course . is_public == 1
course_status = CourseStatus . create ( :course_id = > @new_course . id , :watchers_count = > 0 , :changesets_count = > 0 , :grade = > 0 , :course_type = > 1 )
end
@new_course . members << m
@new_course . course_infos << course
redirect_to settings_course_url @new_course
end
else
render_404
end
end
2014-09-24 14:47:53 +08:00
2015-07-23 16:17:13 +08:00
#删除课程
#删除课程只是将课程的is_delete状态改为false, is_delete为false状态的课程只有管理员可以看到
def destroy
end
2014-09-24 14:47:53 +08:00
private
2014-10-21 08:55:55 +08:00
def allow_join course
if course_endTime_timeout? course
2014-09-24 14:47:53 +08:00
respond_to do | format |
format . js {
@state = 2
render :partial = > 'set_join' ,
:locals = > { :user = > User . current ,
:course = > Course . find ( params [ :object_id ] ) ,
:object_id = > params [ :object_id ]
}
}
end
end
end
#验证是否显示课程
def can_show_course
2014-10-16 11:09:45 +08:00
@first_page = FirstPage . find_by_page_type ( 'project' )
2015-05-15 13:39:26 +08:00
if @first_page . try ( :show_course ) == 2
2014-09-24 14:47:53 +08:00
render_404
end
end
2014-12-17 17:36:12 +08:00
2014-12-29 20:46:27 +08:00
def student_homework_score ( groupid , start_from , nums , score_sort_by )
2014-12-29 16:57:31 +08:00
start_from = start_from * nums
2014-12-31 08:48:14 +08:00
sql_select = " "
if groupid == 0
2015-06-02 16:22:15 +08:00
sql_select = " SELECT members.*,(
2015-07-10 17:51:45 +08:00
SELECT SUM ( student_works . final_score )
2015-06-02 16:22:15 +08:00
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
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 score #{score_sort_by}"
2014-12-31 08:48:14 +08:00
else
2015-06-02 16:22:15 +08:00
sql_select = " SELECT members.*,(
2015-07-10 17:51:45 +08:00
SELECT SUM ( student_works . final_score )
2015-06-02 16:22:15 +08:00
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
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 score #{score_sort_by}"
2014-12-31 08:48:14 +08:00
end
2014-12-26 14:50:14 +08:00
sql = ActiveRecord :: Base . connection ( )
2014-12-31 08:48:14 +08:00
homework_scores = Member . find_by_sql ( sql_select )
2014-12-26 14:50:14 +08:00
sql . close ( )
2014-12-31 08:48:14 +08:00
2014-12-24 18:31:45 +08:00
homework_scores
2014-12-22 10:31:09 +08:00
end
#获取课程的老师列表
def find_course_teachers course
searchTeacherAndAssistant ( course ) . map { | teacher | teacher . user_id } . join ( " , " )
end
2014-12-24 18:31:45 +08:00
#当加入,退出分班时查询分班的学生
def search_group_members group
@subPage_title = l :label_student_list
2015-03-26 10:25:54 +08:00
@render_file = 'new_member_list'
2014-12-24 18:31:45 +08:00
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
2014-12-29 20:46:27 +08:00
@score_sort_by = " desc "
2014-12-29 16:57:31 +08:00
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
2014-12-29 20:46:27 +08:00
@results = student_homework_score ( group . id , 0 , 0 , " desc " )
2014-12-29 16:57:31 +08:00
2014-12-24 18:31:45 +08:00
end
2014-12-30 17:49:48 +08:00
def member_to_xls members , groups
xls_report = StringIO . new
book = Spreadsheet :: Workbook . new
sheet1 = book . create_worksheet :name = > " student "
blue = Spreadsheet :: Format . new :color = > :blue , :weight = > :bold , :size = > 10
sheet1 . row ( 0 ) . default_format = blue
sheet1 . row ( 0 ) . concat ( [ l ( :excel_user_id ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_mail ) , l ( :excel_homework_score ) ] )
count_row = 1
group0 = CourseGroup . new ( ) ;
group0 . id = 0 ;
group0 . name = l ( :excel_member_with_out_class )
groups_dup = groups . dup
groups_dup << group0
groups_dup . each do | group |
sheet1 [ count_row , 0 ] = l ( :excel_class )
sheet1 [ count_row , 1 ] = group . name
count_row += 1
members . each do | member |
if member . course_group_id == group . id
sheet1 [ count_row , 0 ] = member . user . id
sheet1 [ count_row , 1 ] = member . user . lastname . to_s + member . user . firstname . to_s
sheet1 [ count_row , 2 ] = member . user . login
sheet1 [ count_row , 3 ] = member . user . user_extensions . student_id
sheet1 [ count_row , 4 ] = member . user . mail
2014-12-31 09:48:17 +08:00
sheet1 [ count_row , 5 ] = format ( " %0.2f " , member . score . nil? ? 0 :member . score . to_s )
2014-12-30 17:49:48 +08:00
count_row += 1
end
end
end
book . write xls_report
xls_report . string
end
2014-12-31 17:02:55 +08:00
2014-09-24 14:47:53 +08:00
end