diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index 36f51ce6e..a6903dbc7 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -24,8 +24,7 @@ class GraduationTopicsController < ApplicationController end # 当前用户是否已经选过题 - # @user_selected = StudentGraduationTopic.where(graduation_topic_id: @graduation_topic, user_id: current_user.id).count > 0 - user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1], graduation_topic_id: @graduation_topic.pluck(:id)) #6.12 -hs + user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1]) #6.12 -hs @user_selected = user_graduation_topics.size > 0 ## 分页参数 page = params[:page] || 1 @@ -45,6 +44,9 @@ class GraduationTopicsController < ApplicationController end ## 分页参数 @current_user = current_user + user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, + status: [0, 1]) + @user_selected = user_graduation_topics.size > 0 page = params[:page] || 1 limit = params[:limit] || 50 @users_count = @student_graduation_topics.try(:count).to_i diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index dc68f47c6..17281087b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -61,7 +61,7 @@ class UsersController < ApplicationController # 新消息数 @new_message = @user.tidings.where("created_at > '#{@user.click_time}'").count > 0 || @user.private_messages.where("created_at > '#{@user.click_time}'").count > 0 - @user_url = "#{@old_domain}/users/#{@user.login}" + @user_url = "/users/#{@user.login}" @career = Career.where(status: true).order("created_at asc").pluck(:id, :name) ec_user = EcSchoolUser.where(:user_id => current_user.id).first @auth = ec_user ? "#{@old_domain}/ecs/department?school_id=#{ec_user.school_id}" : nil diff --git a/app/views/courses/index.json.jbuilder b/app/views/courses/index.json.jbuilder index 23e8715af..58a75e317 100644 --- a/app/views/courses/index.json.jbuilder +++ b/app/views/courses/index.json.jbuilder @@ -10,7 +10,7 @@ json.courses do json.tasks_count get_tasks_count course json.visits course.visits json.is_public course.is_public - json.is_accessible course.is_public? ? true : (course.tea_id == @user.id || @user.course_identity(course) < 5) + json.is_accessible course.is_public? || course.tea_id == @user.id || @user.course_identity(course) < Course::NORMAL json.is_end course.is_end json.first_category_url module_url(course.course_modules.first, course) end diff --git a/app/views/exercises/exercise_lists.json.jbuilder b/app/views/exercises/exercise_lists.json.jbuilder index b51e781c7..5e7c83b35 100644 --- a/app/views/exercises/exercise_lists.json.jbuilder +++ b/app/views/exercises/exercise_lists.json.jbuilder @@ -15,6 +15,7 @@ json.exercise_types do json.exercise_id @exercise.id json.subjective @subjective_type #是否包含主观题,1为包括,0为不包括 json.exercise_end_time ((@ex_user_end_time.nil? || @ex_user_end_time < Time.now) ? "--" : how_much_time(@ex_user_end_time)) + json.groups_count @exercise_course_groups.size end if @exercise_current_user_status == 0 #当为老师的时候 @@ -29,7 +30,6 @@ if @exercise_current_user_status == 0 #当为老师的时候 else json.course_groups [] end - end if @current_user_ex_answers.present? diff --git a/app/views/graduation_topics/show.json.jbuilder b/app/views/graduation_topics/show.json.jbuilder index a75ac5240..87fcc87aa 100644 --- a/app/views/graduation_topics/show.json.jbuilder +++ b/app/views/graduation_topics/show.json.jbuilder @@ -8,6 +8,7 @@ json.users_count @users_count json.course_identity @current_user.course_identity(@course) json.user_selected_topic @graduation_topic.user_status(current_user.id) json.group_list @course.teacher_group(current_user.id) +json.user_selected @user_selected # 列表数据 json.users_list do diff --git a/app/views/polls/poll_lists.json.jbuilder b/app/views/polls/poll_lists.json.jbuilder index fef129599..8278ac3e0 100644 --- a/app/views/polls/poll_lists.json.jbuilder +++ b/app/views/polls/poll_lists.json.jbuilder @@ -16,6 +16,7 @@ json.poll_types do json.user_permission @poll_current_user_status #当前用户存在且为课堂教师/管理员/超级管理员时为0 ,其他否则为1 json.poll_id @poll.id json.poll_end_time @poll.end_time + json.groups_count @poll_course_groups.size end if @poll_current_user_status == 0 diff --git a/lib/tasks/exercise_publish.rake b/lib/tasks/exercise_publish.rake index 8a13154cc..7d80dc2e9 100644 --- a/lib/tasks/exercise_publish.rake +++ b/lib/tasks/exercise_publish.rake @@ -25,83 +25,118 @@ namespace :exercise_publish do end end - # def calculate_student_score(exercise, user) - # score = 0 - # score1 = 0 - # score2 = 0 - # score3 = 0 - # score4 = 0 - # exercise_qustions = exercise.exercise_questions - # exercise_qustions.each do |question| - # if question.question_type != 5 - # answer = question.exercise_answers.where("#{ExerciseAnswer.table_name}.user_id = #{user.id}") - # if question.question_type == 3 - # standard_answer =[] - # question.exercise_standard_answers.each do |answer| - # standard_answer << answer.answer_text.strip.downcase + #计算试卷的总分和试卷的答题状态 + # def calculate_student_score(exercise,user) + # score1 = 0.0 #选择题/判断题 + # score2 = 0.0 #填空题 + # score5 = 0.0 #实训题 + # ques_stand = [] #问题是否正确 + # exercise_questions = exercise.exercise_questions + # exercise_questions.each do |q| + # if q.question_type != 5 + # answers_content = q.exercise_answers.search_answer_users("user_id",user.id) #学生的答案 + # else + # answers_content = q.exercise_shixun_answers.search_shixun_answers("user_id",user.id) #学生的答案 + # end + # if q.question_type <= 2 #为选择题或判断题时 + # answer_choice_array = [] + # answers_content.each do |a| + # answer_choice_array.push(a.exercise_choice.choice_position) #学生答案的位置 + # end + # user_answer_content = answer_choice_array.sort + # standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个 + # if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分 + # if standard_answer.count > 0 + # multi_each_score = (q.question_score / standard_answer.count) #当多选答案正确时,每个answer的分数均摊。 + # else + # multi_each_score = 0.0 # end + # answers_content.update_all(:score => multi_each_score) + # score1 = score1 + q.question_score + # end + # elsif q.question_type == 3 #填空题 + # null_standard_answer = q.exercise_standard_answers + # standard_answer_array = null_standard_answer.select(:exercise_choice_id,:answer_text) + # standard_answer_ids = standard_answer_array.pluck(:exercise_choice_id).reject(&:blank?).uniq #标准答案的exercise_choice_id数组 + # standard_answer_count = standard_answer_ids.count + # if standard_answer_count > 0 #存在标准答案时才有分数 + # each_standard_score = (q.question_score.to_f / standard_answer_count).round(1) #每一空的得分 # else - # standard_answer = question.exercise_standard_answers.first + # each_standard_score = 0.0 # end - # - # unless answer.empty? - # # 问答题有多个答案 - # if question.question_type == 3 && !standard_answer.empty? - # if standard_answer.include?(answer.first.answer_text.strip.downcase) - # score1 = score1+ question.question_score unless question.question_score.nil? - # end - # 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? + # if q.is_ordered + # answers_content.each do |u| + # i_standard_answer = standard_answer_array.where(exercise_choice_id:u.exercise_choice_id).pluck(:answer_text).reject(&:blank?).map!(&:downcase) #该选项的全部标准答案 + # if i_standard_answer.include?(u.answer_text.downcase) #该空的标准答案包含用户的答案才有分数 + # u.update_attribute("score",each_standard_score) + # score2 = score2 + each_standard_score # end - # elsif question.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? + # end + # else + # st_answer_text = standard_answer_array.pluck(:answer_text).reject(&:blank?).map!(&:downcase) + # answers_content.each do |u| + # u_answer_text = u.answer_text.downcase + # if st_answer_text.include?(u_answer_text) #只要标准答案包含用户的答案,就有分数。同时,下一次循环时,就会删除该标准答案。防止用户的相同答案获分 + # u.update_attribute("score",each_standard_score) + # score2 = score2 + each_standard_score + # st_answer_text.delete(u_answer_text) # end # end # end - # else - # question.exercise_shixun_challenges.each do |exercise_cha| - # game = Game.where(:user_id => user.id, :challenge_id => exercise_cha.challenge_id).first + # elsif q.question_type == 5 #实训题时,主观题这里不评分 + # q.exercise_shixun_challenges.each do |exercise_cha| + # game = Game.user_games(user.id,exercise_cha.challenge_id).first #当前用户的关卡 # if game.present? # exercise_cha_score = 0 # answer_status = 0 - # cha_path = exercise_cha.challenge.path.present? ? exercise_cha.challenge.path.split(";") : [] - # challeng_path = cha_path.reject(&:blank?)[0].try(:strip) + # cha_path = challenge_path exercise_cha.challenge.path # if game.status == 2 && game.final_score >= 0 - # exercise_cha_score = exercise_cha.question_score + # exercise_cha_score = game.real_score exercise_cha.question_score #每一关卡的得分 # answer_status = 1 # end - # if exercise_cha.exercise_shixun_answers.where(:user_id => user.id).empty? - # if GameCode.where(:game_id => game.try(:id), :path => challeng_path).first.present? - # game_code = GameCode.where(:game_id => game.try(:id), :path => challeng_path).first + # if exercise_cha.exercise_shixun_answers.search_shixun_answers("user_id",user.id).blank? #把关卡的答案存入试卷的实训里 + # game_challenge = game.game_codes.search_challenge_path(cha_path).first + # if game_challenge.present? + # game_code = game_challenge # code = game_code.try(:new_code) # else - # begin - # g = Gitlab.client - # Rails.logger.info "commit_exercise_path---- #{challeng_path}" - # if game.present? - # code = g.files(game.myshixun.gpid, challeng_path, "master").try(:content) - # else - # code = g.files(question.shixun.gpid, challeng_path, "master").try(:content) - # end - # code = tran_base64_decode64(code) - # rescue Exception => e - # @error_messages = e.message - # Rails.logger.info "commit_exercise---- #{@error_messages}" - # end + # code = git_fle_content(exercise_cha.shixun.repo_path,cha_path) # end - # ExerciseShixunAnswer.create(:exercise_question_id => question.id, :exercise_shixun_challenge_id => exercise_cha.id, :user_id => user.id, - # :score => exercise_cha_score, :answer_text => code, :status => answer_status) - # + # sx_option = { + # :exercise_question_id => q.id, + # :exercise_shixun_challenge_id => exercise_cha.id, + # :user_id => user.id, + # :score => exercise_cha_score, + # :answer_text => code, + # :status => answer_status + # } + # ex_shixun_answer = ExerciseShixunAnswer.new(sx_option) + # ex_shixun_answer.save! # end - # score4 += exercise_cha_score + # score5 += exercise_cha_score # end # end # end + # user_scores = answers_content.score_reviewed.pluck(:score).sum + # if user_scores > 0 + # stand_answer = 1 + # else + # stand_answer = 0 + # end + # ques_option = { + # "q_id":q.id, #该问题的id + # "q_type":q.question_type, + # "q_position":q.question_number, #该问题的位置 + # "stand_status":stand_answer, #该问题是否正确,1为正确,0为错误 + # "user_score":user_scores #每个问题的总得分 + # } + # ques_stand.push(ques_option) # end - # score = score1 + score2 + score3 + score4 + # total_score = score1 + score2 + score5 + # { + # "total_score":total_score, + # "stand_status":ques_stand + # } # end task :publish => :environment do @@ -169,6 +204,9 @@ namespace :exercise_publish do end task :end => :environment do + # include ExercisesHelper + # include ApplicationController + exercises = Exercise.where("end_time <=? and exercise_status = 2",Time.now) exercises.each do |exercise| course = exercise.course @@ -180,7 +218,7 @@ namespace :exercise_publish do s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) - if exercise_user.user.exercise_answer.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? + if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? exercise_user.update_attributes(:subjective_score => 0) end end @@ -201,11 +239,12 @@ namespace :exercise_publish do s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) - if exercise_user.user.exercise_answer.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? + if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? exercise_user.update_attributes(:subjective_score => 0) end end end end + logger.info("") end end