@ -5,14 +5,17 @@ class ExerciseController < ApplicationController
before_filter :find_course , :only = > [ :index , :new , :create , :student_exercise_list ]
before_filter :find_course , :only = > [ :index , :new , :create , :student_exercise_list ]
include ExerciseHelper
include ExerciseHelper
include ExerciseHelper
def index
def index
if @course . is_public == 0 && ! User . current . member_of_course? ( @course )
render_403
return
end
remove_invalid_exercise ( @course )
remove_invalid_exercise ( @course )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
if @is_teacher
if @is_teacher
exercises = @course . exercises
exercises = @course . exercises . order ( " created_at asc " )
else
else
exercises = @course . exercises . where ( :exercise_status = > 2 )
exercises = @course . exercises . where ( :exercise_status = > 2 ) . order ( " created_at asc " )
end
end
@exercises = paginateHelper exercises , 20 #分页
@exercises = paginateHelper exercises , 20 #分页
respond_to do | format |
respond_to do | format |
@ -31,17 +34,24 @@ class ExerciseController < ApplicationController
render_403
render_403
return
return
end
end
@can_edit_excercise = ( ! has_commit_exercise? ( @exercise . id , User . current . id ) ) || User . current . admin?
exercise_end = Time . parse ( format_time ( @exercise . end_time ) ) . strftime ( " %Y-%m-%d %H:%M:%S " ) > Time . now . strftime ( " %Y-%m-%d %H:%M:%S " )
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?
end
@exercise_user = ExerciseUser . where ( " user_id=? and exercise_id=? " , User . current . id , @exercise . id ) . first
@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)
#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? )
if has_commit_exercise? ( @exercise . id , User . current . id ) && ( ! User . current . admin? )
respond_to do | format |
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . html { render :layout = > 'base_courses' }
end
end
else
else
= end
if ! @is_teacher && ! has_click_exercise? ( @exercise . id , User . current . id )
if ! @is_teacher && ! has_click_exercise? ( @exercise . id , User . current . id )
eu = ExerciseUser . create ( :user_id = > User . current . id , :exercise_id = > @exercise . id , :start_at = > Time . now , :status = > false )
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
@exercise_user = ExerciseUser . where ( " user_id=? and exercise_id=? " , User . current . id , @exercise . id ) . first
@ -52,7 +62,7 @@ class ExerciseController < ApplicationController
respond_to do | format |
respond_to do | format |
format . html { render :layout = > 'base_courses' }
format . html { render :layout = > 'base_courses' }
end
end
end
# end
end
end
def new
def new
@ -65,7 +75,6 @@ class ExerciseController < ApplicationController
:end_time = > " " ,
:end_time = > " " ,
:publish_time = > " " ,
:publish_time = > " " ,
:exercise_description = > " " ,
:exercise_description = > " " ,
:show_result = > " " ,
:show_result = > 1
:show_result = > 1
}
}
@exercise = Exercise . create option
@exercise = Exercise . create option
@ -80,7 +89,7 @@ class ExerciseController < ApplicationController
exercise || = Exercise . new
exercise || = Exercise . new
exercise . exercise_name = params [ :exercise ] [ :exercise_name ]
exercise . exercise_name = params [ :exercise ] [ :exercise_name ]
exercise . exercise_description = params [ :exercise ] [ :exercise_description ]
exercise . exercise_description = params [ :exercise ] [ :exercise_description ]
exercise . end_time = params [ :exercise ] [ :end_time ]
exercise . end_time = Time . at ( params [ :exercise ] [ :end_time ] . to_time . to_i + 16 * 60 * 60 - 1 )
exercise . publish_time = params [ :exercise ] [ :publish_time ]
exercise . publish_time = params [ :exercise ] [ :publish_time ]
exercise . user_id = User . current . id
exercise . user_id = User . current . id
exercise . time = params [ :exercise ] [ :time ]
exercise . time = params [ :exercise ] [ :time ]
@ -104,10 +113,10 @@ class ExerciseController < ApplicationController
def update
def update
@exercise . exercise_name = params [ :exercise ] [ :exercise_name ]
@exercise . exercise_name = params [ :exercise ] [ :exercise_name ]
@exercise . exercise_description = params [ :exercise ] [ :exercise_description ]
@exercise . exercise_description = params [ :exercise ] [ :exercise_description ]
@exercise . time = params [ :exercise ] [ :time ]
@exercise . time = params [ :exercise ] [ :time ] . blank? ? - 1 : params [ :exercise ] [ :time ]
@exercise . end_time = params [ :exercise ] [ :end_time ]
@exercise . end_time = Time . at ( params [ :exercise ] [ :end_time ] . to_time . to_i + 16 * 60 * 60 - 1 )
@exercise . publish_time = params [ :exercise ] [ :publish_time ]
@exercise . publish_time = params [ :exercise ] [ :publish_time ]
@exercise . show_result = params [ :exercise ] [ :show_result ]
@exercise . show_result = params [ :exercise ] [ :show_result ] . blank? ? 1 : params [ :exercise ] [ :show_result ]
if @exercise . save
if @exercise . save
respond_to do | format |
respond_to do | format |
format . js
format . js
@ -300,6 +309,7 @@ class ExerciseController < ApplicationController
# 发布试卷
# 发布试卷
def publish_exercise
def publish_exercise
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
@index = params [ :index ]
@exercise . exercise_status = 2
@exercise . exercise_status = 2
@exercise . publish_time = Time . now
@exercise . publish_time = Time . now
if @exercise . save
if @exercise . save
@ -314,11 +324,13 @@ class ExerciseController < ApplicationController
# 重新发布的时候会删除所有的答题
# 重新发布的时候会删除所有的答题
def republish_exercise
def republish_exercise
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
@is_teacher = User . current . allowed_to? ( :as_teacher , @course )
@index = params [ :index ]
@exercise . exercise_questions . each do | exercise_question |
@exercise . exercise_questions . each do | exercise_question |
exercise_question . exercise_answers . destroy_all
exercise_question . exercise_answers . destroy_all
end
end
@exercise . exercise_users . destroy_all
@exercise . exercise_users . destroy_all
@exercise . exercise_status = 1
@exercise . exercise_status = 1
@exercise . publish_time = nil
@exercise . save
@exercise . save
respond_to do | format |
respond_to do | format |
format . js
format . js
@ -328,7 +340,7 @@ class ExerciseController < ApplicationController
def student_exercise_list
def student_exercise_list
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@is_teacher = User . current . allowed_to? ( :as_teacher , @course ) || User . current . admin?
@exercise = Exercise . find params [ :id ]
@exercise = Exercise . find params [ :id ]
@all_exercises = @course . exercises . order( " created_at desc " )
@all_exercises = @course . exercises . where( " exercise_status > 1 " ) . order( " created_at desc " )
@exercise_count = @exercise . exercise_users . where ( 'score is not NULL' ) . count
@exercise_count = @exercise . exercise_users . where ( 'score is not NULL' ) . count
if @is_teacher || ( ! @exercise . exercise_users . where ( :user_id = > User . current . id ) . empty? && Time . parse ( @exercise . end_time . to_s ) . strftime ( " %Y-%m-%d-%H-%M-%S " ) < = Time . now . strftime ( " %Y-%m-%d-%H-%M-%S " ) )
if @is_teacher || ( ! @exercise . exercise_users . where ( :user_id = > User . current . id ) . empty? && Time . parse ( @exercise . end_time . to_s ) . strftime ( " %Y-%m-%d-%H-%M-%S " ) < = Time . now . strftime ( " %Y-%m-%d-%H-%M-%S " ) )
@exercise_users_list = @exercise . exercise_users . where ( 'score is not NULL' )
@exercise_users_list = @exercise . exercise_users . where ( 'score is not NULL' )
@ -346,8 +358,8 @@ class ExerciseController < ApplicationController
# 学生提交答卷,选中答案的过程中提交
# 学生提交答卷,选中答案的过程中提交
def commit_answer
def commit_answer
eq = ExerciseQuestion . find ( params [ :exercise_question_id ] )
eq = ExerciseQuestion . find ( params [ :exercise_question_id ] )
# 已提交过的 则不允许答题
# 已提交过的 且是限时的 则不允许答题
if has_commit_exercise? ( @exercise . id , User . current . id ) && ( ! User . current . admin? )
if ( has_commit_exercise? ( @exercise . id , User . current . id ) && ( ! User . current . admin? ) && @exercise . time != - 1 ) || Time . parse ( format_time ( @exercise . end_time ) ) . strftime ( " %Y-%m-%d %H:%M:%S " ) < Time . now . strftime ( " %Y-%m-%d %H:%M:%S " )
render :json = > { :text = > " failure " }
render :json = > { :text = > " failure " }
return
return
end
end
@ -364,8 +376,14 @@ class ExerciseController < ApplicationController
ea . exercise_choice_id = params [ :exercise_choice_id ]
ea . exercise_choice_id = params [ :exercise_choice_id ]
if ea . save
if ea . save
# 保存成功返回成功信息及当前以答题百分比
# 保存成功返回成功信息及当前以答题百分比
uncomplete_question = get_uncomplete_question ( @exercise , User . current )
if uncomplete_question . count < 1
complete = 1 ;
else
complete = 0 ;
end
@percent = get_percent ( @exercise , User . current )
@percent = get_percent ( @exercise , User . current )
render :json = > { :text = > " ok " , :percent = > format ( " %.2f " , @percent ) }
render :json = > { :text = > " ok " , : complete = > complete , : percent = > format ( " %.2f " , @percent ) }
else
else
#返回失败信息
#返回失败信息
render :json = > { :text = > " failure " }
render :json = > { :text = > " failure " }
@ -380,8 +398,14 @@ class ExerciseController < ApplicationController
ea . exercise_question_id = params [ :exercise_question_id ]
ea . exercise_question_id = params [ :exercise_question_id ]
ea . exercise_choice_id = params [ :exercise_choice_id ]
ea . exercise_choice_id = params [ :exercise_choice_id ]
if ea . save
if ea . save
uncomplete_question = get_uncomplete_question ( @exercise , User . current )
if uncomplete_question . count < 1
complete = 1 ;
else
complete = 0 ;
end
@percent = get_percent ( @exercise , User . current )
@percent = get_percent ( @exercise , User . current )
render :json = > { :text = > " ok " , :percent = > format ( " %.2f " , @percent ) }
render :json = > { :text = > " ok " , : complete = > complete , : percent = > format ( " %.2f " , @percent ) }
else
else
render :json = > { :text = > " failure " }
render :json = > { :text = > " failure " }
end
end
@ -410,8 +434,14 @@ class ExerciseController < ApplicationController
ea . exercise_question_id = params [ :exercise_question_id ]
ea . exercise_question_id = params [ :exercise_question_id ]
ea . answer_text = params [ :answer_text ]
ea . answer_text = params [ :answer_text ]
if ea . save
if ea . save
uncomplete_question = get_uncomplete_question ( @exercise , User . current )
if uncomplete_question . count < 1
complete = 1 ;
else
complete = 0 ;
end
@percent = get_percent ( @exercise , User . current )
@percent = get_percent ( @exercise , User . current )
render :json = > { :text = > ea . answer_text , :percent = > format ( " %.2f " , @percent ) }
render :json = > { :text = > ea . answer_text , : complete = > complete , : percent = > format ( " %.2f " , @percent ) }
else
else
render :json = > { :text = > " failure " }
render :json = > { :text = > " failure " }
end
end
@ -447,6 +477,17 @@ class ExerciseController < ApplicationController
def commit_exercise
def commit_exercise
# 老师不需要提交
# 老师不需要提交
if User . current . allowed_to? ( :as_teacher , @course )
if User . current . allowed_to? ( :as_teacher , @course )
if @exercise . publish_time . nil?
@exercise . update_attributes ( :show_result = > params [ :show_result ] )
@exercise . update_attributes ( :exercise_status = > 2 )
@exercise . update_attributes ( :publish_time = > Time . now )
redirect_to exercise_url ( @exercise )
return
elsif Time . parse ( @exercise . publish_time . to_s ) . strftime ( " %Y-%m-%d-%H-%M-%S " ) > Time . now . strftime ( " %Y-%m-%d-%H-%M-%S " )
@exercise . update_attributes ( :show_result = > params [ :show_result ] )
redirect_to exercise_url ( @exercise )
return
end
@exercise . update_attributes ( :show_result = > params [ :show_result ] )
@exercise . update_attributes ( :show_result = > params [ :show_result ] )
redirect_to exercise_url ( @exercise )
redirect_to exercise_url ( @exercise )
# REDO: 提示提交成功
# REDO: 提示提交成功
@ -490,7 +531,7 @@ class ExerciseController < ApplicationController
exercise_qustions . each do | question |
exercise_qustions . each do | question |
answer = get_user_answer ( question , user )
answer = get_user_answer ( question , user )
standard_answer = get_user_standard_answer ( question , user )
standard_answer = get_user_standard_answer ( question , user )
unless answer . nil ?
unless answer . empty ?
# 问答题有多个答案
# 问答题有多个答案
if question . question_type == 3
if question . question_type == 3
if standard_answer . include? ( answer . first . answer_text )
if standard_answer . include? ( answer . first . answer_text )
@ -532,19 +573,6 @@ class ExerciseController < ApplicationController
eu
eu
end
end
#获取未完成的题目
def get_uncomplete_question exercise , user
all_questions = exercise . exercise_questions
uncomplete_question = [ ]
all_questions . each do | question |
answers = get_user_answer ( question , user )
if answers . nil?
uncomplete_question << question
end
end
uncomplete_question
end
# 获取当前学生回答问题的答案
# 获取当前学生回答问题的答案
def get_user_answer ( question , user )
def get_user_answer ( question , user )
# user_answer = ExerciseAnswer.where("user_id=? and exercise_question_id=?", user.id, question.id).first
# user_answer = ExerciseAnswer.where("user_id=? and exercise_question_id=?", user.id, question.id).first
@ -563,7 +591,8 @@ class ExerciseController < ApplicationController
standard_answer = question . exercise_standard_answers . first
standard_answer = question . exercise_standard_answers . first
end
end
standard_answer
standard_answer
end # 是否完成了答题
end
# 是否完成了答题
def get_complete_question ( exercise , user )
def get_complete_question ( exercise , user )
questions = exercise . exercise_questions
questions = exercise . exercise_questions
complete_question = [ ]
complete_question = [ ]