#encoding: utf-8
class CoursesController < ApplicationController
# layout 'base_courses'
include CoursesHelper
include ActivitiesHelper
helper :activities
helper :members
helper :words
helper :attachments
helper :files
helper :activity_notifys
helper :graduation_tasks
include ApplicationHelper
helper SyllabusesHelper
before_filter :local_exam , :except = > [ :show , :index ]
# before_filter :auth_login1, :only => [:show, :course_activity, :feedback]
if Redmine :: Configuration [ 'gitlab_address' ] . include? ( " test " )
skip_before_filter :verify_authenticity_token , :only = > [ :update_course_module , :join_course_multi_role ]
before_filter :require_login , :only = > [ :join , :unjoin ]
else
skip_before_filter :verify_authenticity_token , :only = > [ :update_course_module ]
before_filter :require_login , :only = > [ :join , :unjoin , :join_course_multi_role , :join_private_courses ]
end
# before_filter :check_authentication, :except => [:update_course_module]
menu_item :overview
menu_item :feedback , :only = > :feedback
menu_item :homework , :only = > :homework
menu_item :new_homework , :only = > :new_homework
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 => []
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 , :join_course_multi_role , :unjoin_group , :search_course_list , :validate_copy_permission ]
# before_filter :authorize_course, :only => [:show, :settings, :update, :course]
before_filter :authorize_course_global , :only = > [ :new , :create ]
before_filter :toggleCourse , :only = > [ :finishcourse , :restartcourse ]
before_filter :is_deleted , :only = > [ :show , :settings ]
#before_filter :allow_join, :only => [:join]
require 'bundler/setup'
if RUBY_PLATFORM =~ / linux /
require 'simple_xlsx_reader'
require 'roo-xls'
end
# params[:search] 搜索课程的名称
# params[:select] "join" "create" "all" 参与的 创建的 所有的课程
#
def index
@user = User . current
@search = params [ :search ] . nil? ? '' : params [ :search ]
@select = params [ :select ] . nil? ? '' : params [ :select ]
# @is_over = params[:is_over] # 是否是新建课程页面跳转的查看归档
# @syllabuses_num = Course.count
# @my_courses_count = @user.courses.not_deleted_not_end.count
if params [ :order ] . present?
@order = params [ :order ]
order_str = params [ :order ] == " members_count " ? " c.members_count " : ( params [ :order ] == " created_at " ? " c.created_at " : " c.updated_at " )
else
@order = " all "
end
# @hidden = params[:hidden] ? params[:hidden].to_i : 0
if params [ :search ] . present?
user_ids = User . where ( " concat(lastname,firstname) = ' #{ @search } ' " ) . pluck ( :id )
user_ids = user_ids . present? ? user_ids . join ( " , " ) : - 1
course_ids = Course . where ( " courses.name like '% #{ @search } %' or courses.tea_id in ( #{ user_ids } ) " ) . pluck ( :id )
end
# 页面筛选的课程
# join users 是为了过滤掉用户为nil的课堂
= begin
if @select == " private "
@courses = Course . find_by_sql ( " select c.id, c.tea_id, c.name, c.is_public, c.members_count, c.homework_commons_count, u.login, u.nickname, u.lastname, u.firstname, u.show_realname, ue.school_id from courses c, users u, user_extensions ue where c.tea_id = u.id and u.id = ue.user_id and c.is_delete = 0 and c.is_public = 0 #{ course_ids == - 1 ? " " : " and c.id in ( #{ course_ids } ) " } order by #{ order_str } desc " )
elsif @select == " public "
@courses = Course . find_by_sql ( " select c.id, c.tea_id, c.name, c.is_public, c.members_count, c.homework_commons_count, u.login, u.nickname, u.lastname, u.firstname, u.show_realname, ue.school_id from courses c, users u, user_extensions ue where c.tea_id = u.id and u.id = ue.user_id and c.is_delete = 0 and c.is_public = 1 #{ course_ids == - 1 ? " " : " and c.id in ( #{ course_ids } ) " } order by c.id = 1309 desc, #{ order_str } desc " )
else
# 全部课堂
@courses = Course . find_by_sql ( " select c.id, c.tea_id, c.name, c.is_public, c.members_count, c.homework_commons_count, u.login, u.nickname, u.lastname, u.firstname, u.show_realname, ue.school_id from courses c, users u, user_extensions ue where c.tea_id = u.id and u.id = ue.user_id and c.is_delete = 0 #{ course_ids == - 1 ? " " : " and c.id in ( #{ course_ids } ) " } order by c.id = 1309 desc, #{ order_str } desc " )
end
= end
if @order == " all "
course_ids = course_ids . present? ? course_ids . join ( " , " ) : - 1
@courses = Course . where ( " courses.is_delete = 0 and courses.is_hidden = 0 #{ course_ids == - 1 ? " " : " and courses.id in ( #{ course_ids } ) " } " ) . select ( " courses.id, courses.tea_id, courses.name, courses.is_public, courses.members_count, courses.homework_commons_count,(SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a " ) . order ( " courses.id = 1309 desc, a desc " )
elsif @order == " mine "
my_course_ids = Course . find_by_sql ( " SELECT c.id FROM courses c, members m, member_roles mr WHERE m.course_id = c.id AND m.id=mr.member_id AND mr.role_id in (3,7,9,10) AND m.user_id= #{ @user . id } AND c.is_delete = 0 " )
course_ids = course_ids . present? ? my_course_ids . map ( & :id ) & course_ids : my_course_ids . map ( & :id )
course_ids = course_ids . size > 0 ? course_ids . join ( " , " ) : " -1 "
@courses = Course . find_by_sql ( " select c.id, c.tea_id, c.name, c.is_public, c.members_count, c.homework_commons_count, u.login, u.nickname, u.lastname, u.firstname, u.show_realname, ue.school_id from courses c, users u, user_extensions ue where c.tea_id = u.id and u.id = ue.user_id and c.is_delete = 0 and c.is_hidden = 0 and c.id in ( #{ course_ids } ) order by c.id = 1309 desc, #{ order_str } desc " )
elsif @order == " created_at "
course_ids = course_ids . present? ? course_ids . join ( " , " ) : - 1
@courses = Course . find_by_sql ( " select c.id, c.tea_id, c.name, c.is_public, c.members_count, c.homework_commons_count, u.login, u.nickname, u.lastname, u.firstname, u.show_realname, ue.school_id from courses c, users u, user_extensions ue where c.tea_id = u.id and u.id = ue.user_id and c.is_delete = 0 and c.is_hidden = 0 and c.is_end = 0 #{ course_ids == - 1 ? " " : " and c.id in ( #{ course_ids } ) " } order by c.id = 1309 desc, #{ order_str } desc " )
else
course_ids = course_ids . present? ? course_ids . join ( " , " ) : - 1
@courses = Course . find_by_sql ( " select c.id, c.tea_id, c.name, c.is_public, c.members_count, c.homework_commons_count, u.login, u.nickname, u.lastname, u.firstname, u.show_realname, ue.school_id from courses c, users u, user_extensions ue where c.tea_id = u.id and u.id = ue.user_id and c.is_delete = 0 and c.is_hidden = 0 #{ course_ids == - 1 ? " " : " and c.id in ( #{ course_ids } ) " } order by c.id = 1309 desc, #{ order_str } desc " )
end
@courses = paginateHelper @courses , 16
respond_to do | format |
format . js
format . html { render :layout = > " base_edu " }
end
end
def import_excel
attachments = params [ :attachments ]
attachments . each do | attachment |
attachment = Attachment . find_by_token_only ( attachment [ 1 ] [ 'token' ] )
attachment . container_id = @course . id
attachment . container_type = " ImportStudent "
attachment . save
end
@import_attachments = Attachment . where ( :container_id = > @course . id , :container_type = > " ImportStudent " )
end
def shixun_statistics
if params [ :homework_id ]
@homeworks = @course . homework_commons . where ( :id = > params [ :homework_id ] )
else
@homeworks = @course . homework_commons . where ( " homework_type = 4 and publish_time < ' #{ Time . now } ' " ) . order ( " publish_time desc " )
end
#filename="#{format_date(Time.now)}_#{@course.teacher.show_real_name.to_s}_#{@course.name}_实训数据报告";
filename = " #{ format_date ( Time . now ) } _ #{ @course . teacher . show_real_name . to_s } _ #{ @course . name } _ #{ @homeworks . first . name } _实训数据报告 " ;
respond_to do | format |
format . xls {
send_data ( shixun_xls ( @homeworks , @course ) , :type = > 'application/octet-stream' , :filename = > filename_for_content_disposition ( " #{ filename } .xls " ) )
}
end
end
# REDO: 性能需要优化, 这块是管理员后台任务, 不影响用户使用
def sync_students
# school_id = User.find(@course.tea_id).try(:user_extensions).try(:school_id)
school_id = nil
@import_attachments = Attachment . where ( :container_id = > @course . id , :container_type = > " ImportStudent " )
@had_import_count = 0
@list_count = 0
if @import_attachments . present?
@import_attachments . each do | attachment |
path = attachment . disk_directory
name = attachment . disk_filename
if name . split ( " . " ) . last == " xls " || name . split ( " . " ) . last == " xlsx "
lists = readData ( " files/ #{ path } / #{ name } " )
@list_count += lists . count
lists . each_with_index do | list , index |
logger . info ( " #{ list [ 0 ] } --- #{ list [ 1 ] } --- #{ list [ 2 ] } " )
if list [ 0 ]
if index == 0
school_id = list [ 1 ]
elsif index > 1
course_group = @course . course_groups . where ( :name = > list [ 2 ] ) . first
if ! course_group && list [ 2 ]
course_group = CourseGroup . create ( :name = > list [ 2 ] , :course_id = > @course . id , :members_count = > 0 )
end
import_user = ImportCourseUser . new ( :user_group_name = > list [ 2 ] , :user_name = > list [ 1 ] , :user_student_id = > list [ 0 ] , :course_id = > @course . id , :school_id = > school_id )
user = User . find_by_sql ( " SELECT u.* FROM `users` u, `user_extensions` ue where u.id = ue.user_id and ue.school_id=' #{ school_id } ' and ue.student_id=' #{ list [ 0 ] } ' " ) . last
# 用户存在并且用户是非课程成员
if user . present?
member = Member . where ( :course_id = > @course , :user_id = > user . id ) . first
if ! member . present?
members = [ ]
members << Member . new ( :role_ids = > [ 10 ] , :user_id = > user . id , :course_group_id = > course_group ? course_group . id : 0 )
@course . members << members
StudentsForCourse . create ( :student_id = > user . id , :course_id = > @course . id )
elsif course_group && member . course_group_id != course_group . id
member . update_attributes ( :course_group_id = > course_group . id )
end
@had_import_count += 1
import_user . status = 1
end
import_user . save
end
end
end
attachment . destroy
end
end
end
# @members = @course.members.joins("join user_extensions on members.user_id = user_extensions.user_id").order("student_id asc").select{|m| m.roles.to_s.include?("Student")}
# @member_count = @members.count
# @limit = 20
# @is_remote = true
# @page = (params['page'] || 1).to_i
# @member_pages = Paginator.new @member_count, @limit, params['page'] || 1
# @offset ||= @member_pages.offset
# @members = paginateHelper @members,@limit
#
# @teacher_count = TeacherAndAssistantCount @course
# @student_count = studentCount(@course)
# @no_group_count = @course.members.where(:course_group_id => 0).select{|m| m.roles.to_s.include?("Student")}.count
end
def none_register_students
student_ids = UserExtensions . where ( :user_id = > @course . student . map ( & :student_id ) ) . map { | ue | ue . student_id if ue . student_id . present? }
student_ids = student_ids . empty? ? " (-1) " : " ( " + student_ids . compact . join ( " , " ) + " ) "
@import_users = @course . import_course_users . where ( " school_id = #{ @course . teacher . try ( :user_extensions ) . try ( :school_id ) } and user_student_id not in #{ student_ids } " )
@curr_page = '尚未注册学生列表'
render :layout = > " base_edu_course "
end
def readData ( xlsx )
doc = SimpleXlsxReader . open ( xlsx )
sheet = doc . sheets . first
return sheet . rows
# sheet.rows.inject([]) { |l, row|
# if row.size >= 3 && row[1] && row[2]
# l << [row[1], row[2]]
# else
# l
# end
# }
end
# 邀请码停用/启用
def set_invite_code_halt
if User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@course . update_attribute ( 'invite_code_halt' , @course . invite_code_halt == 0 ? 1 : 0 )
@course_group = @course . course_groups . where ( :id = > params [ :group_id ] ) . first if params [ :group_id ]
end
end
#查找组织
def search_public_orgs_not_in_course
condition = '%%'
if ! params [ :name ] . nil?
condition = " % #{ params [ :name ] . strip } % " . gsub ( " " , " " )
end
limit = 15
course_org_ids = OrgCourse . find_by_sql ( " select distinct organization_id from org_courses where course_id = #{ params [ :id ] } " ) . map ( & :organization_id )
#@orgs_not_in_course = User.current.organizations.where("organizations.id not in (#{course_org_ids.join(',')}) and organizations.name like ?", condition).page(params[:page].to_i || 1).per(limit)
#@org_count = User.current.organizations.where("organizations.id not in (#{course_org_ids.join(',')}) and organizations.name like ?", condition).count
if course_org_ids . empty?
@orgs_not_in_course = User . current . organizations . where ( " name like ? " , condition ) . page ( ( params [ :page ] . to_i || 1 ) ) . per ( limit )
@org_count = @orgs_not_in_course . count
else
course_org_ids = " ( " + course_org_ids . join ( ',' ) + " ) "
@orgs_not_in_course = User . current . organizations . where ( " organizations.id not in #{ course_org_ids } and organizations.name like ? " , condition ) . page ( ( params [ :page ] . to_i || 1 ) ) . per ( limit )
@org_count = @orgs_not_in_course . empty? ? 0 : @orgs_not_in_course . count
end
@course_count = Project . course_entities . visible . like ( params [ :name ] ) . page ( params [ :page ] ) . count
@orgs_page = Paginator . new @org_count , limit , params [ :page ]
@hint_flag = params [ :hint_flag ]
#render :json => {:orgs => @orgs_not_in_course, :count => @org_count}.to_json
respond_to do | format |
format . js
end
end
def join
if User . current . logged?
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
else
@state = 5 #未登录
end
@object_id = @course . id if @course
respond_to do | format |
format . js #{ render :partial => 'set_join', :locals => {:user => @user, :course => @course, :object_id => params[:object_id]} }
end
end
def join_course_multi_role
= begin
if Redmine :: Configuration [ 'gitlab_address' ] . include? ( " test " )
User . current = User . find ( 12 )
end
= end
if User . current . logged?
cs = CoursesService . new
@user = User . current
join = cs . join_course_roles params , @user
@state = join [ :state ]
@course = join [ :course ]
if @state == 6 || @state == 13
# 给课堂老师发留言
if params [ :role ] . include? ( " 7 " ) || params [ :role ] . include? ( " 9 " )
# notes = @user.show_real_name.to_s + " 申请以#{params[:role].include?('7') ? '教辅' : '教师'}的身份加入班级:<a target='_blank' href='#{members_course_path(@course)}'>#{@course.name}</a>"
@course . course_teachers . each do | mem |
Tiding . create ( :user_id = > mem . user_id , :trigger_user_id = > User . current . id , :container_id = > @course . id , :container_type = > 'JoinCourse' , :status = > 0 , :belong_container_id = > @course . id , :belong_container_type = > " Course " , :tiding_type = > " Apply " , :extra = > params [ :role ] . include? ( " 7 " ) ? " 7 " : " 9 " )
end
begin
user = User . where ( :id = > @course . tea_id ) . first
if user . phone . present?
status = Trustie :: Sms . send ( mobile : user . phone . to_s , send_type : 'join_course_multi_role' , user_name : user . show_name , name : @course . id )
end
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
end
end
if @state == 0 || @state == 13
@course . course_teachers . each do | mem |
Tiding . create ( :user_id = > mem . user_id , :trigger_user_id = > @user . id , :container_id = > @course . id , :container_type = > 'StudentJoinCourse' , :belong_container_id = > @course . id , :belong_container_type = > " Course " , :tiding_type = > " System " )
end
end
else
@state = 5 #未登录
end
@object_id = @course . id if @course
respond_to do | format |
format . js
format . json {
render json : { :state = > @state , :course_id = > @course . try ( :id ) }
}
end
end
def unjoin
if User . current . logged?
cs = CoursesService . new
cs . exit_course params , User . current
end
redirect_to user_path ( User . current )
end
def join_private_courses
@invitation_code = params [ :invitation_code ]
respond_to do | format |
format . js
end
end
#更新课程信息
def update
cs = CoursesService . new
c = cs . edit_course params , @course , User . current
@course = c [ :course ]
if @course . errors . full_messages . count < = 0
respond_to do | format |
format . js
format . api { render_api_ok }
end
else
respond_to do | format |
format . js
format . api { render_validation_errors ( @course ) }
end
end
end
def new_join
@course = Course . find ( params [ :object_id ] )
respond_to do | format |
format . js
end
end
# 课程搜索
# add by nwb
def search
if params [ :name ] . empty?
courses = Course . visible
@courses = paginateHelper courses , 10
else
courses = Course . visible . where ( " LOWER(name) like '% #{ params [ :name ] . to_s . downcase } %' " ) . order ( " time desc, created_at desc " )
@courses = paginateHelper courses , 10
end
@name = params [ :name ]
@type = 'courses'
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
rescue Exception = > e
if e . message == 'sumbit empty'
( redirect_to courses_url , :notice = > l ( :label_sumbit_empty ) ; return )
end
end
def searchmembers
@subPage_title = l :label_student_list
@canShowCode = User . current . allowed_to? ( :as_teacher , @course ) && params [ :role ] != '1'
# @is_remote = true
@sort_type = 'score'
@score_sort_by = " desc "
@search_name = " #{ params [ :name ] . strip } "
q = " #{ params [ :name ] . strip } "
if params [ :incourse ]
results = searchmember_by_name ( student_homework_score ( 0 , 0 , 0 , " desc " ) , q )
elsif params [ :ingroup ]
if params [ :search_group_id ] == " -1 "
@group = - 1
results = searchmember_by_name ( student_homework_score ( - 1 , 0 , 0 , " desc " ) , q )
else
@group = CourseGroup . find ( params [ :search_group_id ] )
results = searchmember_by_name ( student_homework_score ( @group . id , 0 , 0 , " desc " ) , q )
end
end
@is_remote = true
#@result_count = results.count
#@results = paginateHelper results, 10
@results = results
@search_name = q
@limit = 50
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@members_count = @results . count
@mem_pages = Paginator . new @members_count , @limit , @page
@results = paginateHelper @results , @limit
end
def addgroups
data = { :result = > 1 }
@subPage_title = l :label_student_list
if params [ :group_name ]
if @course . course_groups . where ( :name = > params [ :group_name ] ) . count > 0
data [ :result ] = 0
else
group = CourseGroup . new
group . name = params [ :group_name ]
group . course_id = @course . id
group . save
end
end
render :json = > data
end
def deletegroup
data = { :result = > 1 }
group = CourseGroup . find params [ :group_id ]
if group
if group . members . count == 0
group . destroy
else
group . members . update_all ( :course_group_id = > 0 )
group . destroy
end
end
render :json = > data
end
def updategroupname
data = { :result = > 1 }
@subPage_title = l :label_student_list
if params [ :group_name ] && params [ :group_id ]
group = CourseGroup . find ( params [ :group_id ] )
if @course . course_groups . where ( " name = ' #{ params [ :group_name ] } ' and id != #{ params [ :group_id ] } " ) . count > 0
data [ :result ] = 0
else
group . name = params [ :group_name ]
group . save
end
end
render :json = > data
end
def choose_group_allow
@course . update_attributes ( :choose_group_allow = > ! @course . choose_group_allow )
end
# 显示/隐藏课程"开源检索"的入口
def open_or_close_os_interface
os_status = @course . os_allow == 0 ? 1 : 0
@course . update_attribute ( :os_allow , os_status )
respond_to do | format |
format . js
end
end
def valid_ajax
req = Hash . new ( false )
req [ :message ] = ''
valid_attr = params [ :valid ]
valid_value = params [ :value ]
group_id = params [ :group_id ]
# faker = CourseGroup.new
if valid_attr . eql? ( 'name' )
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]
end
# req[:message] = l(:modal_valid_passing) if req[:message].blank?
render :json = > req
end
def delete_course_students
if params [ :member_ids ]
params [ :member_ids ] . split ( " , " ) . each do | member_id |
member = Member . find member_id
if member
ActiveRecord :: Base . transaction do
if member . member_roles . count == 1
StudentsForCourse . where ( 'student_id = ? and course_id = ?' , member . user_id , @course . id ) . destroy_all
member . destroy
else
member . member_roles . where ( " role_id = 10 " ) . destroy_all
StudentsForCourse . where ( 'student_id = ? and course_id = ?' , member . user_id , @course . id ) . destroy_all
member . update_attributes ( :course_group_id = > 0 )
member_role = member . member_roles . where ( " role_id = 7 or role_id = 9 or role_id = 3 " ) . first
member_role . update_attributes ( :is_current = > 1 ) if member_role . present?
end
end
end
end
end
respond_to do | format |
format . js
end
end
def teacher_assign_group
if params [ :course_group_id ] == '0'
@group = 0
else
@group = @course . course_groups . where ( :id = > params [ :course_group_id ] . to_i ) . first
end
if params [ :member_ids ] && @group
params [ :member_ids ] . each do | member_id |
member = Member . find member_id
@old_group = member . course_group
member . update_attributes ( :course_group_id = > params [ :course_group_id ] . to_i ) if member
end
end
respond_to do | format |
format . js
end
end
def join_group
group = CourseGroup . find ( params [ :group_id ] )
member = Member . where ( :course_id = > @course . id , :user_id = > User . current . id ) . first
member . course_group_id = group . id
member . save
@group = group
respond_to do | format |
format . js
end
#@course_groups = @course.course_groups
#@no_group_count = @course.student.count - @course.members.where("course_group_id != 0").count
# redirect_to has_group_student_list_course_path(@course, :group_id => @group.id)
#search_group_members group
end
def change_manager
if params [ :chooseteacher ]
man_member = Member . where ( :course_id = > @course . id , :user_id = > @course . tea_id ) . first
cha_member = Member . find params [ :chooseteacher ]
if man_member && cha_member
cha_member . member_roles . where ( " role_id = 9 || role_id = 7 " ) . first . update_attributes ( :role_id = > 3 , :is_current = > 1 )
if cha_member . member_roles . where ( " role_id = 10 " ) . count > 0
cha_member . member_roles . where ( " role_id = 10 " ) . first . destroy
StudentsForCourse . where ( :course_id = > @course . id , :student_id = > cha_member . user_id ) . destroy_all
end
@course . update_attributes ( :tea_id = > cha_member . user_id )
man_member . member_roles . first . update_attributes ( :role_id = > 9 )
course_act = CourseActivity . where ( :course_id = > @course . id , :course_act_id = > @course . id , :course_act_type = > 'Course' ) . first
course_act . update_column ( 'user_id' , cha_member . user_id )
UserActivity . where ( :act_id = > @course . id , :container_type = > 'Course' , :act_type = > 'Course' , :container_id = > @course . id ) . first . update_column ( 'user_id' , cha_member . user_id )
= begin
ws = WechatService . new
title = " 您已成为班级管理员 "
ws . create_class_notice cha_member . user_id , " create_course_notice " , @course . id , title , @course . name , man_member . user . show_name , @course . members . count , " 点击查看班级详情。 "
= end
end
end
end
def choose_graduation_group
if User . current . allowed_to? ( :as_teacher , @course )
@member_ids = params [ :member_ids ]
@graduation_groups = @course . graduation_groups
@default_group_name = @graduation_groups . count == 0 ? " 分组1 " : " 分组 #{ ( @graduation_groups . count + 1 ) } "
@page = params [ :page ]
else
render_403
end
end
def teacher_graduation_group
if User . current . admin? || User . current . allowed_to? ( :as_teacher , @course )
if params [ :graduation_group_name ] . strip != " "
graduation_group = @course . graduation_groups . where ( :name = > params [ :graduation_group_name ] . strip ) . first
unless graduation_group . present?
graduation_group = @course . graduation_groups . new ( :name = > params [ :graduation_group_name ] . strip , :user_id = > User . current . id )
graduation_group . save
end
Member . where ( :course_id = > @course . id , :id = > params [ :member_ids ] . split ( " , " ) ) . update_all ( :graduation_group_id = > graduation_group . id )
end
redirect_to teachers_course_path ( @course , :page = > params [ :page ] )
else
render_403
end
end
def switch_teacher_role
if User . current . admin? || User . current . has_teacher_role ( @course )
member = @course . members . where ( :id = > params [ :member_id ] ) . first
if member . present?
member . member_roles . where ( :role_id = > params [ :role ] . to_i == 7 ? 9 : 7 ) . update_all ( :role_id = > params [ :role ] )
end
redirect_to teachers_course_path ( @course )
else
render_403
end
end
# 给教师分配管理权限
def assign_teacher_groups
status = 0
if params [ :member_id ] && params [ :group_id ] && params [ :check ]
member = @course . members . where ( :id = > params [ :member_id ] ) . first
course_group = @course . course_groups . where ( :id = > params [ :group_id ] ) . first
if member . present? && course_group . present?
teacher_group = member . teacher_course_groups . where ( :course_group_id = > params [ :group_id ] )
if params [ :check ] . to_i == 1
if teacher_group . count == 0
member . teacher_course_groups << TeacherCourseGroup . new ( :user_id = > member . user_id , :course_id = > @course . id , :course_group_id = > params [ :group_id ] )
end
status = 1
elsif params [ :check ] . to_i == 0
teacher_group . destroy_all
status = 1
end
end
end
render :json = > { status : status }
end
def import_course_group
attachments = params [ :attachments ]
attachments . each do | attachment |
attachment = Attachment . find_by_token_only ( attachment [ 1 ] [ 'token' ] )
if attachment . present?
attachment . container_id = @course . id
attachment . container_type = " ImportCourseGroup "
attachment . save
end
end
new_atta = Attachment . where ( :container_id = > @course . id , :container_type = > " ImportCourseGroup " ) . last
if new_atta . present?
path = new_atta . disk_directory
name = new_atta . disk_filename
if name . split ( " . " ) . last == " xls "
begin
xls = Roo :: Spreadsheet . open ( " files/ #{ path } / #{ name } " , extension : :xls )
worksheet = xls . sheet ( 0 )
rows = worksheet . last_row #最后一行数
if rows < 2
@status = 0
@message = " 请按照模板格式导入 "
else
group_count = 0
for row in 2 .. rows do
name = worksheet . cell ( row , 1 ) . to_s
# Rails.logger.info("-----user_id #{worksheet.cell(row, 1)}-------------group_name #{name}")
if @course . course_groups . where ( :name = > name ) . count == 0
@course . course_groups << CourseGroup . new ( :name = > name )
group_count += 1
end
end
@status = 1
@message = " 已导入 #{ group_count } 个分班 "
end
rescue
@status = 0
@message = " 无法完成导入,原因:文件内容无法读取 "
end
else
@status = 0
@message = " 无法完成导入,原因:文件类型错误(只支持.xls文件) "
end
new_atta . destroy
else
@status = 0
@message = " 无法完成导入,原因:文件不存在 "
end
end
def teachers
@search = params [ :search ]
q = params [ :search ] ? " #{ params [ :search ] . strip . downcase } " : " "
if @course . try ( :id ) != 1309 || User . current . admin? || User . current . try ( :id ) == 15582
@teachers = @course . members . includes ( :roles , :user ) . where ( " roles.id in (3, 7, 9) and LOWER(concat(users.lastname, users.firstname)) LIKE '% #{ q } %' " )
else
@teachers = @course . members . includes ( :roles , :user ) . where ( " (roles.id in (3, 7) or (members.user_id = #{ User . current . id } and roles.id = 9)) and LOWER(concat(users.lastname, users.firstname)) LIKE '% #{ q } %' " )
end
@apply_users = CourseMessage . where ( :course_id = > @course . id , :course_message_type = > 'JoinCourseRequest' , :status = > 0 )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@has_graduation = @course . course_modules . where ( :module_type = > " graduation " ) . first . try ( :hidden ) . to_i == 0
@teachers_count = @teachers . size
@limit = 20
@page = params [ :page ] ? params [ :page ] . to_i : 1
@teachers = paginateHelper @teachers , @limit
respond_to do | format |
format . js
format . html { render :layout = > 'base_courses' }
end
end
def students
@order , @r_sort = params [ :order ] || " student_id " , params [ :sort ] || " asc "
@sort = @r_sort == " desc " ? " asc " : " desc "
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@search = params [ :search ]
q = params [ :search ] ? " #{ params [ :search ] . strip . downcase } " : " "
@group = params [ :group_id ] . to_i if params [ :group_id ] . present? && params [ :group_id ] != " undefined "
if @group
group_ids = " ( #{ params [ :group_id ] } ) "
else
group_ids = " ( #{ @course . course_groups . blank? ? 0 : @course . course_groups . map ( & :id ) . join ( " , " ) + " ,0 " } ) "
end
= begin
if q . nil? || q == " "
@members = Member . find_by_sql ( " 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 . homework_type IN ( 1 , 3 , 4 )
AND homework_commons . course_id = #{@course.id}
AND student_works . user_id = members . user_id
) AS score ,
( SELECT SUM ( gw . work_score ) FROM graduation_works gw , graduation_tasks gt WHERE gw . graduation_task_id = gt . id
AND gt . course_id = #{@course.id} AND gw.user_id = members.user_id) AS graduation_score,
( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score,
( SELECT max ( message_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num,
( SELECT max ( message_reply_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num,
( SELECT max ( resource_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num,
( SELECT max ( homework_journal_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num,
( SELECT COUNT ( gw . id ) FROM graduation_works AS gw , graduation_tasks AS gt WHERE gw . graduation_task_id = gt . id AND gt . course_id = #{@course.id} AND gw.work_status != 0 AND gw.user_id = members.user_id) AS graduation_num,
( SELECT COUNT ( ss . id ) FROM student_works AS ss , homework_commons AS hc WHERE ss . homework_common_id = hc . id AND hc . course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num,
( SELECT COUNT ( eu . id ) FROM exercise_users AS eu , exercises WHERE eu . exercise_id = exercises . id AND exercises . course_id = #{@course.id} AND eu.commit_status = 1 AND eu.user_id = members.user_id) AS exercise_num,
( SELECT COUNT ( pu . id ) FROM poll_users AS pu , polls WHERE pu . poll_id = polls . id AND polls . course_id = #{@course.id} AND pu.commit_status = 1 AND pu.user_id = members.user_id) AS poll_num,
ue . student_id , CONCAT ( u . lastname , u . firstname ) AS username
FROM members , users u , user_extensions ue , students_for_courses sfc
WHERE sfc . student_id = members . user_id AND sfc . course_id = members . course_id AND members . ` user_id ` = u.id AND u.id = ue.user_id
AND members . course_id = #{@course.id} and members.course_group_id in #{group_ids}")
else
@members = Member . find_by_sql ( " 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 . homework_type IN ( 1 , 3 , 4 )
AND homework_commons . course_id = #{@course.id}
AND student_works . user_id = members . user_id
) AS score ,
( SELECT SUM ( gw . work_score ) FROM graduation_works gw , graduation_tasks gt WHERE gw . graduation_task_id = gt . id
AND gt . course_id = #{@course.id} AND gw.user_id = members.user_id) AS graduation_score,
( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score,
( SELECT max ( message_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num,
( SELECT max ( message_reply_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num,
( SELECT max ( resource_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num,
( SELECT max ( homework_journal_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num,
( SELECT COUNT ( gw . id ) FROM graduation_works AS gw , graduation_tasks AS gt WHERE gw . graduation_task_id = gt . id AND gt . course_id = #{@course.id} AND gw.work_status != 0 AND gw.user_id = members.user_id) AS graduation_num,
( SELECT COUNT ( ss . id ) FROM student_works AS ss , homework_commons AS hc WHERE ss . homework_common_id = hc . id AND hc . course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num,
( SELECT COUNT ( eu . id ) FROM exercise_users AS eu , exercises WHERE eu . exercise_id = exercises . id AND exercises . course_id = #{@course.id} AND eu.commit_status = 1 AND eu.user_id = members.user_id) AS exercise_num,
( SELECT COUNT ( pu . id ) FROM poll_users AS pu , polls WHERE pu . poll_id = polls . id AND polls . course_id = #{@course.id} AND pu.commit_status = 1 AND pu.user_id = members.user_id) AS poll_num,
ue . student_id , CONCAT ( u . lastname , u . firstname ) AS username
FROM members , users u , user_extensions ue , students_for_courses sfc
WHERE sfc . student_id = members . user_id AND sfc . course_id = members . course_id AND members . ` user_id ` = u.id AND u.id = ue.user_id
AND members . course_id = #{@course.id} and (ue.student_id like '%#{q}%' OR LOWER(CONCAT(u.lastname,u.firstname)) LIKE '%#{q}%')
and members . course_group_id in #{group_ids}")
end
@members . each do | member |
member [ :course_score ] = ( member . score . nil? ? 0 : member . score ) + ( member . graduation_score . nil? ? 0 : member . graduation_score ) + ( member . ex_score . nil? ? 0 : member . ex_score )
end
= end
= begin
if @order == " student_id "
@r_sort == " desc " ? @members . sort! { | x , y | y [ :student_id ] . to_s < = > x [ :student_id ] . to_s } : @members . sort! { | x , y | x [ :student_id ] . to_s < = > y [ :student_id ] . to_s }
else
@r_sort == " desc " ? @members = @members . sort { | x , y | y [ :course_score ] < = > x [ :course_score ] } : @members = @members . sort { | x , y | x [ :course_score ] < = > y [ :course_score ] }
end
= end
@members = @course . members . where ( :user_id = > @course . student . pluck ( :student_id )
) . where ( " course_group_id in #{ group_ids } " ) . includes ( :user = > [ :user_extensions ] ) .
where ( " user_extensions.student_id like '% #{ q } %' OR LOWER(CONCAT(users.lastname,users.firstname)) LIKE '% #{ q } %' " ) . reorder ( " user_extensions.student_id #{ @r_sort } " )
#分页
@member_count = @members . count
@all_member_ids = @members . map ( & :id ) . join ( " , " )
@limit = 20
@is_remote = true
@page = ( params [ 'page' ] || 1 ) . to_i
@member_pages = Paginator . new @member_count , @limit , @page
@offset || = @member_pages . offset
@members = paginateHelper @members , @limit
@import_attachments = Attachment . where ( :container_id = > @course . id , :container_type = > " ImportStudent " ) # 统计上传的Excel数量
if ! @group . present?
@left_nav_type = 8
@group_name = @course . student_list
else
@left_nav_type = @group == 0 ? 9 : 10
if @group == 0
@group_name = " 未分班 "
else
@course_group = @course . course_groups . where ( :id = > @group ) . first
@group_name = @course_group . try ( :name )
end
end
respond_to do | format |
format . js
format . html { render :layout = > 'base_courses' }
end
end
def no_group_student_list
@order , @r_sort = params [ :order ] || " student_id " , params [ :sort ] || " asc "
@sort = @r_sort == " desc " ? " asc " : " desc "
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@search = params [ :search ]
q = params [ :search ] ? " #{ params [ :search ] . strip } " : " "
@members = Member . find_by_sql ( " 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 . homework_type in ( 1 , 3 , 4 )
AND homework_commons . course_id = #{@course.id}
AND student_works . user_id = members . user_id
) AS score , ( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_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 = 0")
# if @order == "student_id"
# @members = @course.members.where(:course_group_id => 0).joins("join user_extensions on members.user_id = user_extensions.user_id").order("student_id #{@sort}").select{|m| m.roles.to_s.include?("Student")}
# else
# @members = @course.members.where(:course_group_id => 0).joins("join users on members.user_id = users.id").order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@sort}, login #{@b_sort}").select{|m| m.roles.to_s.include?("Student")}
# end
if q . nil? || q == " "
else
members = [ ]
@members . each do | m |
username = m . user [ :lastname ] . to_s . downcase + m . user [ :firstname ] . to_s . downcase
if m && m . user && ( m . user . user_extensions [ :student_id ] . to_s . downcase . include? ( q ) || username . include? ( q ) )
members << m
end
end
@members = members
end
@members . each do | member |
member [ :course_score ] = ( member . score . nil? ? 0 : member . score ) + ( member . ex_score . nil? ? 0 : member . ex_score )
end
@members = @members . sort { | x , y | y [ :course_score ] < = > x [ :course_score ] }
#分页
@member_count = @members . count
@all_member_ids = @members . map ( & :id ) . join ( " , " )
@limit = 20
@is_remote = true
@page = ( params [ 'page' ] || 1 ) . to_i
@member_pages = Paginator . new @member_count , @limit , params [ 'page' ] || 1
@offset || = @member_pages . offset
@members = paginateHelper @members , @limit
# @teacher_count = TeacherAndAssistantCount @course
if @course . try ( :id ) != 1309 || User . current . admin? || User . current . try ( :id ) == 15582
@teacher_count = @course . members . includes ( :roles , :user ) . where ( " roles.id " = > [ 3 , 7 , 9 ] ) . count
else
@teacher_count = @course . members . includes ( :roles , :user ) . where ( " roles.id " = > [ 3 , 7 ] ) . count
end
@student_count = studentCount ( @course )
@no_group_count = @course . members . where ( :course_group_id = > 0 ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
@left_nav_type = 9
respond_to do | format |
format . js
format . html { render :layout = > 'base_courses' }
end
end
def has_group_student_list
#@order, @r_sort = params[:order] || "student_id", params[:sort] || "asc"
#@sort = @r_sort == "desc" ? "asc" : "desc"
@search = params [ :search ]
q = params [ :search ] ? " #{ params [ :search ] . strip } " : " "
@group = @course . course_groups . find params [ :group_id ]
@members = Member . find_by_sql ( " 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 . homework_type in ( 1 , 3 , 4 )
AND homework_commons . course_id = #{@course.id}
AND student_works . user_id = members . user_id
) AS score , ( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_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 = #{@group.id}")
# if @order == "student_id"
# @members = @course.members.where(:course_group_id => @group.id).joins("join user_extensions on members.user_id = user_extensions.user_id").select{|m| m.roles.to_s.include?("Student")}.reorder("student_id #{@sort}")
# else
# @members = @course.members.where(:course_group_id => @group.id).joins("join users on members.user_id = users.id").select{|m| m.roles.to_s.include?("Student")}.reorder("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@sort}, login #{@b_sort}")
# end
if q . nil? || q == " "
else
members = [ ]
@members . each do | m |
username = m . user [ :lastname ] . to_s . downcase + m . user [ :firstname ] . to_s . downcase
if m && m . user && ( m . user . user_extensions [ :student_id ] . to_s . downcase . include? ( q ) || username . include? ( q ) )
members << m
end
end
@members = members
end
@members . each do | member |
member [ :course_score ] = ( member . score . nil? ? 0 : member . score ) + ( member . ex_score . nil? ? 0 : member . ex_score )
end
@members = @members . sort { | x , y | y [ :course_score ] < = > x [ :course_score ] }
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
#分页
@member_count = @members . count
@all_member_ids = @members . map ( & :id ) . join ( " , " )
@limit = 20
@is_remote = true
@page = ( params [ 'page' ] || 1 ) . to_i
@member_pages = Paginator . new @member_count , @limit , params [ 'page' ] || 1
@offset || = @member_pages . offset
@members = paginateHelper @members , @limit
# @teacher_count = TeacherAndAssistantCount @course
if @course . try ( :id ) != 1309 || User . current . admin? || User . current . try ( :id ) == 15582
@teacher_count = @course . members . includes ( :roles , :user ) . where ( " roles.id " = > [ 3 , 7 , 9 ] ) . count
else
@teacher_count = @course . members . includes ( :roles , :user ) . where ( " roles.id " = > [ 3 , 7 ] ) . count
end
@student_count = studentCount ( @course )
@no_group_count = @course . members . where ( :course_group_id = > 0 ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
@left_nav_type = 10
respond_to do | format |
format . js
format . html { render :layout = > 'base_courses' }
end
end
def choose_course_group
@member_ids = params [ :member_ids ] . split ( " , " )
if params [ :group_id ]
@groups = @course . course_groups . where ( " id != #{ params [ :group_id ] } " ) . order ( " name asc " )
else
@groups = @course . course_groups . order ( " name asc " )
end
@group_id = params [ :group_id ]
respond_to do | format |
format . js
end
end
def search_course_teacher_list
q = params [ :search ] ? " #{ params [ :search ] . strip } " : " "
@members = searchTeacherAndAssistantNoManager ( @course )
if q . nil? || q == " "
else
members = [ ]
@members . each do | m |
username = m . user [ :lastname ] . to_s . downcase + m . user [ :firstname ] . to_s . downcase
if m && m . user && ( m . user [ :login ] . to_s . downcase . include? ( q ) || m . user [ :mail ] . to_s . downcase . include? ( q ) || username . include? ( q ) )
members << m
end
end
@members = members
end
end
#查找未分班的学生
def search_not_group_member
@group = CourseGroup . find params [ :group_id ]
@search = params [ :search ]
q = params [ :search ] ? " #{ params [ :search ] . strip } " : " "
@members = [ ]
@members = @course . members . where ( " course_group_id = 0 " ) . joins ( " join user_extensions on members.user_id = user_extensions.user_id " ) . order ( " student_id asc " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
if q . nil? || q == " "
else
members = [ ]
@members . each do | m |
username = m . user [ :lastname ] . to_s . downcase + m . user [ :firstname ] . to_s . downcase
if m && m . user && ( m . user [ :login ] . to_s . downcase . include? ( q ) || m . user . user_extensions [ :student_id ] . to_s . downcase . include? ( q ) || username . include? ( q ) )
members << m
end
end
@members = members
end
@is_search = params [ :is_search ] ? 1 : 0
respond_to do | format |
format . js
end
end
def add_members
@group = CourseGroup . find params [ :group_id ]
if @group && params [ :chooseStudent ]
params [ :chooseStudent ] . each do | mem |
member = Member . find mem
if member && member . course == @course
member . update_attribute ( 'course_group_id' , @group . id )
end
end
redirect_to group_member_course_path ( @course , :group_id = > @group . id )
end
end
def unjoin_group
#@subPage_title = l :label_student_list
group = CourseGroup . find ( params [ :group_id ] )
member = Member . find params [ :member ]
@user = member . user
member . course_group_id = 0
member . save
@group = group
@course = @group . course
@teacher_count = searchTeacherAndAssistant ( @course ) . count
@student_count = @course . student . count
@no_group_count = @course . members . where ( " course_group_id = 0 " ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
end
def searchgroupmembers
@subPage_title = l :label_student_list
@render_file = 'new_member_list'
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@is_remote = true
@sort_type = 'score'
@score_sort_by = " desc "
@search_name = " "
if params [ :group_id ] && params [ :group_id ] != " 0 " && params [ :group_id ] != " -1 "
@group = CourseGroup . find ( params [ :group_id ] )
@results = student_homework_score ( @group . id , 0 , 0 , " desc " )
# @results = paginateHelper @results, 10
elsif params [ :group_id ] && params [ :group_id ] == " -1 "
@group = - 1
@results = student_homework_score ( - 1 , 0 , 10 , " desc " )
else
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
@results = student_homework_score ( 0 , page_from , 10 , " desc " )
end
@no_group_count = @course . members . where ( :course_group_id = > 0 ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
@course_groups = @course . course_groups
@limit = 50
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@members_count = @results . count
@mem_pages = Paginator . new @members_count , @limit , @page
@results = paginateHelper @results , @limit
end
def group_member
@canShowCode = isCourseTeacher ( User . current . id , @course )
@sort_type = 'score'
@score_sort_by = " desc "
if params [ :group_id ] && params [ :group_id ] != " 0 " && params [ :group_id ] != " -1 "
@group = CourseGroup . find ( params [ :group_id ] )
@results = student_homework_score ( @group . id , 0 , 0 , " desc " )
else
page_from = params [ :page ] . nil? ? 0 : ( params [ :page ] . to_i - 1 )
@results = student_homework_score ( 0 , page_from , 10 , " desc " )
end
@limit = 50
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@members_count = @results . count
@mem_pages = Paginator . new @members_count , @limit , @page
@results = paginateHelper @results , @limit
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . js
end
end
def member
if User . current . member_of_course? ( @course ) || User . current . admin?
# 当前用户查看班级消息时,设置消息为已读
update_messsages_to_viewed ( " CourseMessage " , @course )
## 有角色参数的才是课程,没有的就是项目
@order , @r_sort = params [ :order ] || " student_id " , params [ :sort ] || " asc "
@sort = @r_sort == " desc " ? " asc " : " desc "
@search = params [ :search ]
q = params [ :search ] ? " #{ params [ :search ] . strip } " : " "
if params [ :role ] == 't'
@members = searchTeacherAndAssistant ( @course )
elsif params [ :role ] == 'as'
if @order == " student_id "
@members = @course . members . joins ( " join user_extensions on members.user_id = user_extensions.user_id " ) . order ( " student_id #{ @sort } " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
else
@members = @course . members . joins ( " join users on members.user_id = users.id " ) . order ( " CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{ @sort } , login #{ @b_sort } " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
end
elsif params [ :role ] == 'ns'
if @order == " student_id "
@members = @course . members . where ( :course_group_id = > 0 ) . joins ( " join user_extensions on members.user_id = user_extensions.user_id " ) . order ( " student_id #{ @sort } " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
else
@members = @course . members . where ( :course_group_id = > 0 ) . joins ( " join users on members.user_id = users.id " ) . order ( " CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{ @sort } , login #{ @b_sort } " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
end
else
@group = @course . course_groups . find params [ :role ]
if @order == " student_id "
@members = @course . members . where ( :course_group_id = > @group . id ) . joins ( " join user_extensions on members.user_id = user_extensions.user_id " ) . order ( " student_id #{ @sort } " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
else
@members = @course . members . where ( :course_group_id = > @group . id ) . joins ( " join users on members.user_id = users.id " ) . order ( " CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{ @sort } , login #{ @b_sort } " ) . select { | m | m . roles . to_s . include? ( " Student " ) }
end
end
if q . nil? || q == " "
else
members = [ ]
@members . each do | m |
username = m . user [ :lastname ] . to_s . downcase + m . user [ :firstname ] . to_s . downcase
if m && m . user && ( m . user . user_extensions [ :student_id ] . to_s . downcase . include? ( q ) || username . include? ( q ) )
members << m
end
end
@members = members
end
#分页
@member_count = @members . count
@limit = 20
@is_remote = true
@page = ( params [ 'page' ] || 1 ) . to_i
@member_pages = Paginator . new @member_count , @limit , params [ 'page' ] || 1
@offset || = @member_pages . offset
@members = paginateHelper @members , @limit
@teacher_count = TeacherAndAssistantCount @course
@student_count = studentCount ( @course )
@no_group_count = @course . members . where ( :course_group_id = > 0 ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
respond_to do | format |
if @search
format . js
else
format . html { render :layout = > 'base_edu' }
format . js
end
end
else
render_403
end
end
def export_course_member_excel
q = params [ :name ] ? " #{ params [ :name ] . strip } " : " "
filename = " #{ @course . teacher . show_real_name . to_s } _ #{ @course . name } _ #{ l ( :excel_member_list ) } " ;
if params [ :group_id ] && params [ :group_id ] != " 0 " && params [ :group_id ] != " -1 "
group = CourseGroup . find params [ :group_id ]
unless group . nil?
@all_members = searchmember_by_name ( student_homework_score ( group . id , 0 , 0 , " desc " ) , q )
filename = " #{ @course . teacher . show_real_name . to_s } _ #{ @course . name } _ #{ group . name } _ #{ l ( :excel_member_list ) } "
end
elsif params [ :group_id ] && params [ :group_id ] == " 0 "
@all_members = searchmember_by_name ( student_homework_score ( - 1 , 0 , 10 , " desc " ) , q )
filename = " #{ @course . teacher . show_real_name . to_s } _ #{ @course . name } _未分班_ #{ l ( :excel_member_list ) } "
else
@all_members = searchmember_by_name ( student_homework_score ( 0 , 0 , 10 , " desc " ) , q )
end
@homeworks = @course . homework_commons . where ( " publish_time <= ' #{ Time . now } ' " ) . order ( " publish_time asc, created_at asc " )
@exercises = @course . exercises . where ( " publish_time <= ' #{ Time . now } ' " ) . order ( " publish_time asc, created_at asc " )
@tasks = @course . graduation_tasks . where ( " publish_time <= ' #{ Time . now } ' " ) . order ( " publish_time asc, created_at asc " )
@homeworks . where ( :homework_type = > 4 ) . each do | homework |
items = homework . student_works . where ( " work_status != 0 " )
if items . count == 0 && homework . publish_time < Time . now && ! @course . is_end
update_shixun_work_status homework
end
end
respond_to do | format |
format . xls {
send_data ( member_to_xls ( @homeworks , @exercises , @tasks , @course , @all_members , @course . course_groups ) , :type = > " text/excel;charset=utf-8; header=present " ,
:filename = > filename_for_content_disposition ( " #{ filename } .xls " ) )
}
end
end
def member_score_sort
@canShowCode = isCourseTeacher ( User . current . id , @course ) && params [ :role ] != '1'
@subPage_title = l :label_student_list
@render_file = 'new_member_list'
@is_remote = true
@sort_type = params [ :sort_type ] if params [ :sort_type ]
@score_sort_by = params [ :sort_by ] if params [ :sort_by ]
@search_name = params [ :search_name ] if params [ :search_name ]
group_id = params [ :group_id ]
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 , @sort_type ) , @search_name )
# @results = paginateHelper @results, 10
elsif group_id == '-1'
@group = - 1
@results = searchmember_by_name ( student_homework_score ( - 1 , 0 , 0 , @score_sort_by , @sort_type ) , @search_name )
else
@group = CourseGroup . find ( group_id )
@results = searchmember_by_name ( student_homework_score ( group_id , 0 , 0 , @score_sort_by , @sort_type ) , @search_name )
# @results = paginateHelper @results, 10
end
else
if group_id == '0'
page = params [ :page ] . nil? ? 0 : ( params [ 'page' ] . to_i - 1 )
@results = student_homework_score ( 0 , page , 10 , @score_sort_by , @sort_type )
elsif group_id == '-1'
@group = - 1
@results = student_homework_score ( - 1 , 0 , 10 , @score_sort_by , @sort_type )
else
@group = CourseGroup . find ( group_id )
@results = student_homework_score ( group_id , 0 , 0 , @score_sort_by , @sort_type )
end
end
@limit = 50
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@members_count = @results . count
@no_group_count = @course . members . where ( :course_group_id = > 0 ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
@mem_pages = Paginator . new @members_count , @limit , @page
@results = paginateHelper @results , @limit
end
# 显示每个学生的作业评分详情
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
end
end
# 显示每个学生的作业评分详情
def show_member_act_score
@member = Member . find ( params [ :member_id ] ) if params [ :member_id ]
respond_to do | format |
format . html { render :layout = > 'course_base' }
format . js
end
end
def delete_member
member = @course . members . find params [ :member_id ]
student_role = member . member_roles . where ( " role_id = 10 " ) . first
teacher_role = member . member_roles . where ( " role_id = 7 || role_id = 9 " ) . first
joined = StudentsForCourse . where ( 'student_id = ? and course_id = ?' , member . user_id , @course . id )
joined . destroy_all
if member && member . deletable? && student_role
user_admin = CourseInfos . where ( " user_id = ? and course_id = ? " , member . user_id , @course . id )
if user_admin . size > 0
user_admin . destroy_all
end
if member . member_roles . count > 1 && student_role && teacher_role
student_role . destroy
teacher_role . update_attribute ( " is_current " , 1 )
member . update_attribute ( " course_group_id " , 0 )
else
member . destroy
end
#移出课程发送消息
CourseMessage . create ( :user_id = > member . user_id , :course_id = > @course . id , :course_message_type = > " RemoveFromCourse " , :viewed = > false , :course_message_id = > User . current . id )
@course_groups = @course . course_groups
@no_group_count = @course . members . where ( :course_group_id = > 0 ) . select { | m | m . roles . to_s . include? ( " Student " ) } . count
@canShowCode = isCourseTeacher ( User . current . id , @course )
respond_to do | format |
format . js
end
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
if User . current . allowed_to? ( :as_teacher , @course )
@board = @course . boards . where ( :parent_id = > 0 ) . first
@course_boards = @board . children . reorder ( " position asc " )
@tab = params [ :tab ] ? params [ :tab ] . to_i : 1
@curr_page = " 设置 "
respond_to do | format |
format . html { render :layout = > 'base_edu_course' }
format . api { render_validation_errors ( @course ) }
end
else
render_403
end
end
def update_course_module
course_modules = @course . course_modules
course_modules . where ( :module_type = > 'activity' ) . first . update_attributes ( :module_name = > params [ :name ] [ 0 ] )
for i in 1 .. 9
course_module = course_modules . where ( :module_type = > params [ :position ] [ i ] ) . first
if course_module . present?
course_module . update_attributes ( :position = > i + 1 , :module_name = > params [ :name ] [ i ] == " " ? course_module . default_module_name : params [ :name ] [ i ] )
end
end
# params[:message] 有值 就更行字段: 0为不隐藏, 1为隐藏
type = [ " shixun_homework " , " common_homework " , " group_homework " , " graduation " , " exercise " , " poll " , " attachment " , " board " , " course_group " ]
hidden = type - params [ :message ]
course_modules . where ( :module_type = > params [ :message ] ) . update_all ( :hidden = > 0 )
course_modules . where ( :module_type = > hidden ) . update_all ( :hidden = > 1 )
if params [ :teacher_list ] && params [ :teacher_list ] . strip != " "
@course . update_attributes ( :teacher_list = > params [ :teacher_list ] . strip )
end
if params [ :student_list ] && params [ :student_list ] . strip != " "
@course . update_attributes ( :student_list = > params [ :student_list ] . strip )
end
respond_to do | format |
format . js
end
end
def private_or_public
if @course . is_public == 0
@course . update_attributes ( :is_public = > 1 )
else
@course . update_attributes ( :is_public = > 0 )
end
if @course . is_public == 0
course_status = CourseStatus . find_by_course_id ( @course . id )
course_status . destroy if course_status
elsif @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
@syllabus = @course . syllabus
respond_to do | format |
format . js
end
end
def search_member
if User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin
q = " #{ params [ :name ] . strip } "
@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
def create
cs = CoursesService . new
@course = cs . create_course ( params , User . current ) [ :course ]
if @course
#发送微信消息
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{User.current.id} and shield_type='Course' and shield_id=#{@course.id}").count
# if count == 0
# ss = SyllabusesService.new
# ss.send_wechat_create_class_notice User.current,@course
# end
respond_to do | format |
flash [ :notice ] = l ( :notice_successful_create )
format . html { redirect_to course_url ( @course ) }
format . api { render :action = > 'show' , :status = > :created , :location = > url_for ( :controller = > 'courses' , :action = > 'show' , :id = > @course . id ) }
end
else
respond_to do | format |
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
end
end
def course
@school_id = params [ :school_id ]
per_page_option = 10
if @school_id == " 0 " or @school_id . nil?
@courses_all = Course . active . visible .
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " )
else
@courses_all = Course . active . visible .
joins ( " LEFT JOIN #{ CourseStatus . table_name } ON #{ Course . table_name } .id = #{ CourseStatus . table_name } .course_id " ) .
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 {
render :layout = > 'new_base'
}
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
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 ]
@syllabus = Syllabus . where ( " id = #{ params [ :syllabus_id ] . to_i } " ) . first if params [ :syllabus_id ]
# month = Time.now.month
render :layout = > 'base_edu'
else
redirect_to signin_url
end
end
def search_course_list
data = { courses : [ ] }
search = params [ :search ] ? " % #{ params [ :search ] . strip } % " : " %% "
CourseList . where ( " name like ' #{ search } ' " ) . each do | course |
option = [ ]
option << course . name . to_s
option << course . id
data [ :courses ] << option
end
render :json = > data
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 create_homework_category
if params [ :category_name ]
@course . course_homework_categories << CourseHomeworkCategory . new ( :name = > params [ :category_name ] )
end
# redirect_to homework_common_index_path(:course => @course.id, :homework_type => 4)
end
# 重命名实训作业目录
def rename_homework_category
if request . get?
@category = @course . course_homework_categories . where ( :id = > params [ :category_id ] ) . first
else
category = @course . course_homework_categories . where ( :id = > params [ :category_id ] ) . first
if category . present?
category . update_attributes ( :name = > params [ :category_name ] )
end
redirect_to homework_common_index_path ( :course = > @course . id , :homework_type = > 4 , :category = > params [ :category_id ] )
end
end
# 删除实训作业子目录
def delete_homework_category
category = @course . course_homework_categories . where ( :id = > params [ :category_id ] ) . first
if category . present?
category . homework_commons . update_all ( :course_homework_category_id = > nil )
category . destroy
end
redirect_to homework_common_index_path ( :course = > @course . id , :homework_type = > 4 )
end
def toggleCourse
@course_prefs = Course . find_by_extra ( @course . extra )
unless ( User . current . allowed_to? ( :as_teacher , @course_prefs ) || User . current . admin? )
render_403
end
end
def is_deleted
if @course . is_delete == 1 and ! User . current . admin?
render_404
return
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
def course_activity
redirect_to course_url ( @course , type : params [ :type ] , page : params [ :page ] )
end
def show
if LocalSetting . first . try ( :exam ) && ! User . current . admin?
else
# 被删除的课程只有超级管理员才能看到, is_delete为1的时候, 标记课程被删除
# if @course.is_delete == 1 && !User.current.admin?
# render_403
# return
# end
#更新创建课程消息状态
# course_request_messages = CourseMessage.where(:user_id => User.current.id, :course_id => @course.id, :course_message_type => ["CourseRequestDealResult", "Course"], :viewed => false)
# course_request_messages.update_all(:viewed => true)
# 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)
#更新申请结果反馈消息的状态
# course_request_messages = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @course.id, 'CourseRequestDealResult', false)
# course_request_messages.update_all(:viewed => true)
@course_modules = @course . course_modules . where ( :hidden = > 0 )
course_module_type = @course_modules . map ( & :module_type )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
if User . current . member_of_course? ( @course ) && ! @is_teacher
member = @course . members . where ( :user_id = > User . current . id ) . first
if member . try ( :course_group_id ) . to_i == 0
common_homework_ids = @course . homework_commons . where ( " homework_type = 1 and unified_setting = 1 " )
shixun_homework_ids = @course . homework_commons . where ( " homework_type = 4 and unified_setting = 1 " )
group_homework_ids = @course . homework_commons . where ( " homework_type = 3 and unified_setting = 1 " )
exercise_ids = @course . exercises . where ( " unified_setting = 1 " )
poll_ids = @course . polls . where ( " unified_setting = 1 " )
atta_ids = @course . attachments . where ( " unified_setting = 1 " )
else
not_homework_ids = @course . homework_group_settings . where ( " course_group_id = #{ member . try ( :course_group_id ) } and (publish_time > ' #{ Time . now } ' or publish_time is null) " )
not_homework_ids = not_homework_ids . blank? ? " (-1) " : " ( " + not_homework_ids . map ( & :homework_common_id ) . join ( " , " ) + " ) "
common_homework_ids = @course . homework_commons . where ( " homework_type = 1 and id not in #{ not_homework_ids } " )
shixun_homework_ids = @course . homework_commons . where ( " homework_type = 4 and id not in #{ not_homework_ids } " )
group_homework_ids = @course . homework_commons . where ( " homework_type = 3 and id not in #{ not_homework_ids } " )
not_exercise_ids = @course . exercise_group_settings . where ( " course_group_id = #{ member . try ( :course_group_id ) } and (publish_time > ' #{ Time . now } ' or publish_time is null) " )
not_exercise_ids = not_exercise_ids . blank? ? " (-1) " : " ( " + not_exercise_ids . map ( & :exercise_id ) . join ( " , " ) + " ) "
exercise_ids = @course . exercises . where ( " id not in #{ not_exercise_ids } " )
not_poll_ids = @course . poll_group_settings . where ( " course_group_id = #{ member . try ( :course_group_id ) } and (publish_time > ' #{ Time . now } ' or publish_time is null) " )
not_poll_ids = not_poll_ids . blank? ? " (-1) " : " ( " + not_poll_ids . map ( & :poll_id ) . join ( " , " ) + " ) "
poll_ids = @course . polls . where ( " id not in #{ not_poll_ids } " )
not_atta_ids = @course . attachment_group_settings . where ( " course_group_id = #{ member . try ( :course_group_id ) } and publish_time > ' #{ Time . now } ' " )
not_atta_ids = not_atta_ids . blank? ? " (-1) " : " ( " + not_atta_ids . map ( & :attachment_id ) . join ( " , " ) + " ) "
atta_ids = @course . attachments . where ( " id not in #{ not_atta_ids } " )
end
else
common_homework_ids = @course . homework_commons . where ( " homework_type = 1 " )
shixun_homework_ids = @course . homework_commons . where ( " homework_type = 4 " )
group_homework_ids = @course . homework_commons . where ( " homework_type = 3 " )
exercise_ids = @course . exercises
poll_ids = @course . polls
atta_ids = @course . attachments
end
common_homework_ids = common_homework_ids . blank? ? " (-1) " : " ( " + common_homework_ids . map ( & :id ) . join ( " , " ) + " ) "
shixun_homework_ids = shixun_homework_ids . blank? ? " (-1) " : " ( " + shixun_homework_ids . map ( & :id ) . join ( " , " ) + " ) "
group_homework_ids = group_homework_ids . blank? ? " (-1) " : " ( " + group_homework_ids . map ( & :id ) . join ( " , " ) + " ) "
exercise_ids = exercise_ids . blank? ? " (-1) " : " ( " + exercise_ids . map ( & :id ) . join ( " , " ) + " ) "
poll_ids = poll_ids . blank? ? " (-1) " : " ( " + poll_ids . map ( & :id ) . join ( " , " ) + " ) "
atta_ids = atta_ids . blank? ? " (-1) " : " ( " + atta_ids . map ( & :id ) . join ( " , " ) + " ) "
if @is_teacher && course_module_type . include? ( 'board' )
course_act_type = " ('Message', 'JoinCourse') "
elsif @is_teacher
course_act_type = " ('JoinCourse') "
elsif course_module_type . include? ( 'board' )
course_act_type = " ('Message') "
else
course_act_type = " ('0') "
end
sql_str = " course_act_type in #{ course_act_type } "
@course_modules . each do | course_module |
case course_module . module_type
when " shixun_homework "
sql_str += " or (course_act_type = 'HomeworkCommon' && course_act_id in #{ shixun_homework_ids } ) "
when " common_homework "
sql_str += " or (course_act_type = 'HomeworkCommon' && course_act_id in #{ common_homework_ids } ) "
when " group_homework "
sql_str += " or (course_act_type = 'HomeworkCommon' && course_act_id in #{ group_homework_ids } ) "
when " graduation "
sql_str += " or (course_act_type = 'GraduationTopic' or course_act_type = 'GraduationTask') "
when " exercise "
sql_str += " or (course_act_type = 'Exercise' && course_act_id in #{ exercise_ids } ) "
when " poll "
sql_str += " or (course_act_type = 'Poll' && course_act_id in #{ poll_ids } ) "
when " attachment "
sql_str += " or (course_act_type = 'Attachment' && course_act_id in #{ atta_ids } ) "
end
end
@page = params [ :page ] ? params [ :page ] . to_i + 1 : 0
if params [ :type ] . present?
case params [ :type ]
when " common_homework "
# homework_ids = @course.homework_commons.where("homework_type = 1 and id in #{homework_ids}")
@course_activities = @course . course_activities . where ( " course_act_type = 'HomeworkCommon' and course_act_id in #{ common_homework_ids } " ) . order ( 'updated_at desc' )
when " shixun_homework "
# homework_ids = @course.homework_commons.where("homework_type = 4 and id in #{homework_ids}")
@course_activities = @course . course_activities . where ( " course_act_type = 'HomeworkCommon' and course_act_id in #{ shixun_homework_ids } " ) . order ( 'updated_at desc' )
when " group_homework "
# homework_ids = @course.homework_commons.where("homework_type = 3 and id in #{homework_ids}")
@course_activities = @course . course_activities . where ( " course_act_type = 'HomeworkCommon' and course_act_id in #{ group_homework_ids } " ) . order ( 'updated_at desc' )
when " graduation_topic "
@course_activities = @course . course_activities . where ( " course_act_type = 'GraduationTopic' " ) . order ( 'updated_at desc' )
when " graduation_task "
@course_activities = @course . course_activities . where ( " course_act_type = 'GraduationTask' " ) . order ( 'updated_at desc' )
when " news "
@course_activities = @course . course_activities . where ( " course_act_type = 'News' " ) . order ( 'updated_at desc' )
when " message "
@course_activities = @course . course_activities . where ( " course_act_type = 'Message' " ) . order ( 'updated_at desc' )
when " poll "
@course_activities = @course . course_activities . where ( " course_act_type = 'Poll' && course_act_id in #{ poll_ids } " ) . order ( 'updated_at desc' )
when " exercise "
@course_activities = @course . course_activities . where ( " course_act_type = 'Exercise' && course_act_id in #{ exercise_ids } " ) . order ( 'updated_at desc' )
when " attachment "
@course_activities = @course . course_activities . where ( " course_act_type = 'Attachment' && course_act_id in #{ atta_ids } " ) . order ( 'updated_at desc' )
when 'JoinCourse'
@course_activities = @course . course_activities . where ( " course_act_type = 'JoinCourse' " ) . order ( 'updated_at desc' )
when " journalsForMessage "
@course_activities = @course . course_activities . where ( " course_act_type = 'JournalsForMessage' " ) . order ( 'updated_at desc' )
else
@course_activities = @course . course_activities . where ( " #{ sql_str } " ) . order ( 'updated_at desc' )
end
else
@course_activities = @course . course_activities . where ( " #{ sql_str } " ) . order ( 'updated_at desc' )
end
@course_activities_count = @course_activities . size
@course_activities = @course_activities . limit ( 10 ) . offset ( @page * 10 )
@type = params [ :type ]
@left_nav_type = 1
@show_page = true
end
respond_to do | format |
format . js
format . html { render :layout = > 'base_courses' }
format . api
end
end
#判断指定用户是否为课程教师
def isCourseTeacher ( id , course )
result = false
user = User . find ( id )
if ! user . nil? && user . allowed_to? ( :as_teacher , course )
result = true
end
result
end
def feedback
CourseMessage . where ( " user_id = ? and course_id = ? " , User . current , @course . id ) . update_all ( :viewed = > true )
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' )
@jour_count = @jours . count
@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
@left_nav_type = 6
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . api
end
else
render_403
end
end
def search_homework_member homeworks , name
if name == " "
select_homework = homeworks
else
name = name . downcase
select_homework = homeworks . select { | homework |
homework . user [ :login ] . to_s . downcase . include? ( name ) || homework . user . user_extensions [ :student_id ] . to_s . downcase . include? ( name ) || ( homework . user [ :lastname ] . to_s . downcase + homework . user [ :firstname ] . to_s . downcase ) . include? ( name )
}
end
select_homework
end
# 作业查重
def code_repeat
#代码查重新加的
@index = params [ :index ]
@order , @b_sort , @name , @group = params [ :order ] || " score " , params [ :sort ] || " desc " , params [ :name ] || " " , params [ :group ]
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
if ! @is_teacher
render_403
return
end
@homework = HomeworkCommon . find params [ :homework ]
#order("#{@order} #{@b_sort}"
@student_works = search_homework_member @homework . student_works . select ( " student_works.*,IF(final_score is null,null,IF(final_score = 0, 0, final_score - absence_penalty - late_penalty)) as score " ) . order ( " simi_value desc " ) . has_committed , @name
@works_hash = { }
@student_works . each do | tmpwork |
@works_hash [ tmpwork . id ] = tmpwork
puts tmpwork . id
end
respond_to do | format |
format . html { render :layout = > 'base_edu' }
end
end
def show_comparecode
@index = params [ :index ]
src_id = params [ :src_id ]
dst_id = params [ :dst_id ]
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
if ! @is_teacher
render_403
return
end
src_work = StudentWork . where ( " id =? " , src_id ) . first
@homework = HomeworkCommon . find params [ :homework_id ]
@simi_value = src_work . simi_value . to_i
@src_code = src_work . description
src_user = User . where ( " id =? " , src_work . user_id ) . first
@src_username = src_user . try ( :realname ) != " " ? src_user . lastname + src_user . firstname : src_user . try ( :login )
#descriotion user name
dst_work = StudentWork . where ( " id =? " , dst_id ) . first
@dst_code = dst_work . description
dst_user = User . where ( " id =? " , dst_work . user_id ) . first
@dst_username = dst_user . try ( :realname ) != " " ? dst_user . lastname + dst_user . firstname : dst_user . try ( :login )
respond_to do | format |
format . html { render :layout = > 'base_edu' }
end
end
# 判断非本课堂成员的老师是否有权限复制课堂
def validate_copy_permission
status = 0
if User . current . professional_certification && User . current . user_extensions . identity == 0
status = 1
end
render :json = > { :status = > status }
end
#根据已有课程复制课程
#param id:已有课程ID
def copy_course
unless User . current . logged?
return render_403
end
cs = CoursesService . new
course = cs . copy_a_course ( @course ) [ :course ]
if course
redirect_to course_path ( course )
end
end
#从课程创建的老师那里选择课程大纲
def course_outline
@teacher = User . find ( @course . tea_id )
@blog_articles = @teacher . blog . articles
@is_in_show_outline_page = params [ :is_in_show_outline_page ]
respond_to do | format |
format . js
end
end
#根据关键字搜索,查找方法一样的,但返回内容不一样
def search_course_outline
@article_title = params [ :title ]
@teacher = User . find ( @course . tea_id )
@blog_articles = @teacher . blog . articles . like ( @article_title )
render :json = > @blog_articles . to_json
end
#设置或者更改课程的大纲
def set_course_outline
@course . outline = params [ :outline_id ]
@course . save
@is_in_show_outline_page = params [ :is_in_show_outline_page ]
respond_to do | format |
format . js
end
end
#显示课程大纲
def syllabus
@article = BlogComment . find ( @course . outline )
respond_to do | format |
format . html { render :layout = > 'base_courses' }
end
end
#删除课程
#删除课程只是将课程的is_deleted状态改为false, is_deleted为false状态的课程只有管理员可以看到
def destroy
@course_id = @course . id
syllabus = @course . syllabus
@course . delete!
respond_to do | format |
format . js
format . html { redirect_to courses_path ( ) }
end
# redirect_to :back
end
#归档班级
def archive_course
if params [ :source ] == " 1 "
@syllabus = @course . syllabus
end
if params [ :type ] == " 0 "
@course . delete!
else
@course . update_attribute ( :is_delete , false )
end
respond_to do | format |
format . js
end
end
# 恢复已删除的课程
def renew
if User . current . admin?
@course . update_attributes ( :is_delete = > false )
redirect_to course_path ( @course )
else
return 404
end
end
#搜索作业
def homework_search
@search = " % #{ params [ :search ] . strip . downcase } % "
@is_teacher = User . current . logged? && ( User . current . admin? || User . current . allowed_to? ( :as_teacher , @course ) )
@page = params [ :page ] ? params [ :page ] . to_i + 1 : 0
if @is_teacher
@homeworks = @course . homework_commons . where ( " name like '% #{ @search } %' " ) . order ( " created_at desc " ) . limit ( 10 ) . offset ( @page * 10 )
else
@homeworks = @course . homework_commons . where ( " name like '% #{ @search } %' and publish_time <= ' #{ Time . now } ' " ) . order ( " created_at desc " ) . limit ( 10 ) . offset ( @page * 10 )
end
end
#统计
def course_statistics
@left_nav_type = 10
@order = params [ :order ] ? params [ :order ] : 'desc'
@tab = params [ :tab ] ? params [ :tab ] . to_i : nil
if ! params [ :tab ] || params [ :tab ] == " 1 "
@type = params [ :type ] ? params [ :type ] : 'act_score'
sql = " 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) AS act_score,
message_num , message_reply_num , news_reply_num , news_num , resource_num , journal_num , homework_journal_num , ccs . user_id FROM course_contributor_scores ccs
JOIN students_for_courses ON students_for_courses . course_id = ccs . course_id AND students_for_courses . student_id = ccs . user_id
WHERE ccs . course_id = #{@course.id} ORDER BY #{@type} #{@order}, act_score #{@order}"
@members = CourseContributorScore . find_by_sql ( sql )
elsif params [ :tab ] == " 2 "
@type = params [ :type ] ? params [ :type ] : 'total_score'
@members = @course . course_homework_statisticss . reorder ( " #{ @type } #{ @order } , total_score #{ @order } " )
elsif params [ :tab ] == " 3 "
@homework_id = params [ :homework_id ] ? params [ :homework_id ] . to_i : 0
@type = params [ :type ] ? params [ :type ] : 'project_act_score'
if @homework_id == 0
sql = " SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score,
changeset_num , issue_num , issue_journal_num , attach_num , board_num , board_message_num , pss . project_id FROM project_scores pss
JOIN student_work_projects ON student_work_projects . project_id = pss . project_id AND student_work_projects . course_id = #{@course.id}
GROUP BY pss . project_id ORDER BY #{@type} #{@order}, project_act_score #{@order}"
else
sql = " SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score,
changeset_num , issue_num , issue_journal_num , attach_num , board_num , board_message_num , pss . project_id FROM project_scores pss
JOIN student_work_projects ON student_work_projects . project_id = pss . project_id AND student_work_projects . course_id = #{@course.id} AND student_work_projects.homework_common_id = #{@homework_id}
GROUP BY pss . project_id ORDER BY #{@type} #{@order}, project_act_score #{@order}"
end
@members = ProjectScore . find_by_sql ( sql )
end
@limit = 20
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@members_count = @members . count
@mem_pages = Paginator . new @members_count , @limit , @page
@members = paginateHelper @members , @limit
respond_to do | format |
format . js
format . html { render :layout = > 'base_courses' }
end
end
#切换身份
def switch_role
members = @course . members . where ( " user_id = #{ params [ :user_id ] } " )
unless members . blank?
#role = MemberRole.where("member_id = #{members.first.id} and role_id = #{params[:role]}").first
curr_role = MemberRole . find_by_member_id_and_role_id ( members . first . id , params [ :curr_role ] )
tar_role = MemberRole . find_by_member_id_and_role_id ( members . first . id , params [ :tar_role ] )
unless ( curr_role . nil? || tar_role . nil? )
curr_role . update_column ( 'is_current' , 0 )
tar_role . update_column ( 'is_current' , 1 )
end
end
redirect_to course_path ( @course )
end
def search_not_teachers
# members = searchTeacherAndAssistant @course
member_ids = Member . find_by_sql ( " SELECT user_id from members where id in (SELECT member_id FROM `member_roles` where role_id in (3,7,9)
and member_id in ( select id from members where course_id = #{@course.id}))")
member_ids = " ( " + member_ids . map ( & :user_id ) . join ( ',' ) + " ) "
condition = " % #{ params [ :search ] } % " . gsub ( " " , " " )
@school = params [ :school ] || @course . teacher . school_name
if @school != " "
school_s = " % #{ @school } % " . gsub ( " " , " " )
school_ids = School . where ( " name like ' #{ school_s } ' " ) . blank? ? " (-1) " : " ( " + School . where ( " name like ' #{ school_s } ' " ) . map ( & :id ) . join ( " , " ) + " ) "
@users = User . joins ( :user_extensions ) . where ( " users.id not in #{ member_ids } and status = 1 and LOWER(concat(lastname, firstname)) LIKE ' #{ condition } ' and user_extensions.school_id in #{ school_ids } " )
else
@users = User . where ( " id not in #{ member_ids } and status = 1 and LOWER(concat(lastname, firstname)) LIKE ' #{ condition } ' " ) . includes ( :user_extensions )
end
@role = params [ :role ] . to_i
@user_ids = @users . map ( & :id ) . join ( " , " )
@limit = 10
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@users_count = @users . count
@total_pages = ( @users_count / 10 . 0 ) . ceil
@users_pages = Paginator . new @users_count , @limit , @page
@users = paginateHelper @users , @limit
respond_to do | format |
format . js
format . json {
render json : search_teacher_json_data ( @users )
}
end
end
def search_not_students
members = @course . members . select { | m | m . roles . to_s . include? ( " Student " ) }
member_ids = members . empty? ? " (-1) " : " ( " + members . map ( & :user_id ) . join ( ',' ) + " ) "
condition = " % #{ params [ :search ] } % " . gsub ( " " , " " )
@school = params [ :school ] || @course . teacher . school_name
if @school != " "
school_s = " % #{ @school } % " . gsub ( " " , " " )
school_ids = School . where ( " name like ' #{ school_s } ' " ) . blank? ? " (-1) " : " ( " + School . where ( " name like ' #{ school_s } ' " ) . map ( & :id ) . join ( " , " ) + " ) "
@users = User . joins ( :user_extensions ) . where ( " users.id not in #{ member_ids } and status = 1 and user_extensions.school_id in #{ school_ids } and (LOWER(concat(lastname, firstname)) LIKE ' #{ condition } ' or user_extensions.student_id LIKE ' #{ condition } ') " )
else
@users = User . joins ( :user_extensions ) . where ( " users.id not in #{ member_ids } and status = 1 and (LOWER(concat(lastname, firstname)) LIKE ' #{ condition } ' or user_extensions.student_id LIKE ' #{ condition } ') " )
end
@user_ids = @users . map ( & :id ) . join ( " , " )
@limit = 8
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@users_count = @users . count
@total_pages = ( @users_count / 10 . 0 ) . ceil
@users_pages = Paginator . new @users_count , @limit , @page
@users = paginateHelper @users , @limit
respond_to do | format |
format . js
format . json {
render json : search_student_json_data ( @users )
}
end
end
private
def allow_join course
if course_endTime_timeout? course
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
@first_page = FirstPage . find_by_page_type ( 'project' )
if @first_page . try ( :show_course ) == 2
render_404
end
end
def student_homework_score ( groupid , start_from , nums , score_sort_by , sort_type = 'score' )
start_from = start_from * nums
if groupid == 0
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 SUM ( gw . work_score ) FROM graduation_works gw , graduation_tasks gt WHERE gw . graduation_task_id = gt . id
AND gt . course_id = #{@course.id} AND gw.user_id = members.user_id) AS graduation_score,
( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score,
( SELECT max ( student_id ) FROM user_extensions WHERE user_extensions . user_id = members . user_id ) AS student_id ,
( SELECT max ( message_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num,
( SELECT max ( message_reply_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num,
( SELECT max ( resource_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num,
( SELECT max ( homework_journal_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num,
( SELECT COUNT ( gw . id ) FROM graduation_works AS gw , graduation_tasks AS gt WHERE gw . graduation_task_id = gt . id AND gt . course_id = #{@course.id} AND gw.work_status != 0 AND gw.user_id = members.user_id) AS graduation_num,
( SELECT COUNT ( ss . id ) FROM student_works AS ss , homework_commons AS hc WHERE ss . homework_common_id = hc . id AND hc . course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num,
( SELECT COUNT ( eu . id ) FROM exercise_users AS eu , exercises WHERE eu . exercise_id = exercises . id AND exercises . course_id = #{@course.id} AND eu.commit_status = 1 AND eu.user_id = members.user_id) AS exercise_num,
( SELECT COUNT ( pu . id ) FROM poll_users AS pu , polls WHERE pu . poll_id = polls . id AND polls . course_id = #{@course.id} AND pu.commit_status = 1 AND pu.user_id = members.user_id) AS poll_num
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}"
elsif groupid == - 1
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 SUM ( gw . work_score ) FROM graduation_works gw , graduation_tasks gt WHERE gw . graduation_task_id = gt . id
AND gt . course_id = #{@course.id} AND gw.user_id = members.user_id) AS graduation_score,
( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score,
( SELECT max ( student_id ) FROM user_extensions WHERE user_extensions . user_id = members . user_id ) AS student_id ,
( SELECT max ( message_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num,
( SELECT max ( message_reply_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num,
( SELECT max ( resource_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num,
( SELECT max ( homework_journal_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num,
( SELECT COUNT ( gw . id ) FROM graduation_works AS gw , graduation_tasks AS gt WHERE gw . graduation_task_id = gt . id AND gt . course_id = #{@course.id} AND gw.work_status != 0 AND gw.user_id = members.user_id) AS graduation_num,
( SELECT COUNT ( ss . id ) FROM student_works AS ss , homework_commons AS hc WHERE ss . homework_common_id = hc . id AND hc . course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num,
( SELECT COUNT ( eu . id ) FROM exercise_users AS eu , exercises WHERE eu . exercise_id = exercises . id AND exercises . course_id = #{@course.id} AND eu.commit_status = 1 AND eu.user_id = members.user_id) AS exercise_num,
( SELECT COUNT ( pu . id ) FROM poll_users AS pu , polls WHERE pu . poll_id = polls . id AND polls . course_id = #{@course.id} AND pu.commit_status = 1 AND pu.user_id = members.user_id) AS poll_num
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 = 0 ORDER BY #{sort_type} #{score_sort_by}"
else
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 SUM ( gw . work_score ) FROM graduation_works gw , graduation_tasks gt WHERE gw . graduation_task_id = gt . id
AND gt . course_id = #{@course.id} AND gw.user_id = members.user_id) AS graduation_score,
( SELECT SUM ( exercise_users . score ) FROM exercise_users , exercises WHERE exercise_users . exercise_id = exercises . id
AND exercises . course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score,
( SELECT max ( student_id ) FROM user_extensions WHERE user_extensions . user_id = members . user_id ) AS student_id ,
( SELECT max ( message_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num,
( SELECT max ( message_reply_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num,
( SELECT max ( resource_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num,
( SELECT max ( homework_journal_num ) FROM course_contributor_scores AS ccs WHERE ccs . course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num,
( SELECT COUNT ( gw . id ) FROM graduation_works AS gw , graduation_tasks AS gt WHERE gw . graduation_task_id = gt . id AND gt . course_id = #{@course.id} AND gw.work_status != 0 AND gw.user_id = members.user_id) AS graduation_num,
( SELECT COUNT ( ss . id ) FROM student_works AS ss , homework_commons AS hc WHERE ss . homework_common_id = hc . id AND hc . course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num,
( SELECT COUNT ( eu . id ) FROM exercise_users AS eu , exercises WHERE eu . exercise_id = exercises . id AND exercises . course_id = #{@course.id} AND eu.commit_status = 1 AND eu.user_id = members.user_id) AS exercise_num,
( SELECT COUNT ( pu . id ) FROM poll_users AS pu , polls WHERE pu . poll_id = polls . id AND polls . course_id = #{@course.id} AND pu.commit_status = 1 AND pu.user_id = members.user_id) AS poll_num
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}"
end
sql = ActiveRecord :: Base . connection ( )
homework_scores = Member . find_by_sql ( sql_select )
sql . close ( )
homework_scores
end
#获取课程的老师列表
def find_course_teachers course
searchTeacherAndAssistant ( course ) . map { | teacher | teacher . user_id } . join ( " , " )
end
#当加入,退出分班时查询分班的学生
def search_group_members group
@render_file = 'new_member_list'
@canShowCode = isCourseTeacher ( User . current . id , @course )
@is_remote = true
@score_sort_by = " desc "
@results = student_homework_score ( group . id , 0 , 0 , " desc " )
@limit = 50
@page = params [ :page ] . nil? ? 1 : params [ 'page' ] . to_i
@members_count = @results . count
@mem_pages = Paginator . new @members_count , @limit , @page
@results = paginateHelper @results , @limit
end
def shixun_xls homeworks , course
xls_report = StringIO . new
book = Spreadsheet :: Workbook . new
blue = Spreadsheet :: Format . new :color = > :blue , :weight = > :bold , :size = > 10
black = Spreadsheet :: Format . new :color = > :black , :weight = > :bold , :size = > 10
current_row = 0
sheet = book . create_worksheet :name = > " 学员统计 "
sheet . row ( 0 ) . default_format = blue
sheet . row ( 0 ) . concat ( [ " 学生id " , " 学生姓名 " , " 作业编号 " , " 作业/实训名称 " , " 关卡 " , " 经验值 " , " 金币 " , " 评测历史 " , " 评测时间 " , " 评测结果 " ] )
course . student . each_with_index do | course , i |
# 总统计
count_exp_score = 0
count_gold_score = 0
count_test = 0
count_time = 0
game_count = 0
# end
user = course . student
current_row += 1
sheet [ current_row , 0 ] = user . login
sheet [ current_row , 1 ] = user . show_real_name
homeworks . each_with_index do | homework , j |
# 关卡统计
count_game_exp_score = 0
count_game_gold_score = 0
count_game_test = 0
count_game_time = 0
# end
sheet [ current_row , 2 ] = " # #{ get_hw_index ( homework , true , 4 ) } "
sheet [ current_row , 3 ] = homework . name
shixun = homework . homework_commons_shixuns . shixun if homework . homework_commons_shixuns
if shixun
shixun . challenges . each_with_index do | challenge , k |
sheet [ current_row , 4 ] = " 第 #{ k + 1 } 关 "
games = Game . where ( :challenge_id = > challenge . id , :user_id = > user . id )
game_count = game_count + games . count
if games . count > 0
games . each do | game |
sheet [ current_row , 5 ] = game . final_score ? " + #{ game . final_score . to_s } " : " -- "
sheet [ current_row , 6 ] = game . final_score ? ( game . answer_open? ? " #{ - challenge . score . to_i } " : " + #{ game . final_score . to_i } " ) : " -- "
count_exp_score += ( game . final_score ? game . final_score . to_i : 0 )
count_gold_score += ( game . final_score ? ( game . answer_open? ? - challenge . score . to_i : game . final_score . to_i ) : 0 )
count_game_exp_score += ( game . final_score ? game . final_score . to_i : 0 )
count_game_gold_score += ( game . final_score ? ( game . answer_open? ? - challenge . score . to_i : game . final_score . to_i ) : 0 )
count = game . outputs . count
if count > 0
outputs = game . outputs . where ( :test_set_position = > 1 ) . reorder ( " created_at asc " )
outputs . each_with_index do | output , k |
count_test += 1
count_game_test += 1
sheet [ current_row , 7 ] = " 第 #{ k + 1 } 次评测 "
sheet [ current_row , 8 ] = k == 0 ? game_spend_time ( ( output . created_at - game . created_at ) . to_i ) : game_spend_time ( ( output . created_at - outputs [ k - 1 ] . created_at ) . to_i )
count_time = count_time + ( k == 0 ? ( output . created_at - game . created_at ) . to_i : ( output . created_at - outputs [ k - 1 ] . created_at ) . to_i )
count_game_time += ( k == 0 ? ( output . created_at - game . created_at ) . to_i : ( output . created_at - outputs [ k - 1 ] . created_at ) . to_i )
sheet [ current_row , 9 ] = game . outputs . where ( :query_index = > output . query_index ) . select { | ou | ou . result == false } . count > 0 ? " 失败 " : " 成功 "
current_row += 1
end
else
current_row += 1
end
end
else
current_row += 1
end
end
end
sheet [ current_row , 4 ] = " 合计 "
sheet [ current_row , 5 ] = count_game_exp_score > = 0 ? " + #{ count_game_exp_score } " : " - #{ count_game_exp_score } "
sheet [ current_row , 6 ] = count_game_gold_score > = 0 ? " + #{ count_game_gold_score } " : " #{ count_game_gold_score } "
sheet [ current_row , 7 ] = " 共 #{ count_game_test } 次评测 "
sheet [ current_row , 8 ] = game_spend_time ( ( count_game_time == 0 ? 0 : ( count_game_time / count_test ) ) . to_i ) + " /次 "
sheet . row ( current_row ) . default_format = black
#current_row += 1
end
# sheet[current_row,2] = "合计"
# sheet[current_row,4] = "共#{game_count}"
# sheet[current_row,5] = count_exp_score >= 0 ? "+#{count_exp_score}" : "-#{count_exp_score}"
# sheet[current_row,6] = count_gold_score >= 0 ? "+#{count_gold_score}" : "#{count_gold_score}"
# sheet[current_row,7] = "共#{count_test}次评测"
# sheet[current_row,8] = game_spend_time((count_time == 0 ? 0 : (count_time / count_test)).to_i)+"/次"
# sheet.row(current_row).default_format = black
end
homeworks . each_with_index do | homework , i |
sheet = book . create_worksheet :name = > " 关卡统计 "
sheet . row ( 0 ) . default_format = blue
sheet [ 0 , 0 ] = " 课堂编号 "
sheet [ 0 , 1 ] = " 主讲老师 "
sheet [ 0 , 2 ] = " 课堂名称 "
sheet [ 0 , 3 ] = " 作业编号 "
sheet [ 0 , 4 ] = " 作业/实训名称 "
sheet [ 0 , 5 ] = " 关卡 "
sheet [ 0 , 6 ] = " 学生id "
sheet [ 0 , 7 ] = " 学生姓名 "
sheet [ 0 , 8 ] = " 经验值 "
sheet [ 0 , 9 ] = " 金币 "
sheet [ 0 , 10 ] = " 评测历史 "
sheet [ 0 , 11 ] = " 评测时间 "
sheet [ 0 , 12 ] = " 评测结果 "
sheet [ 1 , 0 ] = course . id
sheet [ 1 , 1 ] = course . teacher . show_real_name
sheet [ 1 , 2 ] = course . name
sheet [ 1 , 3 ] = " # #{ get_hw_index ( homework , true , 4 ) } "
sheet [ 1 , 4 ] = homework . name
current_row = 1
shixun = homework . homework_commons_shixuns . shixun if homework . homework_commons_shixuns
if shixun
shixun . challenges . each_with_index do | challenge , j |
sheet [ current_row , 5 ] = " 第 #{ j + 1 } 关 "
games = Game . where ( :challenge_id = > challenge . id , :user_id = > homework . student_works . where ( " work_status != 0 " ) . map ( & :user_id ) )
count_exp_score = 0
count_gold_score = 0
count_test = 0
count_time = 0
if games . count > 0
games . each do | game |
user = game . user
sheet [ current_row , 6 ] = user . login
sheet [ current_row , 7 ] = user . show_real_name
sheet [ current_row , 8 ] = game . final_score ? " + #{ game . final_score . to_s } " : " -- "
count_exp_score = count_exp_score + ( game . final_score ? game . final_score . to_i : 0 )
sheet [ current_row , 9 ] = game . final_score ? ( game . answer_open? ? " #{ - challenge . score . to_i } " : " + #{ game . final_score . to_i } " ) : " -- "
count_gold_score = count_gold_score + ( game . final_score ? ( game . answer_open? ? - challenge . score . to_i : game . final_score . to_i ) : 0 )
count = game . outputs . count
if count > 0
outputs = game . outputs . where ( :test_set_position = > 1 ) . reorder ( " created_at asc " )
outputs . each_with_index do | output , k |
count_test = count_test + 1
sheet [ current_row , 10 ] = " 第 #{ k + 1 } 次评测 "
sheet [ current_row , 11 ] = k == 0 ? game_spend_time ( ( output . created_at - game . created_at ) . to_i ) : game_spend_time ( ( output . created_at - outputs [ k - 1 ] . created_at ) . to_i )
count_time = count_time + ( k == 0 ? ( output . created_at - game . created_at ) . to_i : ( output . created_at - outputs [ k - 1 ] . created_at ) . to_i )
sheet [ current_row , 12 ] = game . outputs . where ( :query_index = > output . query_index ) . select { | ou | ou . result == false } . count > 0 ? " 失败 " : " 成功 "
current_row = current_row + 1
end
else
current_row = current_row + 1
end
end
else
current_row = current_row + 1
end
sheet [ current_row , 6 ] = " 合计 "
sheet [ current_row , 7 ] = games . count . to_s + " 人 "
sheet [ current_row , 8 ] = count_exp_score > = 0 ? " + #{ count_exp_score } " : " - #{ count_exp_score } "
sheet [ current_row , 9 ] = count_gold_score > = 0 ? " + #{ count_gold_score } " : " #{ count_gold_score } "
sheet [ current_row , 10 ] = " 共 #{ count_test } 次评测 "
sheet [ current_row , 11 ] = game_spend_time ( ( count_time == 0 ? 0 : ( count_time / count_test ) ) . to_i ) + " /次 "
sheet . row ( current_row ) . default_format = black
current_row = current_row + 1
end
end
end
book . write xls_report
xls_report . string
end
def member_to_xls homeworks , exercises , tasks , course , members , groups
xls_report = StringIO . new
book = Spreadsheet :: Workbook . new
sheet1 = book . create_worksheet :name = > " 总成绩 "
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_class),l(:excel_f_score),l(:excel_commit_time)])
sheet1 [ 0 , 0 ] = " 课程编号 "
sheet1 [ 0 , 1 ] = course . id
sheet1 [ 1 , 0 ] = " 课程名称 "
sheet1 [ 1 , 1 ] = course . name
sheet1 [ 2 , 0 ] = " 教师团队 "
sheet1 [ 2 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet1 [ 3 , 0 ] = " 主讲教师 "
sheet1 [ 3 , 1 ] = course . teacher . show_real_name
sheet1 [ 4 , 0 ] = " 排名 "
sheet1 [ 4 , 1 ] = " 学生姓名 "
sheet1 [ 4 , 2 ] = " 昵称 "
sheet1 [ 4 , 3 ] = " 学号 "
sheet1 [ 4 , 4 ] = " 分班 "
current_col = 4
homeworks . where ( :homework_type = > 4 ) . each do | homework |
sheet1 [ 4 , current_col += 1 ] = " #{ homework . name } "
end
for i in 0 ... homeworks . where ( :homework_type = > 1 ) . count
sheet1 [ 4 , current_col += 1 ] = " 普通作业第 " + ( i + 1 ) . to_s + " 次 "
end
for i in 0 ... homeworks . where ( :homework_type = > 3 ) . count
sheet1 [ 4 , current_col += 1 ] = " 分组作业第 " + ( i + 1 ) . to_s + " 次 "
end
for i in 0 ... exercises . count
sheet1 [ 4 , current_col += 1 ] = " 试卷第 " + ( i + 1 ) . to_s + " 次 "
end
for i in 0 ... tasks . count
sheet1 [ 4 , current_col += 1 ] = " 毕设任务第 " + ( i + 1 ) . to_s + " 次 "
end
sheet1 [ 4 , current_col += 1 ] = " 实训作业总得分 "
sheet1 [ 4 , current_col += 1 ] = " 普通作业总得分 "
sheet1 [ 4 , current_col += 1 ] = " 分组作业总得分 "
sheet1 [ 4 , current_col += 1 ] = " 试卷总得分 "
if tasks . count > 0
sheet1 [ 4 , current_col += 1 ] = " 毕设任务总得分 "
end
#sheet1[6,homeworks.count+6] = "社区得分"
sheet1 [ 4 , current_col += 1 ] = " 总得分 "
count_row = 5
members . each_with_index do | member , i |
column = 0
sheet1 [ count_row , column ] = i + 1
sheet1 [ count_row , column += 1 ] = member . user . show_real_name
sheet1 [ count_row , column += 1 ] = member . user . login
sheet1 [ count_row , column += 1 ] = member . user . user_extensions . student_id
sheet1 [ count_row , column += 1 ] = member . course_group_id == 0 ? " 暂无 " : member . course_group . name
# current_col = 5
shixun_score = 0
homeworks . where ( :homework_type = > 4 ) . includes ( :student_works ) . each do | homework |
student_works = homework . student_works . where ( " user_id = #{ member . user . id } " )
if student_works . empty?
sheet1 [ count_row , column += 1 ] = 0
else
work_score = student_works . first . work_score . nil? ? 0 : student_works . first . work_score
sheet1 [ count_row , column += 1 ] = work_score < 0 ? 0 : work_score . round ( 1 )
shixun_score += work_score < 0 ? 0 : work_score . round ( 1 )
end
# current_col += 1
end
common_score = 0
homeworks . where ( :homework_type = > 1 ) . includes ( :student_works ) . each do | homework |
student_works = homework . student_works . where ( " user_id = #{ member . user . id } " )
if student_works . empty?
sheet1 [ count_row , column += 1 ] = 0
else
work_score = student_works . first . work_score . nil? ? 0 : student_works . first . work_score
sheet1 [ count_row , column += 1 ] = work_score < 0 ? 0 : work_score . round ( 1 )
common_score += work_score < 0 ? 0 : work_score . round ( 1 )
end
# current_col += 1
end
group_score = 0
homeworks . where ( :homework_type = > 3 ) . includes ( :student_works ) . each do | homework |
student_works = homework . student_works . where ( " user_id = #{ member . user . id } " )
if student_works . empty?
sheet1 [ count_row , column += 1 ] = 0
else
work_score = student_works . first . work_score . nil? ? 0 : student_works . first . work_score
sheet1 [ count_row , column += 1 ] = work_score < 0 ? 0 : work_score . round ( 1 )
group_score += work_score < 0 ? 0 : work_score . round ( 1 )
end
# current_col += 1
end
exercise_score = 0
exercises . includes ( :exercise_users ) . each do | exercise |
exercise_user = exercise . exercise_users . where ( " user_id = #{ member . user . id } " )
if exercise_user . empty?
sheet1 [ count_row , column += 1 ] = 0
else
work_score = exercise_user . first . score . nil? ? 0 : exercise_user . first . score
sheet1 [ count_row , column += 1 ] = work_score < 0 ? 0 : work_score . round ( 1 )
exercise_score += work_score < 0 ? 0 : work_score . round ( 1 )
end
# current_col += 1
end
graduation_score = 0
tasks . includes ( :graduation_works ) . each do | task |
graduation_works = task . graduation_works . where ( " user_id = #{ member . user . id } " )
if graduation_works . empty?
sheet1 [ count_row , column += 1 ] = 0
else
work_score = graduation_works . first . work_score . nil? ? 0 : graduation_works . first . work_score
sheet1 [ count_row , column += 1 ] = work_score < 0 ? 0 : work_score . round ( 1 )
graduation_score += work_score < 0 ? 0 : work_score . round ( 1 )
end
# current_col += 1
end
sum = shixun_score + common_score + group_score + exercise_score + graduation_score
sheet1 [ count_row , column += 1 ] = shixun_score
sheet1 [ count_row , column += 1 ] = common_score
sheet1 [ count_row , column += 1 ] = group_score
sheet1 [ count_row , column += 1 ] = exercise_score
if tasks . count > 0
sheet1 [ count_row , column += 1 ] = graduation_score
end
sheet1 [ count_row , column += 1 ] = sum . round ( 1 )
count_row += 1
end
if course . course_groups . count > 0
sheet = book . create_worksheet :name = > " 分班信息 "
sheet . row ( 0 ) . concat ( [ " 课程编号 " , course . id ] )
sheet . row ( 1 ) . concat ( [ " 课程名称 " , course . name ] )
sheet . row ( 2 ) . concat ( [ " 教师团队 " , ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' ) ] )
sheet . row ( 3 ) . concat ( [ " 主讲教师 " , course . teacher . show_real_name ] )
sheet . row ( 4 ) . concat ( [ " 序号 " , " 分班名称 " , " 邀请码 " , " 学生数量 " ] )
current_row = 5
course . course_groups . each do | course_group |
sheet [ current_row , 0 ] = current_row - 4
sheet [ current_row , 1 ] = course_group . name
sheet [ current_row , 2 ] = course_group . invite_code
sheet [ current_row , 3 ] = course_group . members . count
current_row += 1
end
end
sheet2 = book . create_worksheet :name = > " 活跃度 "
sheet2 [ 0 , 0 ] = " 课程编号 "
sheet2 [ 0 , 1 ] = course . id
sheet2 [ 1 , 0 ] = " 课程名称 "
sheet2 [ 1 , 1 ] = course . name
sheet2 [ 2 , 0 ] = " 教师团队 "
sheet2 [ 2 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet2 [ 3 , 0 ] = " 主讲教师 "
sheet2 [ 3 , 1 ] = course . teacher . show_real_name
sheet2 . row ( 4 ) . concat ( [ " 排名 " , " 学生姓名 " , " 昵称 " , " 学号 " , " 分班 " , " 作业完成数(*10) " , " 试卷完成数(*10) " , " 问卷完成数(*7) " , " 资源发布数(*5) " , " 帖子发布数(*2) " , " 帖子回复数(*1) " , " 作业回复数(*1) " , " 活跃度 " ] )
act_members = members
act_members . each do | member |
member [ :act_score ] = ( ( member . homework_num . to_i + member . graduation_num . to_i ) * 10 ) + ( member . exercise_num . to_i * 10 ) + ( member . poll_num . to_i * 7 ) + ( member . resource_num . to_i * 5 ) + ( member . message_num . to_i * 2 ) + member . message_reply_num . to_i + member . homework_journal_num . to_i
end
act_members = act_members . sort do | a , b |
[ b [ :act_score ] ] < = > [ a [ :act_score ] ]
end
count_row = 5
act_members . each_with_index do | act_member , index |
sheet2 [ count_row , 0 ] = index + 1
sheet2 [ count_row , 1 ] = act_member . user . show_real_name
sheet2 [ count_row , 2 ] = act_member . user . login
sheet2 [ count_row , 3 ] = act_member . user . user_extensions . student_id
sheet2 [ count_row , 4 ] = act_member . course_group_id == 0 ? " 暂无 " : act_member . course_group . name
sheet2 [ count_row , 5 ] = act_member . homework_num . to_i + act_member . graduation_num . to_i
sheet2 [ count_row , 6 ] = act_member . exercise_num
sheet2 [ count_row , 7 ] = act_member . poll_num
sheet2 [ count_row , 8 ] = act_member . resource_num
sheet2 [ count_row , 9 ] = act_member . message_num
sheet2 [ count_row , 10 ] = act_member . message_reply_num
sheet2 [ count_row , 11 ] = act_member . homework_journal_num
sheet2 [ count_row , 12 ] = act_member . act_score
count_row += 1
end
homeworks . where ( :homework_type = > 4 ) . includes ( :student_works ) . each_with_index do | home , i |
sheet = book . create_worksheet :name = > " #{ home . name } "
sheet [ 0 , 0 ] = " 课程编号 "
sheet [ 0 , 1 ] = course . id
sheet [ 1 , 0 ] = " 课程名称 "
sheet [ 1 , 1 ] = course . name
sheet [ 2 , 0 ] = " 教师团队 "
sheet [ 2 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet [ 3 , 0 ] = " 主讲教师 "
sheet [ 3 , 1 ] = course . teacher . show_real_name
sheet [ 3 , 0 ] = " 作业批次 "
sheet [ 3 , 1 ] = " 第 #{ i + 1 } 次 "
sheet [ 3 , 0 ] = " 作业名称 "
sheet [ 3 , 1 ] = home . name
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_homework_des ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
count_row = 5
items = home . student_works . where ( " work_status != 0 " ) . order ( " work_score desc " )
if items . count == 0 && home . publish_time < Time . now && ! course . is_end
update_shixun_work_status home
items = StudentWork . where ( " work_status != 0 and homework_common_id = #{ home . id } " ) . order ( " work_score desc " )
end
items . each_with_index do | stu , j |
sheet [ count_row , 0 ] = j + 1
sheet [ count_row , 1 ] = stu . user . show_real_name
sheet [ count_row , 2 ] = stu . user . login
sheet [ count_row , 3 ] = stu . user . user_extensions . student_id
sheet [ count_row , 4 ] = strip_html stu . description
sheet [ count_row , 5 ] = stu . late_penalty
sheet [ count_row , 6 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 1 )
sheet [ count_row , 7 ] = format_time ( stu . commit_time )
count_row += 1
end
end
homeworks . where ( :homework_type = > 1 ) . includes ( :student_works ) . each_with_index do | home , i |
sheet = book . create_worksheet :name = > " 普通作业第 #{ i + 1 } 次 "
sheet [ 0 , 0 ] = " 课程编号 "
sheet [ 0 , 1 ] = course . id
sheet [ 1 , 0 ] = " 课程名称 "
sheet [ 1 , 1 ] = course . name
sheet [ 2 , 0 ] = " 教师团队 "
sheet [ 2 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet [ 3 , 0 ] = " 主讲教师 "
sheet [ 3 , 1 ] = course . teacher . show_real_name
sheet [ 3 , 0 ] = " 作业批次 "
sheet [ 3 , 1 ] = " 第 #{ i + 1 } 次 "
sheet [ 3 , 0 ] = " 作业名称 "
sheet [ 3 , 1 ] = home . name
if home . anonymous_comment == 0
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , l ( :excel_ta_score ) , l ( :excel_n_score ) , l ( :excel_a_penalty ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
else
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , l ( :excel_ta_score ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
end
count_row = 5
items = home . student_works . where ( " work_status != 0 " ) . order ( " work_score desc " )
items . each_with_index do | stu , j |
sheet [ count_row , 0 ] = j + 1
sheet [ count_row , 1 ] = stu . user . show_real_name
sheet [ count_row , 2 ] = stu . user . login
sheet [ count_row , 3 ] = stu . user . user_extensions . student_id
sheet [ count_row , 4 ] = strip_html stu . description
sheet [ count_row , 5 ] = stu . teacher_score . nil? ? l ( :label_without_score ) : stu . teacher_score . round ( 1 )
sheet [ count_row , 6 ] = stu . teaching_asistant_score . nil? ? l ( :label_without_score ) : stu . teaching_asistant_score . round ( 1 )
if home . anonymous_comment == 0
sheet [ count_row , 7 ] = stu . student_score . nil? ? l ( :label_without_score ) : stu . student_score . round ( 1 )
sheet [ count_row , 8 ] = ( home . teacher_priority == 1 && ! stu . teacher_score . nil? ) ? 0 : stu . absence_penalty
sheet [ count_row , 9 ] = ( home . teacher_priority == 1 && ! stu . teacher_score . nil? ) ? 0 : stu . late_penalty
sheet [ count_row , 10 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 1 )
sheet [ count_row , 11 ] = format_time ( stu . commit_time )
else
sheet [ count_row , 7 ] = ( home . teacher_priority == 1 && ! stu . teacher_score . nil? ) ? 0 : stu . late_penalty
sheet [ count_row , 8 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 1 )
sheet [ count_row , 9 ] = format_time ( stu . commit_time )
end
count_row += 1
end
end
homeworks . where ( :homework_type = > 3 ) . includes ( :student_works ) . each_with_index do | home , i |
sheet = book . create_worksheet :name = > " 分组作业第 #{ i + 1 } 次 "
sheet [ 0 , 0 ] = " 课程编号 "
sheet [ 0 , 1 ] = course . id
sheet [ 1 , 0 ] = " 课程名称 "
sheet [ 1 , 1 ] = course . name
sheet [ 2 , 0 ] = " 教师团队 "
sheet [ 2 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet [ 3 , 0 ] = " 主讲教师 "
sheet [ 3 , 1 ] = course . teacher . show_real_name
sheet [ 3 , 0 ] = " 作业批次 "
sheet [ 3 , 1 ] = " 第 #{ i + 1 } 次 "
sheet [ 3 , 0 ] = " 作业名称 "
sheet [ 3 , 1 ] = home . name
if home . anonymous_comment == 0
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_group_member ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , l ( :excel_ta_score ) , l ( :excel_n_score ) , l ( :excel_a_penalty ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
else
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_group_member ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , l ( :excel_ta_score ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
end
count_row = 5
items = home . student_works . where ( " work_status != 0 " ) . order ( " work_score desc " )
items . each_with_index do | stu , j |
sheet [ count_row , 0 ] = j + 1
sheet [ count_row , 1 ] = stu . user . show_real_name
sheet [ count_row , 2 ] = stu . user . login
sheet [ count_row , 3 ] = stu . user . user_extensions . student_id
sheet [ count_row , 4 ] = get_group_member_names home . student_works . where ( :group_id = > stu . group_id ) . pluck ( :user_id )
sheet [ count_row , 5 ] = strip_html stu . description
sheet [ count_row , 6 ] = stu . teacher_score . nil? ? l ( :label_without_score ) : stu . teacher_score . round ( 1 )
sheet [ count_row , 7 ] = stu . teaching_asistant_score . nil? ? l ( :label_without_score ) : stu . teaching_asistant_score . round ( 1 )
if home . anonymous_comment == 0
sheet [ count_row , 8 ] = stu . student_score . nil? ? l ( :label_without_score ) : stu . student_score . round ( 1 )
sheet [ count_row , 9 ] = ( home . teacher_priority == 1 && ! stu . teacher_score . nil? ) ? 0 : stu . absence_penalty
sheet [ count_row , 10 ] = ( home . teacher_priority == 1 && ! stu . teacher_score . nil? ) ? 0 : stu . late_penalty
sheet [ count_row , 11 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 1 )
sheet [ count_row , 12 ] = format_time ( stu . commit_time )
else
sheet [ count_row , 8 ] = ( home . teacher_priority == 1 && ! stu . teacher_score . nil? ) ? 0 : stu . late_penalty
sheet [ count_row , 9 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 1 )
sheet [ count_row , 10 ] = format_time ( stu . commit_time )
end
count_row += 1
end
end
exercises . each_with_index do | exercise , i |
sheet = book . create_worksheet :name = > " 试卷第 #{ i + 1 } 次 "
sheet [ 0 , 0 ] = " 课程编号 "
sheet [ 0 , 1 ] = course . id
sheet [ 1 , 0 ] = " 课程名称 "
sheet [ 1 , 1 ] = course . name
sheet [ 3 , 0 ] = " 教师团队 "
sheet [ 3 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet [ 3 , 0 ] = " 主讲教师 "
sheet [ 3 , 1 ] = course . teacher . show_real_name
sheet [ 3 , 0 ] = " 试卷批次 "
sheet [ 3 , 1 ] = " 第 #{ i + 1 } 次 "
sheet [ 3 , 0 ] = " 试卷名称 "
sheet [ 3 , 1 ] = exercise . exercise_name
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_objective_score ) , l ( :excel_subjective_score ) , l ( :excel_f_score ) , l ( :excel_answer_time ) ] )
count_row = 5
items = exercise . exercise_users . where ( " commit_status != 0 " ) . order ( " score desc " )
items . each_with_index do | stu , j |
sheet [ count_row , 0 ] = j + 1
sheet [ count_row , 1 ] = stu . user . show_real_name
sheet [ count_row , 2 ] = stu . user . login
sheet [ count_row , 3 ] = stu . user . user_extensions . student_id
sheet [ count_row , 4 ] = stu . objective_score == - 1 ? " 0.0 " : format ( " %.1f " , stu . objective_score )
sheet [ count_row , 5 ] = stu . subjective_score == - 1 ? " 0.0 " : format ( " %.1f " , stu . subjective_score )
sheet [ count_row , 6 ] = stu . score . nil? ? '--' : stu . score . round ( 1 )
sheet [ count_row , 7 ] = stu . commit_status == 0 ? l ( :excel_no_answer ) : format_time ( stu . start_at )
count_row += 1
end
end
tasks . each_with_index do | task , i |
sheet = book . create_worksheet :name = > " 毕设任务第 #{ i + 1 } 次 "
sheet [ 0 , 0 ] = " 课程编号 "
sheet [ 0 , 1 ] = course . id
sheet [ 1 , 0 ] = " 课程名称 "
sheet [ 1 , 1 ] = course . name
sheet [ 2 , 0 ] = " 教师团队 "
sheet [ 2 , 1 ] = ( searchTeacherAndAssistant course ) . map { | member | member . user . show_real_name } . join ( '、' )
sheet [ 3 , 0 ] = " 主讲教师 "
sheet [ 3 , 1 ] = course . teacher . show_real_name
sheet [ 3 , 0 ] = " 作业批次 "
sheet [ 3 , 1 ] = " 第 #{ i + 1 } 次 "
sheet [ 3 , 0 ] = " 作业名称 "
sheet [ 3 , 1 ] = task . name
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) ] )
if task . task_type == 2
sheet . row ( 4 ) . concat ( [ l ( :excel_group_member ) ] )
end
sheet . row ( 4 ) . concat ( [ l ( :excel_homework_des ) , l ( :excel_t_score ) ] )
if task . cross_comment
sheet . row ( 4 ) . concat ( [ " 交叉评分 " ] )
end
sheet . row ( 4 ) . concat ( [ l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
count_row = 5
items = task . graduation_works . where ( " work_status != 0 " ) . order ( " work_score desc " )
items . each_with_index do | stu , j |
column = 0
sheet [ count_row , column ] = j + 1
sheet [ count_row , column += 1 ] = stu . user . show_real_name
sheet [ count_row , column += 1 ] = stu . user . login
sheet [ count_row , column += 1 ] = stu . user . user_extensions . student_id
if task . task_type == 2
sheet [ count_row , column += 1 ] = get_group_member_names task . graduation_works . where ( :group_id = > stu . group_id ) . pluck ( :user_id )
end
sheet [ count_row , column += 1 ] = strip_html stu . description
sheet [ count_row , column += 1 ] = stu . teacher_score . nil? ? l ( :label_without_score ) : stu . teacher_score . round ( 1 )
if task . cross_comment
sheet [ count_row , column += 1 ] = stu . cross_score . nil? ? l ( :label_without_score ) : stu . cross_score . round ( 1 )
end
sheet [ count_row , column += 1 ] = stu . late_penalty
sheet [ count_row , column += 1 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 1 )
sheet [ count_row , column += 1 ] = format_time ( stu . commit_time )
count_row += 1
end
= begin
if task . task_type == 1
if task . cross_comment
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , " 交叉评分 " , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
else
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
end
else
if task . cross_comment
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_group_member ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , " 交叉评分 " , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
else
sheet . row ( 4 ) . concat ( [ l ( :excel_rank ) , l ( :excel_user_name ) , l ( :excel_nickname ) , l ( :excel_student_id ) , l ( :excel_group_member ) , l ( :excel_homework_des ) ,
l ( :excel_t_score ) , l ( :excel_l_penalty ) , l ( :excel_f_score ) , l ( :excel_commit_time ) ] )
end
count_row = 5
items = task . graduation_works . order ( " work_score desc " )
items . each_with_index do | stu , j |
column = 0
sheet [ count_row , column ] = j + 1
sheet [ count_row , column + 1 ] = stu . user . show_name
sheet [ count_row , column + 1 ] = stu . user . login
sheet [ count_row , column + 1 ] = stu . user . user_extensions . student_id
sheet [ count_row , column + 1 ] = strip_html stu . description
sheet [ count_row , column + 1 ] = stu . teacher_score . nil? ? l ( :label_without_score ) : stu . teacher_score . round ( 2 )
if task . cross_comment
sheet [ count_row , column + 1 ] = stu . cross_score . nil? ? l ( :label_without_score ) : stu . cross_score . round ( 2 )
end
sheet [ count_row , column + 1 ] = stu . late_penalty
sheet [ count_row , column + 1 ] = stu . work_score . nil? ? l ( :label_without_score ) : stu . work_score . round ( 2 )
sheet [ count_row , column + 1 ] = format_time ( stu . commit_time )
count_row += 1
end
end
= end
end
book . write xls_report
xls_report . string
end
end