You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							90 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							90 lines
						
					
					
						
							2.8 KiB
						
					
					
				| class ExaminationBanksController < ApplicationController
 | |
|   include PaginateHelper
 | |
|   before_action :require_login
 | |
|   before_action :find_exam, except: [:index, :create]
 | |
|   before_action :edit_auth, only: [:update, :destroy, :set_public, :revoke_item]
 | |
| 
 | |
|   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").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 |