diff --git a/app/controllers/attendances_controller.rb b/app/controllers/attendances_controller.rb index 412b3bee6..633da5d5d 100644 --- a/app/controllers/attendances_controller.rb +++ b/app/controllers/attendances_controller.rb @@ -81,7 +81,7 @@ class AttendancesController < ApplicationController old_group_ids = @attendance.course_attendance_groups.pluck(:course_group_id) unless old_group_ids.include?(0) - all_groups_ids = old_group_ids + params[:group_ids] + all_groups_ids = old_group_ids + params[:group_ids].map(&:to_i) # 如果新增的的分班加上之前的分班是课堂的全部分班,则只需创建一条记录 if all_groups_ids.uniq.count == @course.course_groups_count @attendance.course_attendance_groups.destroy_all diff --git a/app/controllers/exercise_questions_controller.rb b/app/controllers/exercise_questions_controller.rb index e237f4605..18316b3ac 100644 --- a/app/controllers/exercise_questions_controller.rb +++ b/app/controllers/exercise_questions_controller.rb @@ -614,31 +614,21 @@ class ExerciseQuestionsController < ApplicationController @exercise_current_user.update!(ex_scores) end comments = params[:comment] - question_comment = @exercise_question.exercise_answer_comments&.first - - if question_comment.present? - comment_option = { - :comment => comments, - :score => @c_score, - :exercise_answer_id => ex_answers.present? ? ex_answers.first.id : nil, - :user_id => current_user.id - } - question_comment.update!(comment_option) - @exercise_comments = question_comment + + if @exercise_question.question_type == Exercise::PRACTICAL + shixun_answer = ExerciseShixunAnswer.find_by(exercise_question_id: @exercise_question.id, user_id: @user_id, exercise_shixun_challenge_id: @shixun_a_id) + answer_comment = shixun_answer&.exercise_answer_comments.take else - ex_answer_comment_id = @exercise_question.exercise_answers.find_by(user_id: @user_id).try(:id) - comment_option = { - :user_id => current_user.id, - :comment => comments, - :score => @c_score, - :exercise_question_id => @exercise_question.id, - :exercise_shixun_answer_id => @shixun_a_id.present? ? @shixun_a_id : nil, - :exercise_answer_id => ex_answer_comment_id - } - @exercise_comments = ExerciseAnswerComment.new(comment_option) - @exercise_comments.save! + question_answer = ExerciseAnswer.find_by(exercise_question_id: @exercise_question.id, user_id: @user_id) + answer_comment = question_answer&.exercise_answer_comments.take + end - # 给被评阅人发送消息,同一个教师评阅无需重复发消息 + if answer_comment.present? + answer_comment.update!(:comment => comments, :score => @c_score) + else + ExerciseAnswerComment.create!(:comment => comments, :score => @c_score, :user_id => current_user.id, + :exercise_question_id => @exercise_question.id, :exercise_shixun_answer_id => shixun_answer&.id, + :exercise_answer_id => question_answer&.id) unless Tiding.where(user_id: @user_id, trigger_user_id: current_user.id, parent_container_id: @exercise.id, parent_container_type: "ExerciseScore").exists? Tiding.create!(user_id: @user_id, trigger_user_id: current_user.id, container_id: @exercise.id, @@ -646,8 +636,42 @@ class ExerciseQuestionsController < ApplicationController parent_container_type: "ExerciseScore", belong_container_id: @course.id, belong_container_type: 'Course', tiding_type: "Exercise") end - end + + # question_comment = @exercise_question.exercise_answer_comments&.first + # + # if question_comment.present? + # comment_option = { + # :comment => comments, + # :score => @c_score, + # :exercise_answer_id => ex_answers.present? ? ex_answers.first.id : nil, + # :user_id => current_user.id + # } + # question_comment.update!(comment_option) + # @exercise_comments = question_comment + # else + # ex_answer_comment_id = @exercise_question.exercise_answers.find_by(user_id: @user_id).try(:id) + # comment_option = { + # :user_id => current_user.id, + # :comment => comments, + # :score => @c_score, + # :exercise_question_id => @exercise_question.id, + # :exercise_shixun_answer_id => @shixun_a_id.present? ? @shixun_a_id : nil, + # :exercise_answer_id => ex_answer_comment_id + # } + # @exercise_comments = ExerciseAnswerComment.new(comment_option) + # @exercise_comments.save! + # + # # 给被评阅人发送消息,同一个教师评阅无需重复发消息 + # + # unless Tiding.where(user_id: @user_id, trigger_user_id: current_user.id, parent_container_id: @exercise.id, parent_container_type: "ExerciseScore").exists? + # Tiding.create!(user_id: @user_id, trigger_user_id: current_user.id, container_id: @exercise.id, + # container_type: "Exercise", parent_container_id: @exercise.id, + # parent_container_type: "ExerciseScore", belong_container_id: @course.id, + # belong_container_type: 'Course', tiding_type: "Exercise") + # end + # + # end end end diff --git a/app/helpers/exercises_helper.rb b/app/helpers/exercises_helper.rb index 19c4e14f3..1887aee5a 100644 --- a/app/helpers/exercises_helper.rb +++ b/app/helpers/exercises_helper.rb @@ -998,7 +998,7 @@ module ExercisesHelper def has_comment? exercise_user, question_ids exercise_answer_ids = exercise_user.user.exercise_answers.where(exercise_question_id: question_ids).pluck(:id) exercise_shixun_answer_ids = exercise_user.user.exercise_shixun_answers.where(exercise_question_id: question_ids).pluck(:id) - exercise_user.commit_status == 1 && (exercise_user.exercise_user_scores.size > 0 || exercise_user.subjective_score >= 0.0 || + exercise_user.commit_status == 1 && (exercise_user.exercise_user_scores.size > 0 || ExerciseAnswerComment.where(exercise_answer_id: exercise_answer_ids).or(ExerciseAnswerComment.where(exercise_shixun_answer_id: exercise_shixun_answer_ids)).exists?) end end diff --git a/app/services/users/shixun_service.rb b/app/services/users/shixun_service.rb index 7e95cda84..0efe2dd1a 100644 --- a/app/services/users/shixun_service.rb +++ b/app/services/users/shixun_service.rb @@ -34,8 +34,10 @@ class Users::ShixunService def status_filter(relations) case params[:category] - when 'study', 'collect' then + when 'study' then study_shixun_status_filter(relations) + when 'collect' then + collect_shixun_status_filter(relations) when 'manage' then manage_shixun_status_filter(relations) else @@ -66,6 +68,16 @@ class Users::ShixunService relations end + def collect_shixun_status_filter relations + passed_shixun_ids = user.myshixuns.where(shixun_id: relations, status: 1).pluck(:shixun_id) + if params[:status] == 'passed' + relations = relations.where(id: passed_shixun_ids) + elsif params[:status] == 'processing' + relations = relations.where.not(id: passed_shixun_ids) + end + relations + end + def manage_shixun_status_filter(relations) if params[:status] == "publiced" relations = relations.where(public: 2) @@ -99,9 +111,9 @@ class Users::ShixunService end case params[:category] - when 'study', 'collect' then + when 'study' then relations.order("myshixuns.#{sort_by} #{sort_direction}") - when 'manage' then + when 'manage', 'collect' then relations.order("shixuns.#{sort_by} #{sort_direction}") else relations.order("shixuns.#{sort_by} #{sort_direction}") diff --git a/db/migrate/20200320144644_migrate_exercise_shixun_answer_comment.rb b/db/migrate/20200320144644_migrate_exercise_shixun_answer_comment.rb new file mode 100644 index 000000000..99998830c --- /dev/null +++ b/db/migrate/20200320144644_migrate_exercise_shixun_answer_comment.rb @@ -0,0 +1,10 @@ +class MigrateExerciseShixunAnswerComment < ActiveRecord::Migration[5.2] + def change + ExerciseAnswerComment.where.not(exercise_shixun_answer_id: ExerciseShixunAnswer.all).where("exercise_shixun_answer_id is not null and exercise_answer_id is not null").each do |answer| + exercise_shixun_answer = ExerciseShixunAnswer.find_by(id: answer.exercise_answer_id) + if exercise_shixun_answer.present? + answer.update_columns(exercise_shixun_answer_id: exercise_shixun_answer&.id) + end + end + end +end diff --git a/db/migrate/20200320082708_uniq_index_on_collections.rb b/db/migrate/20200320152708_uniq_index_on_collections.rb similarity index 50% rename from db/migrate/20200320082708_uniq_index_on_collections.rb rename to db/migrate/20200320152708_uniq_index_on_collections.rb index 30b55def4..65eecb309 100644 --- a/db/migrate/20200320082708_uniq_index_on_collections.rb +++ b/db/migrate/20200320152708_uniq_index_on_collections.rb @@ -1,6 +1,7 @@ class UniqIndexOnCollections < ActiveRecord::Migration[5.2] def change remove_index :collections, [:container_type, :container_id] - add_index :collections, [:container_type, :container_id], unique: true + add_index :collections, [:container_type, :container_id] + add_index :collections, [:user_id, :container_type, :container_id], unique: true end end diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index a3efafdb9..178f70438 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -46,7 +46,7 @@ debugType = "admin"; // 老师 // debugType="teacher"; // 学生 -// debugType="student"; + debugType="student"; diff --git a/public/react/src/modules/courses/coursesPublic/NewShixunModel.js b/public/react/src/modules/courses/coursesPublic/NewShixunModel.js index ce60dc7d7..ed3de7132 100644 --- a/public/react/src/modules/courses/coursesPublic/NewShixunModel.js +++ b/public/react/src/modules/courses/coursesPublic/NewShixunModel.js @@ -443,7 +443,7 @@ class NewShixunModel extends Component{