@ -1,13 +1,18 @@
class CoursesController < ApplicationController
class CoursesController < ApplicationController
layout 'base_courses'
# layout 'base_courses'
include CoursesHelper
include CoursesHelper
include ActivitiesHelper
helper :activities
helper :activities
helper :members
helper :members
helper :words
helper :words
helper :attachments
helper :activity_notifys
before_filter :auth_login1 , :only = > [ :show , :feedback ]
menu_item :overview
menu_item :overview
menu_item :feedback , :only = > :feedback
menu_item :feedback , :only = > :feedback
menu_item :homework , :only = > :homework
menu_item :homework , :only = > :homework
menu_item :new_homework , :only = > :new_homework
menu_item :new_homework , :only = > :new_homework
menu_item l ( :label_sort_by_time ) , :only = > :index
menu_item l ( :label_sort_by_time ) , :only = > :index
@ -15,6 +20,7 @@ class CoursesController < ApplicationController
menu_item l ( :label_sort_by_influence ) , :only = > :index
menu_item l ( :label_sort_by_influence ) , :only = > :index
before_filter :can_show_course , :except = > [ ]
before_filter :can_show_course , :except = > [ ]
before_filter :logged_user_by_apptoken , :only = > [ :show , :new_homework , :feedback ]
before_filter :find_course , :except = > [ :index , :search , :list , :new , :join , :unjoin , :create , :copy , :statistics , :new_join , :course , :enterprise_course , :course_enterprise , :view_homework_attaches , :join_private_courses ]
before_filter :find_course , :except = > [ :index , :search , :list , :new , :join , :unjoin , :create , :copy , :statistics , :new_join , :course , :enterprise_course , :course_enterprise , :view_homework_attaches , :join_private_courses ]
before_filter :authorize_course , :only = > [ :show , :settings , :edit , :update , :modules , :close , :reopen , :view_homework_attaches , :course ]
before_filter :authorize_course , :only = > [ :show , :settings , :edit , :update , :modules , :close , :reopen , :view_homework_attaches , :course ]
before_filter :authorize_course_global , :only = > [ :view_homework_attaches , :new , :create ]
before_filter :authorize_course_global , :only = > [ :view_homework_attaches , :new , :create ]
@ -26,61 +32,35 @@ class CoursesController < ApplicationController
def join
def join
if User . current . logged?
if User . current . logged?
course = Course . find_by_id params [ :object_id ]
cs = CoursesService . new
if course
user = User . current
if course_endTime_timeout? course
join = cs . join_course params , user
@state = 2
@state = join [ :state ]
else
course = join [ :course ]
if User . current . member_of_course? ( course )
@state = 3
else
if params [ :course_password ] == course . password
members = [ ]
members << Member . new ( :role_ids = > [ 10 ] , :user_id = > User . current . id )
course . members << members
StudentsForCourse . create ( :student_id = > User . current . id , :course_id = > params [ :object_id ] )
@state = 0
else
@state = 1
end
end
end
else
@state = 4
end
else
else
@state = 5
@state = 5 #未登录
end
end
respond_to do | format |
respond_to do | format |
format . js { render :partial = > 'set_join' , :locals = > { :user = > User . current , :course = > course , :object_id = > params [ :object_id ] } }
format . js { render :partial = > 'set_join' , :locals = > { :user = > user , :course = > course , :object_id = > params [ :object_id ] } }
end
end
rescue Exception = > e
rescue Exception = > e
@state = 4
@state = 4 #已经加入了课程
respond_to do | format |
respond_to do | format |
# format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
format . js { render :partial = > 'set_join' , :locals = > { :user = > User . current , :course = > nil , :object_id = > nil } }
format . js { render :partial = > 'set_join' , :locals = > { :user = > User . current , :course = > nil , :object_id = > nil } }
end
end
end
end
def unjoin
def unjoin
if User . current . logged?
if User . current . logged?
cs = CoursesService . new
@member = Member . where ( 'course_id = ? and user_id = ?' , params [ :object_id ] , User . current . id )
cs . exit_course params , User . current
@member . first . destroy
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , User . current . id , params [ :object_id ] )
joined . each do | join |
join . delete
end
end
end
respond_to do | format |
respond_to do | format |
# format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
format . js { render :partial = > 'set_join' , :locals = > { :user = > User . current , :course = > Course . find ( params [ :object_id ] ) , :object_id = > params [ :object_id ] } }
format . js { render :partial = > 'set_join' , :locals = > { :user = > User . current , :course = > Course . find ( params [ :object_id ] ) , :object_id = > params [ :object_id ] } }
end
end
end
end
def join_private_courses
def join_private_courses
respond_to do | format |
respond_to do | format |
format . js
format . js
@ -89,32 +69,23 @@ class CoursesController < ApplicationController
#更新课程信息
#更新课程信息
def update
def update
@course . safe_attributes = params [ :course ]
cs = CoursesService . new
@course . time = params [ :time ]
c = cs . edit_course params , @course , User . current
@course . term = params [ :term ]
@course = c [ :course ]
@course . class_period = params [ :class_period ]
if @course . errors . full_messages . count < = 0
if @course . save
respond_to do | format |
if params [ :course ] [ :is_public ] == '0'
format . html {
course_status = CourseStatus . find_by_course_id ( @course . id )
# render :layout => 'base_courses'
course_status . destroy if course_status
flash [ :notice ] = l ( :notice_successful_update )
elsif params [ :course ] [ :is_public ] == '1'
redirect_to settings_course_url ( @course )
course_status = CourseStatus . find_by_course_id ( @course . id )
}
course_status . destroy if course_status
format . api { render_api_ok }
course_status = CourseStatus . create ( :course_id = > @course . id , :grade = > 0 )
end
end
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_update )
redirect_to settings_course_url ( @course )
}
format . api { render_api_ok }
end
else
else
respond_to do | format |
respond_to do | format |
format . html {
format . html {
settings
settings
re nder :action = > 'settings'
redirect_to settings_course_url ( @course )
}
}
format . api { render_validation_errors ( @course ) }
format . api { render_validation_errors ( @course ) }
end
end
@ -123,6 +94,9 @@ class CoursesController < ApplicationController
def new_join
def new_join
@course = Course . find ( params [ :object_id ] )
@course = Course . find ( params [ :object_id ] )
respond_to do | format |
format . js
end
end
end
# 课程搜索
# 课程搜索
@ -130,7 +104,6 @@ class CoursesController < ApplicationController
def search
def search
courses_all = Course . all_course
courses_all = Course . all_course
name = params [ :name ]
name = params [ :name ]
#(redirect_to courses_url, :notice => l(:label_sumbit_empty);return) if name.blank?
if name . blank?
if name . blank?
@courses = [ ]
@courses = [ ]
@courses_all = [ ]
@courses_all = [ ]
@ -203,27 +176,30 @@ class CoursesController < ApplicationController
render_feed ( courses , :title = > " #{ Setting . app_title } : #{ l ( :label_course_latest ) } " )
render_feed ( courses , :title = > " #{ Setting . app_title } : #{ l ( :label_course_latest ) } " )
}
}
end
end
rescue Exception = > e
if e . message == 'sumbit empty'
( redirect_to courses_url , :notice = > l ( :label_sumbit_empty ) ; return )
end
end
end
def searchmembers
def searchmembers
@subPage_title = l :label_student_list
@subPage_title = l :label_student_list
@render_file = 'member_list'
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
# @is_remote = true
@is_remote = true
@score_sort_by = " desc "
@score_sort_by = " desc "
q = " #{ params [ :name ] . strip } "
q = " #{ params [ :name ] . strip } "
#(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
if params [ :incourse ]
if params [ :incourse ]
@results = searchmember_by_name ( student_homework_score ( 0 , 0 , 0 , " desc " ) , q )
results = searchmember_by_name ( student_homework_score ( 0 , 0 , 0 , " desc " ) , q )
elsif params [ :ingroup ]
elsif params [ :ingroup ]
@group = CourseGroup . find ( params [ :search_group_id ] )
@group = CourseGroup . find ( params [ :search_group_id ] )
@ results = searchmember_by_name ( student_homework_score ( @group . id , 0 , 0 , " desc " ) , q )
results = searchmember_by_name ( student_homework_score ( @group . id , 0 , 0 , " desc " ) , q )
end
end
@is_remote = true
@is_remote = true
@result_count = @results . count
#@result_count = results.count
@results = paginateHelper @results
#@results = paginateHelper results, 10
@results = results
@search_name = q
end
end
def addgroups
def addgroups
@ -234,7 +210,7 @@ class CoursesController < ApplicationController
group . course_id = @course . id
group . course_id = @course . id
group . save
group . save
end
end
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
@is_remote = true
@is_remote = true
@course_groups = @course . course_groups
@course_groups = @course . course_groups
@ -268,16 +244,26 @@ class CoursesController < ApplicationController
valid_attr = params [ :valid ]
valid_attr = params [ :valid ]
valid_value = params [ :value ]
valid_value = params [ :value ]
group_id = params [ :group_id ]
faker = CourseGroup . new
# faker = CourseGroup. new
if valid_attr . eql? ( 'name' )
if valid_attr . eql? ( 'name' )
faker . name = valid_value
course = Course . find params [ :course_id ]
faker . valid?
group_names = course . course_groups . map { | group | group . name unless group . id . to_s == group_id } . select { | group | ! group . nil? }
req [ :valid ] = faker . errors [ :name ] . blank?
if group_names . include? ( valid_value )
req [ :message ] = faker . errors [ :name ]
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]
end
end
req [ :message ] = l ( :modal_valid_passing ) if req [ :message ] . blank?
# req[:message] = l(:modal_valid_passing) if req[:message]. blank?
render :json = > req
render :json = > req
end
end
def join_group
def join_group
@ -305,35 +291,27 @@ class CoursesController < ApplicationController
end
end
def searchgroupmembers
def searchgroupmembers
@subPage_title = l :label_student_list
@subPage_title = l :label_student_list
@render_file = ' member_list'
@render_file = ' new_ member_list'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
@is_remote = true
@score_sort_by = " desc "
@score_sort_by = " desc "
if params [ :group_id ] && params [ :group_id ] != " 0 "
if params [ :group_id ] && params [ :group_id ] != " 0 "
@group = CourseGroup . find ( params [ :group_id ] )
@group = CourseGroup . find ( params [ :group_id ] )
@results = student_homework_score ( @group . id , 0 , 0 , " desc " )
@results = student_homework_score ( @group . id , 0 , 0 , " desc " )
@results = paginateHelper @results , 10
@results = paginateHelper @results , 10
else
else
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
@results = student_homework_score ( 0 , page_from , 10 , " desc " )
@results = student_homework_score ( 0 , page_from , 10 , " desc " )
@results = paginateHelper_for_members @results , 10
end
end
end
end
def member
def member
## 有角色参数的才是课程,没有的就是项目
## 有角色参数的才是课程,没有的就是项目
if ( User . current . admin? || @course . is_public == 1 || ( @course . is_public == 0 && User . current . member_of_course? ( @course ) ) )
if ( User . current . admin? || @course . is_public == 1 || ( @course . is_public == 0 && User . current . member_of_course? ( @course ) ) )
@render_file = ' member_list'
@render_file = ' new_ member_list'
@score_sort_by = " desc "
@score_sort_by = " desc "
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
@role = params [ :role ] . nil? ? '2' :params [ :role ]
@role = params [ :role ] . nil? ? '2' :params [ :role ]
@is_remote = true
@is_remote = true
@course_groups = @course . course_groups if @course . course_groups
@course_groups = @course . course_groups if @course . course_groups
@ -342,95 +320,89 @@ class CoursesController < ApplicationController
when '1'
when '1'
@subPage_title = l :label_teacher_list
@subPage_title = l :label_teacher_list
@all_members = searchTeacherAndAssistant ( @course )
@all_members = searchTeacherAndAssistant ( @course )
@members = paginateHelper @all_members , 10
@members = @all_members
when '2'
when '2'
@subPage_title = l :label_student_list
@subPage_title = l :label_student_list
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
@all_members = student_homework_score ( 0 , page , 10 , " desc " )
@all_members = student_homework_score ( 0 , page , 10 , " desc " )
@members = @all_members
@members = paginateHelper_for_members @all_members , 10
end
end
respond_to do | format |
respond_to do | format |
if params [ :page ]
if params [ :page ]
format . html { render :layout = > 'base_courses' }
format . js
format . js
else
else
format . html { render :layout = > 'base_courses' }
format . html { render :layout = > 'base_courses' }
end
end
end
end
# render :layout => 'base_courses'
else
else
render_403
render_403
end
end
end
end
def export_course_member_excel
def export_course_member_excel
@all_members = student_homework_score ( 0 , 0 , 0 , " desc " )
@all_members = student_homework_score ( 0 , 0 , 0 , " desc " )
filename = " #{ @course . teacher . lastname . to_s + @course . teacher . firstname . to_s } _ #{ @course . name } _ #{ @course . time . to_s + @course . term } #{ l ( :excel_member_list ) } " ;
# 如果是ie 需要转码
if ( / trident / . match ( request . env [ " HTTP_USER_AGENT " ] ) != nil )
filename = URI :: encode ( filename )
end
respond_to do | format |
respond_to do | format |
format . xls {
format . xls {
send_data ( member_to_xls ( @all_members , @course . course_groups ) , :type = > " text/excel;charset=utf-8; header=present " ,
send_data ( member_to_xls ( @all_members , @course . course_groups ) , :type = > " text/excel;charset=utf-8; header=present " ,
:filename = > " #{ @course . teacher . lastname . to_s + @course . teacher . firstname . to_s } _ #{ @course . name } _ #{ @course . time . to_s + @course . term } #{ l ( :excel_member_list ) } .xls " )
:filename = > " #{ filename } .xls " )
}
}
end
end
end
end
def member_score_sort
def member_score_sort
# @teachers= searchTeacherAndAssistant(@course)
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
# @role = params[:role]
# @course_groups = @course.course_groups if @course.course_groups
# @show_serch = params[:role] == '2'
@subPage_title = l :label_student_list
@subPage_title = l :label_student_list
@render_file = 'member_list'
@render_file = 'new_member_list'
# @results = params[:result] if params[:result]
# unless @result.nil?
# @results = @result.reverse
#
# end
# @results = paginateHelper @results@score_sort_by = "desc"
@is_remote = true
@is_remote = true
@score_sort_by = params [ :sort_by ] if params [ :sort_by ]
@score_sort_by = params [ :sort_by ] if params [ :sort_by ]
@search_name = params [ :search_name ] if params [ :search_name ]
group_id = params [ :group_id ]
group_id = params [ :group_id ]
if group_id == '0'
if ! @search_name . nil?
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
if group_id == '0'
@results = student_homework_score ( 0 , page , 10 , @score_sort_by )
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 )
@results = paginateHelper_for_members @results , 10
@result_count = @results . count
@results = paginateHelper @results , 10
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
@results = paginateHelper @results , 10
end
else
else
@group = CourseGroup . find ( group_id )
if group_id == '0'
@results = student_homework_score ( group_id , 0 , 0 , @score_sort_by )
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
@results = paginateHelper @results , 10
@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
end
end
end
end
# 显示每个学生的作业评分详情
# 显示每个学生的作业评分详情
def show_member_score
def show_member_score
@member_score = Member . find ( params [ :member_id ] ) if params [ :member_id ]
@member_score = Member . find ( params [ :member_id ] ) if params [ :member_id ]
respond_to do | format |
respond_to do | format |
format . html { render :layout = > 'course_base' }
format . html { render :layout = > 'course_base' }
format . js
format . js
end
end
end
end
def handle_course courses , activities
def handle_course courses , activities
course_activity_count_array = activities . values ( )
course_activity_count_array = activities . values ( )
course_array = [ ]
course_array = [ ]
i = 0 ;
i = 0 ;
courses . each do | course |
courses . each do | course |
course_array [ i ] = course
course_array [ i ] = course
i = i + 1
i = i + 1
end
end
courses = desc_sort_course_by_avtivity ( course_activity_count_array , course_array )
courses = desc_sort_course_by_avtivity ( course_activity_count_array , course_array )
return courses
return courses
end
end
@ -440,68 +412,54 @@ class CoursesController < ApplicationController
@issue_category || = IssueCategory . new
@issue_category || = IssueCategory . new
@member || = @course . members . new
@member || = @course . members . new
@trackers = Tracker . sorted . all
@trackers = Tracker . sorted . all
@roles = Role . givable . all [ 3 .. 5 ]
@members = @course . member_principals . includes ( :roles , :principal ) . all . sort
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . api { render_validation_errors ( @course ) }
end
else
else
render_403
render_403
end
end
end
end
def create
def search_member
if User . current . user_extensions . identity
if User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin
@course = Course . new
q = " #{ params [ :name ] . strip } "
@course . extra = 'course' + DateTime . parse ( Time . now . to_s ) . strftime ( '%Y-%m-%d_%H-%M-%S' ) . to_s
@roles = Role . givable . all [ 3 .. 5 ]
@course . safe_attributes = params [ :course ]
if q . nil? || q == " "
@course . tea_id = User . current . id
@members = @course . member_principals . includes ( :roles , :principal ) . all . sort
# added by bai
else
@course . term = params [ :term ]
@members = searchmember_by_name ( @course . member_principals . includes ( :roles , :principal ) . all . sort , q )
@course . time = params [ :time ]
end
#@course.school_id = params[:occupation]
@course . school_id = User . current . user_extensions . school_id
@course . setup_time = params [ :setup_time ]
@course . endup_time = params [ :endup_time ]
@course . class_period = params [ :class_period ]
end
@issue_custom_fields = IssueCustomField . sorted . all
else
@trackers = Tracker . sorted . all
render_403
end
end
if @course . save
def create
#unless User.current.admin?
cs = CoursesService . new
r = Role . givable . find_by_id ( Setting . new_project_user_role_id . to_i ) || Role . givable . first
@course = cs . create_course ( params , User . current ) [ :course ]
m = Member . new ( :user = > User . current , :roles = > [ r ] )
if @course
m . project_id = - 1
respond_to do | format |
course = CourseInfos . new ( :user_id = > User . current . id , :course_id = > @course . id )
flash [ :notice ] = l ( :notice_successful_create )
#user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
format . html { redirect_to settings_course_url ( @course , :course_type = > 1 ) }
if params [ :course ] [ :is_public ] == '1'
format . api { render :action = > 'show' , :status = > :created , :location = > url_for ( :controller = > 'courses' , :action = > 'show' , :id = > @course . id ) }
course_status = CourseStatus . create ( :course_id = > @course . id , :watchers_count = > 0 , :changesets_count = > 0 , :grade = > 0 , :course_type = > @course_tag )
end
end
else
@course . members << m
respond_to do | format |
@course . course_infos << course
flash [ :notice ] = l ( :notice_create_failed )
#end
# @course = Course.new
respond_to do | format |
format . html { redirect_to new_course_path } #Added by young
format . html {
format . api { render_validation_errors ( @course ) }
flash [ :notice ] = l ( :notice_successful_create )
end
if params [ :continue ]
end
redirect_to new_course_url ( attrs , :course = > '0' )
elsif params [ :course_continue ]
redirect_to new_course_url ( :course = > '1' )
else
redirect_to settings_course_url ( @course , :course_type = > 1 )
end
}
format . api { render :action = > 'show' , :status = > :created , :location = > url_for ( :controller = > 'courses' , :action = > 'show' , :id = > @course . id ) }
end
else
#@course.destroy
respond_to do | format |
format . html { render :action = > 'new' , :layout = > 'base' } #Added by young
format . api { render_validation_errors ( @course ) }
end
end
end
end
def
def course
course
@school_id = params [ :school_id ]
@school_id = params [ :school_id ]
per_page_option = 10
per_page_option = 10
if @school_id == " 0 " or @school_id . nil?
if @school_id == " 0 " or @school_id . nil?
@ -516,54 +474,28 @@ class CoursesController < ApplicationController
@course_count = @courses_all . count
@course_count = @courses_all . count
@course_pages = Paginator . new @course_count , per_page_option , params [ 'page' ]
@course_pages = Paginator . new @course_count , per_page_option , params [ 'page' ]
#gcm activity count
@course_activity_count = Hash . new
@course_activity_count = Hash . new
#count initialize
@courses_all . each do | course |
@courses_all . each do | course |
@course_activity_count [ course . id ] = 0
@course_activity_count [ course . id ] = 0
end
end
#@course_activity_count=get_course_activity @courses_all,@course_activity_count
#gcm end
case params [ :course_sort_type ]
case params [ :course_sort_type ]
when '0'
when '0'
@courses = @courses_all . order ( " created_on desc " )
@courses = @courses_all . order ( " created_on desc " )
@s_type = 0
@s_type = 0
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
#gcm
@course_activity_count = get_course_activity @courses , @course_activity_count
@course_activity_count = get_course_activity @courses , @course_activity_count
#gcmend
when '1'
when '1'
@courses = @courses_all . order ( " course_ac_para desc " )
@courses = @courses_all . order ( " course_ac_para desc " )
@s_type = 1
@s_type = 1
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
#gcm
@course_activity_count = get_course_activity @courses , @course_activity_count
@course_activity_count = get_course_activity @courses , @course_activity_count
#gcmend
when '2'
when '2'
@courses = @courses_all . order ( " watchers_count desc " )
@courses = @courses_all . order ( " watchers_count desc " )
@s_type = 2
@s_type = 2
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
#gcm
@course_activity_count = get_course_activity @courses , @course_activity_count
@course_activity_count = get_course_activity @courses , @course_activity_count
#gcmend
#gcm
when '3'
when '3'
#gcm
@course_activity_count = get_course_activity @courses_all , @course_activity_count
@course_activity_count = get_course_activity @courses_all , @course_activity_count
#gcmend
@courses = handle_course @courses_all , @course_activity_count
@courses = handle_course @courses_all , @course_activity_count
@s_type = 3
@s_type = 3
@courses = @courses [ @course_pages . offset , @course_pages . per_page ]
@courses = @courses [ @course_pages . offset , @course_pages . per_page ]
@ -571,21 +503,14 @@ class CoursesController < ApplicationController
@s_type = 0
@s_type = 0
@courses = @courses_all . order ( " created_on desc " )
@courses = @courses_all . order ( " created_on desc " )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
@courses = @courses . offset ( @course_pages . offset ) . limit ( @course_pages . per_page )
#gcm
@course_activity_count = get_course_activity @courses , @course_activity_count
@course_activity_count = get_course_activity @courses , @course_activity_count
#gcmend
end
end
respond_to do | format |
respond_to do | format |
format . html {
format . html {
render :layout = > ' base'
render :layout = > ' new_ base'
}
}
format . api {
format . api {
# @offset, @limit = api_offset_and_limit
# @course_count = Course.visible.count
# @courses = Course.visible.offset(@offset).limit(@limit).order('lft').all
}
}
format . atom {
format . atom {
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
@ -594,20 +519,16 @@ class CoursesController < ApplicationController
end
end
end
end
def new
def new
@course_type = params [ :course_type ] || = params [ :course ]
@course_type = params [ :course_type ] || = params [ :course ]
@issue_custom_fields = IssueCustomField . sorted . all
@issue_custom_fields = IssueCustomField . sorted . all
@trackers = Tracker . sorted . all
@trackers = Tracker . sorted . all
@course = Course . new
@course = Course . new
@course . safe_attributes = params [ :course ]
@course . safe_attributes = params [ :course ]
month = Time . now . month
# month = Time.now.month
render :layout = > 'new_base'
render :layout = > 'base'
end
end
def desc_sort_course_by_avtivity ( activity_count , courses )
def desc_sort_course_by_avtivity ( activity_count , courses )
return courses if activity_count . size < 2
return courses if activity_count . size < 2
( activity_count . size - 2 ) . downto ( 0 ) do | i |
( activity_count . size - 2 ) . downto ( 0 ) do | i |
@ -622,7 +543,10 @@ class CoursesController < ApplicationController
end
end
def index
def index
render_404
if ! User . current . admin?
render_404
return
end
@course_type = params [ :course_type ]
@course_type = params [ :course_type ]
@school_id = params [ :school_id ]
@school_id = params [ :school_id ]
per_page_option = 10
per_page_option = 10
@ -670,7 +594,7 @@ class CoursesController < ApplicationController
respond_to do | format |
respond_to do | format |
format . html {
format . html {
# render :layout => 'base'
render :layout = > 'base'
}
}
format . atom {
format . atom {
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
courses = Course . visible . order ( 'created_on DESC' ) . limit ( Setting . feeds_limit . to_i ) . all
@ -679,42 +603,6 @@ class CoursesController < ApplicationController
end
end
end
end
def homework
if @course . is_public != 0 || User . current . member_of_course? ( @course ) || User . current . admin?
@offset , @limit = api_offset_and_limit ( { :limit = > 10 } )
@bids = @course . homeworks . order ( 'deadline DESC' )
@bids = @bids . like ( params [ :name ] ) if params [ :name ] . present?
@bid_count = @bids . count
@bid_pages = Paginator . new @bid_count , @limit , params [ 'page' ]
@offset || = @bid_pages . reverse_offset
unless @offset == 0
@bids = @bids . offset ( @offset ) . limit ( @limit ) . all . reverse
else
limit = @bid_count % @limit
if limit == 0
limit = 10
end
@bids = @bids . offset ( @offset ) . limit ( limit ) . all . reverse
end
render :layout = > 'base_courses'
else
render_403
end
end
# 新建作业
def new_homework
@homework = Bid . new
@homework . safe_attributes = params [ :bid ]
@homework . open_anonymous_evaluation = 1
if ( User . current . logged? && User . current . member_of_course? ( Course . find params [ :id ] ) )
render :layout = > 'base_courses'
else
render_403
end
end
def toggleCourse
def toggleCourse
@course_prefs = Course . find_by_extra ( @course . extra )
@course_prefs = Course . find_by_extra ( @course . extra )
unless ( @course_prefs . teacher == User . current || User . current . admin? )
unless ( @course_prefs . teacher == User . current || User . current . admin? )
@ -771,48 +659,71 @@ class CoursesController < ApplicationController
end
end
def show
def show
# try to redirect to the requested menu item
if params [ :jump ] && redirect_to_course_menu_item ( @course , params [ :jump ] )
if params [ :jump ] && redirect_to_course_menu_item ( @course , params [ :jump ] )
return
return
end
end
@users_by_role = @course . users_by_role
@users_by_role = @course . users_by_role
if ( User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . try ( :user_id ) ) )
if ( User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . try ( :user_id ) ) )
@user = User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . user_id )
@user = User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . user_id )
end
end
@key = User . current . rss_key
@key = User . current . rss_key
#新增内容
#新增内容
@days = Setting . activity_days_default . to_i
@days = Setting . activity_days_default . to_i
if params [ :from ]
if params [ :from ]
begin ; @date_to = params [ :from ] . to_date + 1 ; rescue ; end
begin ; @date_to = params [ :from ] . to_date + 1 ; rescue ; end
end
end
has = {
has = {
" show_course_files " = > true ,
" show_course_files " = > true ,
" show_course_news " = > true ,
" show_course_news " = > true ,
" show_course_messages " = > true ,
" show_course_messages " = > true ,
" show_bids " = > true ,
#"show_course_journals_for_messages" => true,
" show_course_journals_for_messages " = > true
# "show_bids" => true,
# "show_homeworks" => true,
" show_polls " = > true
}
}
@date_to || = Date . today + 1
@date_to || = Date . today + 1
#
@date_from = ( @date_to - @days ) > @course . created_at . to_date ? ( @date_to - @days ) : @course . created_at . to_date
@date_from = ( @date_to - @days ) > @course . created_at . to_date ? ( @date_to - @days ) : @course . created_at . to_date
#@date_from = @date_to - @days-1.years
@author = ( params [ :user_id ] . blank? ? nil : User . active . find ( params [ :user_id ] ) )
@author = ( params [ :user_id ] . blank? ? nil : User . active . find ( params [ :user_id ] ) )
# 决定显示所用用户或单个用户活动
if @author . nil?
@activity = Redmine :: Activity :: Fetcher . new ( User . current , :course = > @course ,
# 显示老师和助教的活动
:with_subprojects = > false ,
# @authors = searchTeacherAndAssistant(@course)
:author = > @author )
@authors = course_all_member ( @course )
@activity . scope_select { | t | has [ " show_ #{ t } " ] }
events = [ ]
# modify by nwb
key = " course_events_ #{ @course . id } " . to_sym
# 添加私密性判断
if Rails . env . production? && Setting . course_cahce_enabled?
if User . current . member_of_course? ( @course ) || User . current . admin?
events = Rails . cache . read ( key ) || [ ]
events = @activity . events ( @days , @course . created_at )
end
if events . empty?
@authors . each do | author |
@activity = Redmine :: Activity :: Fetcher . new ( User . current , :course = > @course ,
:with_subprojects = > false ,
:author = > author . user )
@activity . scope_select { | t | has [ " show_ #{ t } " ] }
# modify by nwb
# 添加私密性判断
if User . current . member_of_course? ( @course ) || User . current . admin?
events += @activity . events ( @days , @course . created_at )
else
events += @activity . events ( @days , @course . created_at , :is_public = > 1 )
end
end
Rails . cache . write ( key , events ) if Rails . env . production? && Setting . course_cahce_enabled?
end
else
else
events = @activity . events ( @days , @course . created_at , :is_public = > 1 )
# @author = @course.teacher
@activity = Redmine :: Activity :: Fetcher . new ( User . current , :course = > @course ,
:with_subprojects = > false ,
:author = > @author )
@activity . scope_select { | t | has [ " show_ #{ t } " ] }
# modify by nwb
# 添加私密性判断
if User . current . member_of_course? ( @course ) || User . current . admin?
events = @activity . events ( @days , @course . created_at )
else
events = @activity . events ( @days , @course . created_at , :is_public = > 1 )
end
end
end
# 无新动态时,显示老动态
# 无新动态时,显示老动态
@ -823,24 +734,17 @@ class CoursesController < ApplicationController
events = @activity . events ( :is_public = > 1 )
events = @activity . events ( :is_public = > 1 )
end
end
end
end
@offset , @limit = api_offset_and_limit ( { :limit = > 10 } )
@events_count = events . count
@events_pages = Paginator . new @events_count , @limit , params [ 'page' ]
@offset || = @events_pages . offset
events = events . slice ( @offset , @limit )
@events_by_day = events . group_by { | event | User . current . time_to_date ( event . event_datetime ) }
# documents
@sort_by = %w( category date title author ) . include? ( params [ :sort_by ] ) ? params [ :sort_by ] : 'category'
@sort_by = %w( category date title author ) . include? ( params [ :sort_by ] ) ? params [ :sort_by ] : 'category'
#
@teachers = searchTeacherAndAssistant ( @course )
@canShowRealName = isCourseTeacher ( User . current . id , @course )
if ( User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . try ( :user_id ) ) )
if ( User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . try ( :user_id ) ) )
@user = User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . user_id )
@user = User . find_by_id ( CourseInfos . find_by_course_id ( @course . id ) . user_id )
end
end
sorted_events = sort_activity_events_course ( events )
events = paginateHelper sorted_events , 10
@events_by_day = events . group_by { | event | User . current . time_to_date ( event . event_datetime ) }
# documents
respond_to do | format |
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . html { render :layout = > 'base_courses' }
format . api
format . api
@ -867,10 +771,6 @@ class CoursesController < ApplicationController
offset = @jours . count ( :conditions = > [ " #{ JournalsForMessage . table_name } .id > ? " , params [ :r ] . to_i ] )
offset = @jours . count ( :conditions = > [ " #{ JournalsForMessage . table_name } .id > ? " , params [ :r ] . to_i ] )
page = 1 + offset / @limit
page = 1 + offset / @limit
end
end
#@feedback_count = @jours.count
#@feedback_pages = Paginator.new @feedback_count, @limit, page
#@offset ||= @feedback_pages.offset
@jour = paginateHelper @jours , 10
@jour = paginateHelper @jours , 10
@state = false
@state = false
respond_to do | format |
respond_to do | format |
@ -880,13 +780,36 @@ class CoursesController < ApplicationController
else
else
render_403
render_403
end
end
end
end
#根据已有课程复制课程
#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
private
private
def allow_join course
def allow_join course
if course_endTime_timeout? course
if course_endTime_timeout? course
respond_to do | format |
respond_to do | format |
@ -905,50 +828,38 @@ class CoursesController < ApplicationController
#验证是否显示课程
#验证是否显示课程
def can_show_course
def can_show_course
@first_page = FirstPage . find_by_page_type ( 'project' )
@first_page = FirstPage . find_by_page_type ( 'project' )
if @first_page . show_course == 2
if @first_page . try( : show_course) == 2
render_404
render_404
end
end
end
end
def student_homework_score ( groupid , start_from , nums , score_sort_by )
def student_homework_score ( groupid , start_from , nums , score_sort_by )
#teachers = find_course_teachers(@course)
start_from = start_from * nums
start_from = start_from * nums
sql_select = " "
sql_select = " "
if groupid == 0
if groupid == 0
if nums == 0
sql_select = " SELECT members.*,(
sql_select = " SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
SELECT AVG ( student_works . final_score )
WHERE members . course_id = #{@course.id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{@course.id}) AND members.user_id = homework_attaches.user_id
FROM student_works , homework_commons
AND homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) GROUP BY members.user_id
WHERE student_works . homework_common_id = homework_commons . id
UNION all
AND homework_commons . course_id = #{@course.id}
SELECT members . * , 0 as score FROM members , homework_attaches , students_for_courses WHERE members . course_id = #{@course.id} AND
AND student_works . user_id = members . user_id
students_for_courses . course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND
) AS score
members . user_id NOT IN ( SELECT homework_attaches . user_id FROM homework_attaches WHERE homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} )
FROM members
)
JOIN students_for_courses
GROUP BY members . user_id ORDER BY score #{score_sort_by}"
ON students_for_courses . student_id = members . user_id AND students_for_courses . course_id = members . course_id
else
WHERE members . course_id = #{@course.id} ORDER BY score #{score_sort_by}"
sql_select = " SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches
WHERE members . course_id = #{@course.id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{@course.id}) AND members.user_id = homework_attaches.user_id
AND homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) GROUP BY members.user_id
UNION all
SELECT members . * , 0 as score FROM members , homework_attaches , students_for_courses WHERE members . course_id = #{@course.id} AND
students_for_courses . course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND
members . user_id NOT IN ( SELECT homework_attaches . user_id FROM homework_attaches WHERE homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} )
)
GROUP BY members . user_id ORDER BY score #{score_sort_by} limit #{start_from}, #{nums}"
end
else
else
sql_select = " SELECT members.*, SUM (homework_attaches.score) as score FROM members, homework_attaches
sql_select = " SELECT members.*,(
WHERE members . course_id = #{@course.id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{@course.id}) AND members.user_id = homework_attaches.user_id
SELECT AVG ( student_works . final_score )
and members . course_group_id = #{groupid} AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id})
FROM student_works , homework_commons
GROUP BY members . user_ id
WHERE student_works . homework_common_id = homework_commons . id
UNION all
AND homework_commons . course_id = #{@course.id}
SELECT members . * , 0 as score FROM members , homework_attaches , students_for_courses WHERE members . course_id = #{@course.id}
AND student_works . user_id = members . user_id
and members . course_group_id = #{groupid} AND
) AS score
students_for_courses . course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND
FROM members
members . user_id NOT IN ( SELECT homework_attaches . user_id FROM homework_attaches WHERE homework_attaches . bid_id in ( SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} )
JOIN students_for_courses
)
ON students_for_courses . student_id = members . user_id AND students_for_courses . course_id = members . course_id
GROUP BY members . user_id ORDER BY score #{score_sort_by}"
WHERE members . course_id = #{@course.id} AND members.course_group_id = #{groupid} ORDER BY score #{score_sort_by}"
end
end
sql = ActiveRecord :: Base . connection ( )
sql = ActiveRecord :: Base . connection ( )
homework_scores = Member . find_by_sql ( sql_select )
homework_scores = Member . find_by_sql ( sql_select )
@ -964,13 +875,12 @@ GROUP BY members.user_id ORDER BY score #{score_sort_by}"
#当加入,退出分班时查询分班的学生
#当加入,退出分班时查询分班的学生
def search_group_members group
def search_group_members group
@subPage_title = l :label_student_list
@subPage_title = l :label_student_list
@render_file = ' member_list'
@render_file = ' new_ member_list'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
@is_remote = true
@score_sort_by = " desc "
@score_sort_by = " desc "
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
@results = student_homework_score ( group . id , 0 , 0 , " desc " )
@results = student_homework_score ( group . id , 0 , 0 , " desc " )
@results = paginateHelper @results , 10
end
end