2017-05-05 19:36:32 +08:00
#encoding: utf-8
2017-04-07 10:16:13 +08:00
class SyllabusesController < ApplicationController
include ApplicationHelper
helper :attachments
include AttachmentsHelper
include CoursesHelper
2017-05-08 15:26:16 +08:00
include SyllabusesHelper
2017-05-23 20:26:02 +08:00
include UsersHelper
2017-05-03 10:10:27 +08:00
before_filter :is_logged , :only = > [ :index , :show , :edit , :new , :update , :destroy , :delete_syllabus , :syllabus_resources , :syllabus_homeworks ]
2017-06-11 15:45:54 +08:00
before_filter :check_authentication
2017-04-28 22:53:34 +08:00
before_filter :find_syllabus , :only = > [ :show , :edit , :update , :destroy , :syllabus_courselist , :edit_syllabus_eng_name , :edit_syllabus_title , :update_base_info , :delete_syllabus ,
2017-05-05 19:36:32 +08:00
:delete_des , :members , :update_des , :edit_ref , :update_ref , :add_sy_member_alert , :search_not_sy_member , :syllabus_resources , :syllabus_homeworks ,
2017-05-08 15:26:16 +08:00
:send_homeworks_to_course , :choose_user_course , :send_resources_to_course , :send_r_and_h_to_course ]
2017-05-23 20:26:02 +08:00
2017-04-07 10:16:13 +08:00
def index
2017-05-27 16:49:45 +08:00
@status = params [ :type ] . nil? ? 1 : params [ :type ] . to_i # 1表示正在进行, 2表示已结束
2017-05-23 20:26:02 +08:00
2017-04-07 10:16:13 +08:00
user = User . current
2017-05-23 20:26:02 +08:00
@my_syllabuses = user . syllabuses
2017-05-27 16:49:45 +08:00
archive_ids = Course . where ( " tea_id = #{ user . id } and is_delete = 1 and syllabus_id is NOT NULL " ) . blank? ? " (-1) " : " ( " + Course . where ( " tea_id = #{ user . id } and is_delete = 1 and syllabus_id is NOT NULL " ) . map { | course | course . syllabus_id } . join ( " , " ) + " ) "
2017-05-23 20:26:02 +08:00
@archive_syllabuses = Syllabus . where ( " id in #{ archive_ids } " )
sy_courses = user . courses . visible . not_deleted
syllabus_ids = sy_courses . empty? ? '(-1)' : " ( " + sy_courses . map { | course | ! course . syllabus_id . nil? && course . syllabus_id } . join ( " , " ) + " ) "
syllabus_members = SyllabusMember . where ( " user_id = #{ user . id } " )
syllabus_member_ids = syllabus_members . empty? ? " (-1) " : " ( " + syllabus_members . map { | syl_mem | syl_mem . syllabus_id } . join ( ',' ) + " ) "
@join_syllabuses = Syllabus . where ( " (id in #{ syllabus_ids } or id in #{ syllabus_member_ids } ) and user_id != #{ user . id } " )
@my_syllabuses = syllabus_course_list_sort @my_syllabuses
@join_syllabuses = syllabus_course_list_sort @join_syllabuses
@my_syllabuses = @my_syllabuses . sort { | x , y | y [ :last_update ] < = > x [ :last_update ] }
@join_syllabuses = @join_syllabuses . sort { | x , y | y [ :last_update ] < = > x [ :last_update ] }
@is_course = 1
2017-05-27 16:49:45 +08:00
respond_to do | format |
format . html { render :layout = > 'base_edu' }
format . js
end
2017-04-07 10:16:13 +08:00
end
def show
2017-06-19 17:11:10 +08:00
@is_syllabus_teacher = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id ) || ! @syllabus . courses . not_deleted_not_end . select { | course | User . current . has_teacher_role ( course ) } . blank?
@is_syllabus_member = ! @syllabus . courses . not_deleted_not_end . select { | course | User . current . member_of_course? ( course ) } . blank?
@is_syllabus_admin = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id )
@is_authen_teacher = User . current . authentication && User . current . user_extensions . try ( :identity ) != 1
2017-04-28 22:53:34 +08:00
@reference_materials = @syllabus . reference_materials
@members = @syllabus . syllabus_members . includes ( :user = > { :user_extensions = > [ ] } ) . order ( " rank asc " )
2017-05-05 19:36:32 +08:00
@courses = @syllabus . courses . where ( " is_delete = 0 and is_end = 0 " ) . select ( " courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS ca_update " ) . order ( " ca_update desc " )
@end_courses = @syllabus . courses . where ( " is_delete = 0 and is_end = 1 " ) . select ( " courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS ca_update " ) . order ( " ca_update desc " )
2017-04-07 10:16:13 +08:00
respond_to do | format |
format . js
2017-04-28 22:53:34 +08:00
format . html { render :layout = > 'base_edu_syllabus' }
2017-04-07 10:16:13 +08:00
format . api
end
end
def new
@syllabus = Syllabus . new
2017-04-28 22:53:34 +08:00
render :layout = > 'base_edu'
2017-04-07 10:16:13 +08:00
end
def create
if User . current . user_extensions . identity
@syllabus = Syllabus . new
2017-04-14 09:28:00 +08:00
@syllabus . title = params [ :title ] . to_s . strip
2017-04-07 10:16:13 +08:00
@syllabus . eng_name = params [ :eng_name ]
@syllabus . user_id = User . current . id
2017-04-14 09:28:00 +08:00
@syllabus . major_level = params [ :major_level ] . to_i
@syllabus . discipline_category_id = params [ :discipline_category_id ] . to_i
@syllabus . first_level_discipline_id = params [ :first_level_discipline_id ] . to_i
2017-07-18 09:31:56 +08:00
@syllabus . major_id = params [ :major_id ] . to_i
2017-04-14 09:28:00 +08:00
@syllabus . syllabus_type = params [ :syllabus_type ] . to_i
2017-04-07 10:16:13 +08:00
@syllabus . description = Message . where ( " id = 19412 " ) . first . nil? ? '' : Message . where ( " id = 19412 " ) . first . content
if @syllabus && @syllabus . save
member = SyllabusMember . create ( :user_id = > @syllabus . user_id , :rank = > 1 )
@syllabus . syllabus_members << member
respond_to do | format |
2017-05-02 09:10:35 +08:00
#flash[:notice] = l(:notice_successful_create)
2017-04-07 10:16:13 +08:00
format . html { redirect_to syllabus_path ( @syllabus ) }
format . api { render :action = > 'show' , :status = > :created , :location = > url_for ( :controller = > 'syllabuses' , :action = > 'show' , :id = > @syllabus . id ) }
end
else
respond_to do | format |
flash [ :notice ] = l ( :notice_create_failed )
format . html { redirect_to new_syllabus_path } #Added by young
format . api { render_validation_errors ( @syllabus ) }
end
end
end
end
2017-04-14 09:28:00 +08:00
def regex_syllabus_name
data = { result : 1 }
2017-04-28 22:53:34 +08:00
if params [ :syllabus_id ]
if User . current . syllabuses . where ( " id != #{ params [ :syllabus_id ] } and title = ' #{ params [ :name ] } ' " ) . count > 0
data [ :result ] = 0
end
else
if Syllabus . where ( :user_id = > User . current . id , :title = > params [ :name ] ) . count > 0
data [ :result ] = 0
end
2017-04-14 09:28:00 +08:00
end
render :json = > data
end
2017-04-07 10:16:13 +08:00
def edit
respond_to do | format |
2017-04-28 22:53:34 +08:00
format . html { render :layout = > 'base_edu' }
2017-04-07 10:16:13 +08:00
end
end
2017-04-14 09:28:00 +08:00
def update
title = @syllabus . title
@syllabus . title = params [ :title ] . to_s . strip
@syllabus . eng_name = params [ :eng_name ]
@syllabus . major_level = params [ :major_level ] . to_i
@syllabus . discipline_category_id = params [ :discipline_category_id ] . to_i
@syllabus . first_level_discipline_id = params [ :first_level_discipline_id ] . to_i
2017-07-18 09:31:56 +08:00
@syllabus . major_id = params [ :major_id ] . to_i
2017-04-14 09:28:00 +08:00
@syllabus . syllabus_type = params [ :syllabus_type ] . to_i
if @syllabus . save
if title != params [ :title ] . to_s . strip
@syllabus . courses . each do | course |
course . name . gsub! ( / ^ #{ title } / , params [ :title ] . to_s . strip )
course . save
end
end
end
redirect_to syllabus_path ( @syllabus )
end
2017-04-28 22:53:34 +08:00
def edit_ref
@reference_materials = @syllabus . reference_materials
respond_to do | format |
format . js
end
end
def update_ref
@syllabus . reference_materials . destroy_all
refer_inputs = params [ :syllabus ] [ :book ] if params [ :syllabus ]
if Array === refer_inputs
refer_inputs . each_with_index do | val , i |
@syllabus . reference_materials << ReferenceMaterial . new (
book : val ,
editor : params [ :syllabus ] [ :editor ] [ i ] ,
press : params [ :syllabus ] [ :press ] [ i ]
)
end
end
sy_update_record = SyllabusUpdateRecord . new ( :property = > 2 , :user_id = > User . current . id )
@syllabus . syllabus_update_records << sy_update_record
@reference_materials = @syllabus . reference_materials
2017-07-04 16:41:34 +08:00
@is_syllabus_admin = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id )
2017-04-07 10:16:13 +08:00
respond_to do | format |
2017-04-28 22:53:34 +08:00
format . js
2017-04-07 10:16:13 +08:00
end
end
2017-04-14 09:28:00 +08:00
def update_des
2017-04-07 10:16:13 +08:00
@syllabus . description = params [ :syllabus ] [ :description ]
@syllabus . des_status = 1
2017-04-28 22:53:34 +08:00
#@syllabus.save_attachments(params[:attachments])
2017-04-07 10:16:13 +08:00
if @syllabus . save
2017-04-28 22:53:34 +08:00
sy_update_record = SyllabusUpdateRecord . new ( :property = > 1 , :user_id = > User . current . id )
@syllabus . syllabus_update_records << sy_update_record
2017-04-07 10:16:13 +08:00
if params [ :asset_id ]
ids = params [ :asset_id ] . split ( ',' )
update_kindeditor_assets_owner ids , @syllabus . id , OwnerTypeHelper :: SYLLABUS
end
2017-04-28 22:53:34 +08:00
end
redirect_to syllabus_path ( @syllabus )
end
def add_sy_member_alert
respond_to do | format |
format . js
end
end
def search_not_sy_member
if params [ :q ] && params [ :q ] . lstrip . rstrip != " "
@users = Principal . active . sorted . not_member_of_syllabus ( @syllabus ) . like ( params [ :q ] )
2017-04-07 10:16:13 +08:00
else
2017-04-28 22:53:34 +08:00
@users = [ ]
2017-04-07 10:16:13 +08:00
end
end
2017-05-03 10:10:27 +08:00
def syllabus_resources
2017-06-19 17:11:10 +08:00
@is_syllabus_teacher = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id ) || ! @syllabus . courses . not_deleted_not_end . select { | course | User . current . has_teacher_role ( course ) } . blank?
@is_syllabus_member = ! @syllabus . courses . not_deleted_not_end . select { | course | User . current . member_of_course? ( course ) } . blank?
@is_syllabus_admin = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id )
@is_authen_teacher = User . current . authentication && User . current . user_extensions . try ( :identity ) != 1
2017-05-05 19:36:32 +08:00
@order , @r_sort = params [ :order ] || " created_at " , params [ :sort ] || " asc "
@sort = @r_sort == " desc " ? " asc " : " desc "
2017-05-08 15:26:16 +08:00
@resources = sy_resources @syllabus
2017-05-05 19:36:32 +08:00
if @order == " created_at "
@resources = @resources . order ( " #{ @order } #{ @sort } " )
else
@resources = @resources . select ( " resource_banks.*, (quotes+downloads) as heat " ) . order ( " #{ @order } #{ @sort } , created_at desc " )
end
@resource_count = @resources . count
@public_resource_count = @resources . where ( :is_public = > 1 ) . count
@private_resource_count = @resources . where ( :is_public = > 0 ) . count
2017-06-19 17:11:10 +08:00
if ! ( @is_syllabus_admin || @is_syllabus_member )
@resources = @resources . where ( :is_public = > 1 )
end
2017-05-03 10:10:27 +08:00
#分页
2017-06-19 17:11:10 +08:00
@page_resource_count = @resources . count
2017-05-03 10:10:27 +08:00
@limit = 10
@is_remote = true
2017-06-19 17:11:10 +08:00
@resource_pages = Paginator . new @page_resource_count , @limit , params [ 'page' ] || 1
2017-05-03 10:10:27 +08:00
@offset || = @resource_pages . offset
@resources = paginateHelper @resources , @limit
2017-05-05 19:36:32 +08:00
respond_to do | format |
format . js
end
2017-05-03 10:10:27 +08:00
end
def syllabus_homeworks
2017-06-19 17:11:10 +08:00
@is_syllabus_teacher = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id ) || ! @syllabus . courses . not_deleted_not_end . select { | course | User . current . has_teacher_role ( course ) } . blank?
@is_syllabus_member = ! @syllabus . courses . not_deleted_not_end . select { | course | User . current . member_of_course? ( course ) } . blank?
@is_syllabus_admin = User . current . admin? || @syllabus . syllabus_members . map { | sm | sm . user_id } . include? ( User . current . id )
@is_authen_teacher = User . current . authentication && User . current . user_extensions . try ( :identity ) != 1
2017-05-05 19:36:32 +08:00
@order , @r_sort = params [ :order ] || " created_at " , params [ :sort ] || " asc "
@sort = @r_sort == " desc " ? " asc " : " desc "
2017-06-19 17:11:10 +08:00
@homeworks = @syllabus . homework_banks . order ( " #{ @order } #{ @sort } " )
2017-05-05 19:36:32 +08:00
@homework_count = @homeworks . count
@public_homework_count = @homeworks . where ( :is_public = > 1 ) . count
@private_homework_count = @homeworks . where ( :is_public = > 0 ) . count
2017-05-03 10:10:27 +08:00
2017-06-19 17:11:10 +08:00
if ! ( @is_syllabus_admin || @is_syllabus_member )
@homeworks = @homeworks . where ( :is_public = > 1 )
end
@page_homework_count = @homeworks . count
2017-05-05 19:36:32 +08:00
@limit = 10
@is_remote = true
2017-06-19 17:11:10 +08:00
@homework_pages = Paginator . new @page_homework_count , @limit , params [ 'page' ] || 1
2017-05-05 19:36:32 +08:00
@offset || = @homework_pages . offset
@homeworks = paginateHelper @homeworks , @limit
respond_to do | format |
format . js
end
end
def choose_user_course
if ! params [ :search ] . nil?
search = " % #{ params [ :search ] . to_s . strip . downcase } % "
2017-06-19 17:11:10 +08:00
@courses = User . current . courses . where ( " is_delete = 0 and is_end = 0 and ( #{ Course . table_name } .id = #{ params [ :search ] . to_i } or #{ Course . table_name } .name like :p) " , :p = > search ) . select { | course | User . current . has_teacher_role ( course ) }
2017-05-05 19:36:32 +08:00
else
2017-06-19 17:11:10 +08:00
@courses = User . current . courses . where ( " is_delete = 0 and is_end = 0 " ) . select { | course | User . current . has_teacher_role ( course ) }
2017-05-05 19:36:32 +08:00
end
@resource_ids = params [ :check_resource ] if params [ :check_resource ]
@homework_ids = params [ :check_homework ] if params [ :check_homework ]
@search = params [ :search ]
#这里仅仅是传递需要发送的资源id
@type = params [ :type ]
respond_to do | format |
format . js
end
end
def send_resources_to_course
course = Course . find params [ :course_id ]
if course
params [ :resource_id ] . each do | resource_id |
resource = ResourceBank . find resource_id
2017-05-08 15:26:16 +08:00
quote_resource_bank resource , course
2017-05-05 19:36:32 +08:00
end
end
end
def send_homeworks_to_course
course = Course . find params [ :course_id ]
if course
params [ :homework_id ] . each do | homework_id |
homework = HomeworkBank . find homework_id
2017-05-08 15:26:16 +08:00
quote_homework_bank homework , course
end
end
end
2017-05-05 19:36:32 +08:00
2017-05-08 15:26:16 +08:00
def send_r_and_h_to_course
course = Course . find params [ :course_id ]
if course
resources = sy_resources @syllabus
2017-06-19 17:11:10 +08:00
homeworks = @syllabus . homework_banks . order ( " #{ @order } #{ @sort } " )
2017-05-05 19:36:32 +08:00
2017-05-08 15:26:16 +08:00
ActiveRecord :: Base . transaction do
begin
resources . each do | resource |
quote_resource_bank resource , course
2017-05-05 19:36:32 +08:00
end
2017-05-08 15:26:16 +08:00
homeworks . each do | homework |
quote_homework_bank homework , course
end
rescue Exception = > e
puts e
2017-05-05 19:36:32 +08:00
end
end
end
2017-05-03 10:10:27 +08:00
end
2017-04-14 09:28:00 +08:00
def delete_syllabus
respond_to do | format |
format . js
end
end
2017-04-07 10:16:13 +08:00
#删除课程大纲的描述
def delete_des
if @syllabus
@syllabus . description = Message . where ( " id = 19412 " ) . first . nil? ? '' : Message . where ( " id = 19412 " ) . first . content
@syllabus . des_status = 0
@syllabus . attachments . destroy_all
if @syllabus . save
redirect_to syllabus_path ( @syllabus )
end
end
end
def destroy
if @syllabus && @syllabus . courses . not_deleted . empty?
@syllabus . destroy
2017-06-27 09:22:03 +08:00
redirect_to syllabuses_path ( )
2017-04-07 10:16:13 +08:00
end
end
#班级列表 list_type: 1 班级列表 2 归档班级列表
def syllabus_courselist
@list_type = params [ :list_type ] . to_i || 0
@order , @c_sort , @type = params [ :order ] || 1 , params [ :sort ] || 1 , params [ :type ] || 1
#确定 sort_type
if @order . to_i == @type . to_i
@c_sort = @c_sort . to_i == 1 ? 2 : 1 #1升序 2降序
else
@c_sort = 2
end
sort_name = " updated_on "
sort_type = @c_sort == 1 ? " asc " : " desc "
@courses = @syllabus . courses . where ( " is_delete = ? " , @list_type ) . select ( " courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS #{ sort_name } " ) . order ( " #{ sort_name } #{ sort_type } " )
#根据 作业+资源数排序
if @order . to_i == 2
@type = 2
@courses . each do | course |
course [ :infocount ] = ( User . current . admin? || User . current . allowed_to? ( :as_teacher , course ) ) ? ( course . homework_commons . count + visable_attachemnts_incourse ( course ) . count ) : ( course . homework_commons . where ( " publish_time <= ' #{ Time . now } ' " ) . count + visable_attachemnts_incourse ( course ) . count )
if course [ :infocount ] < 0
course [ :infocount ] = 0
end
end
@c_sort == 1 ? ( @courses = @courses . sort { | x , y | x [ :infocount ] < = > y [ :infocount ] } ) : ( @courses = @courses . sort { | x , y | y [ :infocount ] < = > x [ :infocount ] } )
@courses = sortby_time_countcommon_nosticky @courses , sort_name
else
@type = 1
end
#分页
@limit = 10
@is_remote = true
@atta_count = @courses . count
@atta_pages = Paginator . new @atta_count , @limit , params [ 'page' ] || 1
@offset || = @atta_pages . offset
@courses = paginateHelper @courses , @limit
respond_to do | format |
format . js
format . html { render :layout = > 'base_syllabus' }
end
end
#修改课程名称
def edit_syllabus_title
if @syllabus && params [ :title ] != " "
@syllabus . update_column ( " title " , params [ :title ] )
end
respond_to do | format |
format . js
end
end
#修改英文名称
def edit_syllabus_eng_name
if @syllabus
@syllabus . update_column ( " eng_name " , params [ :eng_name ] )
end
respond_to do | format |
format . js
end
end
#编辑属性
def update_base_info
if @syllabus
@syllabus . update_attributes ( :credit = > params [ :credit ] , :hours = > params [ :hours ] , :theory_hours = > params [ :theory_hours ] , :practice_hours = > params [ :practice_hours ] , :applicable_major = > params [ :applicable_major ] , :pre_course = > params [ :pre_course ] )
@syllabus . update_attributes ( :syllabus_type = > params [ :syllabus_type ] )
respond_to do | format |
format . js
end
end
end
def members
@members = @syllabus . syllabus_members . includes ( :user = > { :user_extensions = > [ ] , :courses = > [ ] } ) . order ( " rank asc " )
@show = params [ :show ] ? params [ :show ] . to_i : 0
respond_to do | format |
format . js
format . html { render :layout = > 'base_syllabus' }
end
end
2017-04-14 09:28:00 +08:00
def get_discipline_categories
data = { result : 0 , options : [ ] }
if params [ :major_level ]
if DisciplineCategory . where ( :major_level = > params [ :major_level ] . to_i ) . count > 0
data [ :result ] = 1
DisciplineCategory . where ( :major_level = > params [ :major_level ] . to_i ) . each do | dis |
option = [ ]
option << dis . name . to_s
option << dis . id
data [ :options ] << option
end
end
end
render :json = > data
end
def get_first_level_disciplines
data = { result : 0 , options : [ ] }
if params [ :discipline_category_id ]
if FirstLevelDiscipline . where ( :discipline_category_id = > params [ :discipline_category_id ] . to_i ) . count > 0
data [ :result ] = 1
FirstLevelDiscipline . where ( :discipline_category_id = > params [ :discipline_category_id ] . to_i ) . each do | dis |
option = [ ]
option << dis . name . to_s
option << dis . id
data [ :options ] << option
end
end
end
render :json = > data
end
2017-07-18 09:31:56 +08:00
def get_major
data = { result : 0 , options : [ ] }
if params [ :first_level_discipline_id ]
if Major . where ( :first_level_discipline_id = > params [ :first_level_discipline_id ] . to_i ) . count > 0
data [ :result ] = 1
Major . where ( :first_level_discipline_id = > params [ :first_level_discipline_id ] . to_i ) . each do | dis |
option = [ ]
option << dis . name . to_s
option << dis . id
data [ :options ] << option
end
end
end
render :json = > data
end
2017-04-07 10:16:13 +08:00
private
def find_syllabus
@syllabus = Syllabus . find params [ :id ]
end
def is_logged
redirect_to signin_path unless User . current . logged?
end
end