255 lines
8.8 KiB
Ruby
255 lines
8.8 KiB
Ruby
class HomeworkBankController < ApplicationController
|
|
before_filter :require_login, :only => [:index, :show, :new, :create, :edit, :update, :destroy, :destroy_all, :choose_user_course, :send_h_bank_to_course]
|
|
before_filter :find_homework_bank, :only => [:show, :edit, :update, :destroy, :set_public]
|
|
|
|
def index
|
|
@order,@b_sort = params[:order] || "updated_at",params[:sort] || "desc"
|
|
@user = User.current
|
|
@r_sort = @b_sort == "desc" ? "asc" : "desc"
|
|
@search = params[:search]
|
|
if(params[:type].blank? || params[:type] == "1") #我的题库
|
|
@homeworks = @user.homework_banks.where("homework_type in (1, 4) and name like ?", "%#{@search}%")
|
|
elsif params[:type] == "2" #公共题库
|
|
@homeworks = HomeworkBank.where(:is_public => true).where("homework_type in (1, 4) and name like ?", "%#{@search}%")
|
|
end
|
|
if params[:property]
|
|
@property = params[:property].to_i
|
|
@homeworks = @homeworks.where(:homework_type => params[:property].to_i)
|
|
end
|
|
@homeworks = @homeworks.reorder("#{@order} #{@b_sort}")
|
|
@type = params[:type] ? params[:type] : '1'
|
|
@limit = 15
|
|
@is_remote = true
|
|
@hw_count = @homeworks.count
|
|
@hw_pages = Paginator.new @hw_count, @limit, params['page'] || 1
|
|
@offset ||= @hw_pages.offset
|
|
@homeworks = paginateHelper @homeworks,15
|
|
respond_to do |format|
|
|
format.js
|
|
format.html {render :layout => 'base_edu'}
|
|
end
|
|
end
|
|
|
|
def show
|
|
@is_admin = User.current == @homework.user || User.current.admin?
|
|
respond_to do |format|
|
|
format.html {render :layout => 'base_edu'}
|
|
end
|
|
end
|
|
|
|
def new
|
|
@homework_type = params[:homework_type].to_i
|
|
@homework = HomeworkBank.new
|
|
respond_to do |format|
|
|
format.html{render :layout => 'base_edu'}
|
|
end
|
|
end
|
|
|
|
# 新建实训作业
|
|
def shixuns
|
|
search = params[:search]
|
|
@homework = HomeworkBank.new
|
|
@shixuns = Shixun.where(:status => 2).where("name like ?", "%#{search}%")
|
|
@shixuns_count = @shixuns.count
|
|
@limit = 10
|
|
@is_remote = true
|
|
@shixun_pages = Paginator.new @shixuns_count, @limit, params['page'] || 1
|
|
@offset ||= @shixun_pages.offset
|
|
@shixuns = paginateHelper @shixuns, @limit
|
|
respond_to do |format|
|
|
format.js
|
|
end
|
|
end
|
|
|
|
def create
|
|
if params[:homework_bank] || params[:shixun_homework]
|
|
homework = HomeworkBank.new
|
|
if params[:shixun_homework]
|
|
shixun = Shixun.find(params[:shixun_homework])
|
|
homework.name = shixun.name
|
|
homework.description = shixun.description
|
|
else
|
|
homework.name = params[:homework_bank][:name]
|
|
homework.description = params[:homework_bank][:description]
|
|
homework.reference_answer = params[:homework_bank][:reference_answer]
|
|
homework.save_attachments(params[:attachments])
|
|
render_attachment_warning_if_needed(homework)
|
|
end
|
|
homework.is_public = 0
|
|
homework.quotes = 0
|
|
homework.homework_type = params[:shixun_homework] ? 4 : (params[:homework_type].to_i || 1)
|
|
homework.user_id = User.current.id
|
|
unless params[:course_list].blank?
|
|
if CourseList.where(:name => params[:course_list].strip).count > 0
|
|
homework.course_list_id = CourseList.where(:name => params[:course_list].strip).first.id
|
|
else
|
|
course_list = CourseList.create(:name => params[:course_list].strip, :user_id => User.current.id, :is_admin => 0)
|
|
homework.course_list_id = course_list.id
|
|
end
|
|
end
|
|
#homework.syllabus_id = params[:syllabus_id] if params[:syllabus_id] && params[:syllabus_id] != '0'
|
|
|
|
#编程作业相关属性
|
|
if homework.homework_type == 2
|
|
homework.language = params[:language_type].to_i
|
|
|
|
sample_inputs = params[:sample][:input]
|
|
if Array === sample_inputs
|
|
sample_inputs.each_with_index do |val, i|
|
|
homework.homework_bank_samples << HomeworkBankSample.new(
|
|
input: val,
|
|
output: params[:sample][:output][i]
|
|
)
|
|
end
|
|
end
|
|
|
|
inputs = params[:program][:input]
|
|
if Array === inputs
|
|
inputs.each_with_index do |val, i|
|
|
homework.homework_bank_tests << HomeworkBankTest.new(
|
|
input: val,
|
|
output: params[:program][:output][i]
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
#分组作业
|
|
if homework.homework_type == 3
|
|
homework.min_num = params[:min_num].to_i
|
|
homework.max_num = params[:max_num].to_i
|
|
end
|
|
|
|
if homework.save
|
|
if homework.homework_type == 4
|
|
HomeworkBankShixun.create(:homework_bank_id => homework.id, :shixun_id => shixun.id)
|
|
end
|
|
redirect_to homework_bank_path(homework)
|
|
end
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@homework_type = @homework.homework_type
|
|
respond_to do |format|
|
|
format.html{render :layout => 'base_edu'}
|
|
end
|
|
end
|
|
|
|
def update
|
|
if params[:homework_bank]
|
|
@homework.name = params[:homework_bank][:name]
|
|
@homework.description = params[:homework_bank][:description]
|
|
@homework.reference_answer = params[:homework_bank][:reference_answer]
|
|
if params[:course_list].blank?
|
|
@homework.course_list_id = nil
|
|
else
|
|
if CourseList.where(:name => params[:course_list].strip).count > 0
|
|
@homework.course_list_id = CourseList.where(:name => params[:course_list].strip).first.id
|
|
else
|
|
course_list = CourseList.create(:name => params[:course_list].strip, :user_id => User.current.id, :is_admin => 0)
|
|
@homework.course_list_id = course_list.id
|
|
end
|
|
end
|
|
#@homework.syllabus_id = params[:syllabus_id] ? (params[:syllabus_id] == '0' ? nil : params[:syllabus_id].to_i) : nil
|
|
@homework.save_attachments(params[:attachments])
|
|
render_attachment_warning_if_needed(@homework)
|
|
|
|
#编程作业相关属性
|
|
if @homework.homework_type == 2
|
|
@homework.language = params[:language_type].to_i if params[:language_type]
|
|
|
|
@homework.homework_bank_samples.delete_all if params[:sample]
|
|
sample_inputs = params[:sample][:input] if params[:sample]
|
|
if Array === sample_inputs
|
|
sample_inputs.each_with_index do |val, i|
|
|
@homework.homework_bank_samples << HomeworkBankSample.new(
|
|
input: val,
|
|
output: params[:sample][:output][i]
|
|
)
|
|
end
|
|
end
|
|
|
|
@homework.homework_bank_tests.delete_all if params[:program]
|
|
inputs = params[:program][:input] if params[:program]
|
|
if Array === inputs
|
|
inputs.each_with_index do |val, i|
|
|
@homework.homework_bank_tests << HomeworkBankTest.new(
|
|
input: val,
|
|
output: params[:program][:output][i]
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
#分组作业
|
|
if @homework.homework_type == 3
|
|
@homework.min_num = params[:min_num].to_i if params[:min_num]
|
|
@homework.max_num = params[:max_num].to_i if params[:max_num]
|
|
end
|
|
|
|
if @homework.save
|
|
redirect_to homework_bank_path(@homework)
|
|
end
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@homework.homework_commons.update_all(:homework_bank_id => nil)
|
|
@homework.destroy
|
|
redirect_to homework_bank_index_path()
|
|
end
|
|
|
|
def destroy_all
|
|
if params[:check_homework_bank] && !params[:check_homework_bank].blank?
|
|
params[:check_homework_bank].each do |hb_id|
|
|
homework = HomeworkBank.find hb_id
|
|
if homework && homework.user == User.current
|
|
HomeworkCommon.where(:homework_bank_id => homework.id).update_all(:homework_bank_id => nil)
|
|
homework.destroy
|
|
end
|
|
end
|
|
end
|
|
redirect_to homework_bank_index_path
|
|
end
|
|
|
|
def choose_user_course
|
|
if !params[:search].nil?
|
|
search = "%#{params[:search].to_s.strip.downcase}%"
|
|
@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)}
|
|
else
|
|
@courses = User.current.courses.where("is_delete = 0 and is_end = 0").select{ |course| User.current.has_teacher_role(course)}
|
|
end
|
|
@homework_ids = params[:check_homework_bank] if params[:check_homework_bank]
|
|
@search = params[:search]
|
|
respond_to do |format|
|
|
format.js
|
|
end
|
|
end
|
|
|
|
def send_h_bank_to_course
|
|
course = Course.find params[:course_id]
|
|
if course
|
|
params[:homework_id].each do |homework_id|
|
|
homework = HomeworkBank.find homework_id
|
|
quote_homework_bank homework, course
|
|
end
|
|
end
|
|
end
|
|
|
|
def set_public
|
|
@homework.update_attributes(:is_public => true)
|
|
respond_to do |format|
|
|
format.html{ redirect_to homework_bank_path(@homework) }
|
|
format.js
|
|
end
|
|
end
|
|
|
|
private
|
|
def find_homework_bank
|
|
@homework = HomeworkBank.find params[:id]
|
|
rescue ActiveRecord::RecordNotFound
|
|
render_404
|
|
end
|
|
end
|