@ -1,8 +1,10 @@
class ExerciseController < ApplicationController
layout " base_courses "
before_filter :find_exercise_and_course , :only = > [ :create_exercise_question , :edit , :update , :show , :destroy , :commit_exercise , :commit_answer , :publish_exercise , :republish_exercise , :show_student_result ]
before_filter :find_course , :only = > [ :index , :new , :create , :student_exercise_list ]
before_filter :find_exercise_and_course , :only = > [ :create_exercise_question , :edit , :update , :show , :destroy ,
:commit_exercise , :commit_answer , :publish_exercise , :republish_exercise ,
:show_student_result , :student_exercise_list ]
before_filter :find_course , :only = > [ :index , :new , :create ]
include ExerciseHelper
def index
@ -18,16 +20,16 @@ class ExerciseController < ApplicationController
end_exercises . each do | exercise |
exercise . update_column ( 'exercise_status' , 3 )
end
if @course . is_public == 0 && ! User . current . member_of_course? ( @course )
if @course . is_public == 0 && ! ( User . current . member_of_course? ( @course ) || User . current . admin? )
render_403
return
end
remove_invalid_exercise ( @course )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
if @is_teacher
if @is_teacher || User . current . admin?
exercises = @course . exercises . order ( " created_at asc " )
else
exercises = @course . exercises . where ( :exercise_status = > 2 ) . order ( " created_at asc " )
exercises = @course . exercises . where ( " exercise_status <> 1 " ) . order ( " created_at asc " )
end
@exercises = paginateHelper exercises , 20 #分页
respond_to do | format |
@ -48,47 +50,32 @@ class ExerciseController < ApplicationController
end_exercises . each do | exercise |
exercise . update_column ( 'exercise_status' , 3 )
end
unless User . current . member_of_course? ( @course )
unless User . current . member_of_course? ( @course ) || User . current . admin?
render_403
return
end
@exercise = Exercise . find params [ :id ]
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
if @exercise . exercise_status != 2 && ( ! User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin? )
render_403
return
end
exercise_end = @exercise . end_time > Time . now
if @exercise . time == - 1
@can_edit_excercise = exercise_end
else
@can_edit_excercise = ( ! has_commit_exercise? ( @exercise . id , User . current . id ) && exercise_end ) || User . current . admin?
@can_edit_excercise = ! has_commit_exercise? ( @exercise . id , User . current . id ) && exercise_end
end
@exercise_user = ExerciseUser . where ( " user_id=? and exercise_id=? " , User . current . id , @exercise . id ) . first
# 学生点击的时候即创建关联,自动保存
#eu = ExerciseUser.create(:user_id => User.current, :exercise_id => @exercise.id, :start_at => Time.now, :status => false)
# 已提交问卷的用户不能再访问该界面
= begin
if has_commit_exercise? ( @exercise . id , User . current . id ) && ( ! User . current . admin? )
respond_to do | format |
format . html { render :layout = > 'base_courses' }
end
else
= end
if ! @is_teacher && ! has_click_exercise? ( @exercise . id , User . current . id )
unless @is_teacher
@exercise_user = ExerciseUser . where ( " user_id=? and exercise_id=? " , User . current . id , @exercise . id ) . first
if @exercise_user . nil?
eu = ExerciseUser . create ( :user_id = > User . current . id , :exercise_id = > @exercise . id , :start_at = > Time . now , :status = > false )
@exercise_user = ExerciseUser . where ( " user_id=? and exercise_id=? " , User . current . id , @exercise . id ) . first
end
# @percent = get_percent(@exercise,User.current)
exercise_questions = @exercise . exercise_questions
@exercise_questions = paginateHelper exercise_questions , 5 #分页
score = calculate_student_score ( @exercise , User . current )
eu = get_exercise_user ( @exercise . id , User . current . id )
eu . update_attributes ( :score = > score )
respond_to do | format |
format . html { render :layout = > 'base_courses' }
end
@exercise_user . update_attributes ( :score = > score )
end
# @percent = get_percent(@exercise,User.current)
@exercise_questions = @exercise . exercise_questions
respond_to do | format |
format . html { render :layout = > 'base_courses' }
end
#end
end
@ -369,8 +356,20 @@ class ExerciseController < ApplicationController
end
def student_exercise_list
= begin
if @exercise . end_time < = Time . now
@course . student . each do | student |
if ExerciseUser . where ( " user_id = ? && exercise_id = ? " , student . student_id , @exercise . id ) . empty?
ExerciseUser . create ( :user_id = > student . student_id , :exercise_id = > @exercise . id , :start_at = > @exercise . end_time , :status = > true , :score = > 0 )
end
s_score = calculate_student_score ( @exercise , student . student )
exercise_user = ExerciseUser . where ( " user_id =? and exercise_id=? " , student . student_id , @exercise . id ) . first
exercise_user . update_attributes ( :score = > s_score )
end
end
= end
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@exercise = Exercise . find params [ :id ]
@all_exercises = @course . exercises . where ( " exercise_status > 1 " ) . order ( " created_at desc " )
@exercise_count = @exercise . exercise_users . where ( 'score is not NULL' ) . count
if @is_teacher || ( ! @exercise . exercise_users . where ( :user_id = > User . current . id ) . empty? && @exercise . end_time < = Time . now )
@ -537,12 +536,9 @@ class ExerciseController < ApplicationController
# @score = 100
if @uncomplete_question . count < 1
# 查看是否有已提交记录
eu = get_exercise_user ( @exercise . id , User . current . id )
eu . user_id = User . current . id
eu . exercise_id = @exercise . id
eu . score = @score
if eu . save
#redirect_to poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course')
cur_exercise_user . score = @score
if cur_exercise_user . save
#redirect_to poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course')
@status = 0 #提交成功
else
@status = 2 #未知错误
@ -550,6 +546,7 @@ class ExerciseController < ApplicationController
else
@status = 1 #有未做得必答题
end
@save = params [ :save ] . to_i if params [ :save ]
respond_to do | format |
format . js
end
@ -560,11 +557,11 @@ class ExerciseController < ApplicationController
def show_student_result
@user = User . find params [ :user_id ]
@can_edit_excercise = false
@exercise_user = ExerciseUser . where ( " user_id =? and exercise_id=? " , @user . id , @exercise . id ) . first
@exercise_questions = @exercise . exercise_questions
score = calculate_student_score ( @exercise , @user )
eu = get_exercise_user ( @exercise . id , @user . id )
eu . update_attributes ( :score = > score )
@exercise_user = ExerciseUser . where ( " user_id =? and exercise_id=? " , @user . id , @exercise . id ) . first
respond_to do | format |
format . html { render :layout = > 'base_courses' }
end
@ -582,15 +579,15 @@ class ExerciseController < ApplicationController
standard_answer = get_user_standard_answer ( question , user )
unless answer . empty?
# 问答题有多个答案
if question . question_type == 3
if question . question_type == 3 && ! standard_answer . empty?
if standard_answer . include? ( answer . first . answer_text )
score1 = score1 + question . question_score unless question . question_score . nil?
end
elsif question . question_type == 1
elsif question . question_type == 1 && ! standard_answer . nil?
if answer . first . exercise_choice . choice_position == standard_answer . exercise_choice_id
score2 = score2 + question . question_score unless question . question_score . nil?
end
els e
els if qu estion. question_type == 2 && ! standard_answer . nil?
arr = get_mulscore ( question , user )
if arr . to_i == standard_answer . exercise_choice_id
score3 = score3 + question . question_score unless question . question_score . nil?