educoder/app/controllers/homework_bank_controller.rb

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