mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-09 06:24:04 +08:00
init project
This commit is contained in:
92
app/controllers/examination_banks_controller.rb
Normal file
92
app/controllers/examination_banks_controller.rb
Normal file
@@ -0,0 +1,92 @@
|
||||
class ExaminationBanksController < ApplicationController
|
||||
include PaginateHelper
|
||||
before_action :require_login
|
||||
before_action :certi_identity_auth, only: [:create, :edit, :update, :destroy, :set_public, :revoke_item]
|
||||
before_action :find_exam, except: [:index, :create]
|
||||
before_action :edit_auth, only: [:update, :destroy, :set_public, :revoke_item]
|
||||
before_action :identity_auth, only: [:index]
|
||||
|
||||
def index
|
||||
exams = ExaminationBankQuery.call(params)
|
||||
@exams_count = exams.size
|
||||
@exams = paginate exams.includes(:user, :examination_items)
|
||||
end
|
||||
|
||||
def show
|
||||
@items = @exam.examination_items
|
||||
@single_questions = @items.where(item_type: "SINGLE")
|
||||
@multiple_questions = @items.where(item_type: "MULTIPLE")
|
||||
@judgement_questions = @items.where(item_type: "JUDGMENT")
|
||||
@program_questions = @items.where(item_type: "PROGRAM")
|
||||
end
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
exam = ExaminationBank.new(user: current_user)
|
||||
# 保存试卷基础信息
|
||||
exam = ExaminationBanks::SaveExaminationBankService.call(exam, form_params)
|
||||
|
||||
# 将试题篮中的试题发送到试卷,试卷的题目与试题独立
|
||||
current_user.item_baskets.includes(:item_bank).each do |basket|
|
||||
item = basket.item_bank
|
||||
if item.present?
|
||||
new_item = ExaminationItem.new
|
||||
new_item.new_item(item, exam, basket.score, basket.position)
|
||||
end
|
||||
end
|
||||
|
||||
current_user.item_baskets.destroy_all
|
||||
end
|
||||
render_ok
|
||||
rescue ApplicationService::Error => ex
|
||||
render_error(ex.message)
|
||||
end
|
||||
|
||||
def edit; end
|
||||
|
||||
def update
|
||||
ExaminationBanks::SaveExaminationBankService.call(@exam, form_params)
|
||||
render_ok
|
||||
rescue ApplicationService::Error => ex
|
||||
render_error(ex.message)
|
||||
end
|
||||
|
||||
def destroy
|
||||
ActiveRecord::Base.transaction do
|
||||
ApplyAction.where(container_type: "ExaminationBank", container_id: @exam.id).destroy_all
|
||||
@exam.destroy!
|
||||
render_ok
|
||||
end
|
||||
end
|
||||
|
||||
def set_public
|
||||
tip_exception(-1, "该试卷已公开") if @exam.public?
|
||||
tip_exception(-1, "请勿重复提交申请") if ApplyAction.where(container_id: @exam.id, container_type: "ExaminationBank", status: 0).exists?
|
||||
ApplyAction.create!(container_id: @exam.id, container_type: "ExaminationBank", user_id: current_user.id)
|
||||
# @exam.update_attributes!(public: 1)
|
||||
render_ok
|
||||
end
|
||||
|
||||
def revoke_item
|
||||
item = @exam.examination_items.find_by!(item_bank_id: params[:item_id])
|
||||
ActiveRecord::Base.transaction do
|
||||
@exam.examination_items.where(item_type: item.item_type).where("position > #{item.position}").update_all("position = position -1")
|
||||
item.destroy!
|
||||
end
|
||||
render_ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def form_params
|
||||
params.permit(:discipline_id, :sub_discipline_id, :difficulty, :name, :duration, tag_discipline_id: [])
|
||||
end
|
||||
|
||||
def find_exam
|
||||
@exam = ExaminationBank.find_by!(id: params[:id])
|
||||
end
|
||||
|
||||
def edit_auth
|
||||
current_user.admin_or_business? || @exam.user == current_user
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user