diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 258ab9d83..da6e99418 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -191,6 +191,7 @@ class AttachmentsController < ApplicationController candown = current_user.member_of_course?(course) end tip_exception(403, "您没有权限进入") if course.present? && !candown + tip_exception(403, "您没有权限进入") if @file.container.is_a?(ApplyUserAuthentication) end end end diff --git a/app/controllers/competitions/competitions_controller.rb b/app/controllers/competitions/competitions_controller.rb index 1eaa0dc22..6ab7e83a0 100644 --- a/app/controllers/competitions/competitions_controller.rb +++ b/app/controllers/competitions/competitions_controller.rb @@ -46,7 +46,7 @@ class Competitions::CompetitionsController < Competitions::BaseController @competition_modules = @competition.unhidden_competition_modules # 未登录、未获奖用户,不展示获奖证书栏目 - if !current_user.logged? || !current_competition.finished? || !current_competition.competition_prize_users.exists?(user: current_user) + if !current_user.logged? || !current_competition.finished? || (!current_competition.competition_prize_users.exists?(user: current_user) && !current_user.admin_or_business?) @competition_modules = @competition_modules.select { |mod| mod.name != '获奖证书' } end diff --git a/app/models/apply_user_authentication.rb b/app/models/apply_user_authentication.rb index 4f94202f6..ad74b0261 100644 --- a/app/models/apply_user_authentication.rb +++ b/app/models/apply_user_authentication.rb @@ -4,6 +4,7 @@ class ApplyUserAuthentication < ApplicationRecord belongs_to :user has_many :tidings, :as => :container, :dependent => :destroy + has_one :attachment, as: :container, dependent: :destroy scope :real_name_auth, -> { where(auth_type: 1) } scope :professional_auth, -> { where(auth_type: 2) } diff --git a/app/services/admins/identity_auths/agree_apply_service.rb b/app/services/admins/identity_auths/agree_apply_service.rb index 65a3b2376..d75a6d7db 100644 --- a/app/services/admins/identity_auths/agree_apply_service.rb +++ b/app/services/admins/identity_auths/agree_apply_service.rb @@ -14,7 +14,8 @@ class Admins::IdentityAuths::AgreeApplyService < ApplicationService RewardGradeService.call(user, container_id: user.id, container_type: 'Authentication', score: 500) deal_tiding! - delete_auth_file! + apply.attachment&.destroy + # delete_auth_file! end end diff --git a/app/services/admins/identity_auths/refuse_apply_service.rb b/app/services/admins/identity_auths/refuse_apply_service.rb index 57581dd40..7ac2e6c38 100644 --- a/app/services/admins/identity_auths/refuse_apply_service.rb +++ b/app/services/admins/identity_auths/refuse_apply_service.rb @@ -12,7 +12,8 @@ class Admins::IdentityAuths::RefuseApplyService < ApplicationService apply.update!(status: 2, remarks: reason) deal_tiding! - delete_auth_file! + apply.attachment&.destroy + # delete_auth_file! end end diff --git a/app/services/admins/professional_auths/agree_apply_service.rb b/app/services/admins/professional_auths/agree_apply_service.rb index 81654f0d3..1ca2da2fc 100644 --- a/app/services/admins/professional_auths/agree_apply_service.rb +++ b/app/services/admins/professional_auths/agree_apply_service.rb @@ -14,7 +14,8 @@ class Admins::ProfessionalAuths::AgreeApplyService < ApplicationService RewardGradeService.call(user, container_id: user.id, container_type: 'Professional', score: 500) deal_tiding! - delete_auth_file! + apply.attachment&.destroy + # delete_auth_file! end end diff --git a/app/services/admins/professional_auths/refuse_apply_service.rb b/app/services/admins/professional_auths/refuse_apply_service.rb index b5332c999..a055488c3 100644 --- a/app/services/admins/professional_auths/refuse_apply_service.rb +++ b/app/services/admins/professional_auths/refuse_apply_service.rb @@ -12,7 +12,8 @@ class Admins::ProfessionalAuths::RefuseApplyService < ApplicationService apply.update!(status: 2, remarks: reason) deal_tiding! - delete_auth_file! + apply.attachment&.destroy + # delete_auth_file! end end diff --git a/app/services/users/apply_authentication_service.rb b/app/services/users/apply_authentication_service.rb index c68260dcb..cab76b45c 100644 --- a/app/services/users/apply_authentication_service.rb +++ b/app/services/users/apply_authentication_service.rb @@ -22,9 +22,11 @@ class Users::ApplyAuthenticationService < ApplicationService user.user_extension.update!(gender: params[:gender].to_i) if params[:gender].present? - user.apply_user_authentication.create!(auth_type: 1, status: 0) + apply = user.apply_user_authentication.create!(auth_type: 1, status: 0) - move_image_file! unless params[:upload_image].to_s == 'false' + Attachment.associate_container(params[:attachment_ids], apply.id, apply.class) if params[:attachment_ids] + + # move_image_file! unless params[:upload_image].to_s == 'false' end # sms_notify_admin diff --git a/app/services/users/apply_professional_auth_service.rb b/app/services/users/apply_professional_auth_service.rb index 46a4658aa..81cd11a4c 100644 --- a/app/services/users/apply_professional_auth_service.rb +++ b/app/services/users/apply_professional_auth_service.rb @@ -34,9 +34,11 @@ class Users::ApplyProfessionalAuthService < ApplicationService user.save! extension.save! - user.apply_user_authentication.create!(auth_type: 2, status: 0) + apply = user.apply_user_authentication.create!(auth_type: 2, status: 0) - move_image_file! unless params[:upload_image].to_s == 'false' + Attachment.associate_container(params[:attachment_ids], apply.id, apply.class) if params[:attachment_ids] + + # move_image_file! unless params[:upload_image].to_s == 'false' end # sms_notify_admin diff --git a/app/views/admins/identity_authentications/shared/_list.html.erb b/app/views/admins/identity_authentications/shared/_list.html.erb index c40d681ec..e1c603215 100644 --- a/app/views/admins/identity_authentications/shared/_list.html.erb +++ b/app/views/admins/identity_authentications/shared/_list.html.erb @@ -51,8 +51,8 @@ <% unless is_processed %> - <% if File.exists?(disk_real_name_auth_filename(user.id)) %> - <%= image_tag(real_name_auth_file_url(user.id).to_s + "?#{Time.now.to_i}", width: 40, height: 40, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> + <% if apply.attachment %> + <%= image_tag("/api/attachments/#{apply.attachment.id}", width: 40, height: 40, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> <% else %> <%= content_tag(:span, '图片已删除', class: 'text-secondary') %> <% end %> diff --git a/app/views/admins/professional_authentications/shared/_list.html.erb b/app/views/admins/professional_authentications/shared/_list.html.erb index 79cf31aad..0bf8ea4a3 100644 --- a/app/views/admins/professional_authentications/shared/_list.html.erb +++ b/app/views/admins/professional_authentications/shared/_list.html.erb @@ -48,8 +48,8 @@ <% unless is_processed %> - <% if File.exists?(disk_professional_auth_filename(user.id)) %> - <%= image_tag(professional_auth_file_url(user.id).to_s + "?#{Time.now.to_i}", width: 40, height: 40, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> + <% if apply.attachment %> + <%= image_tag("/api/attachments/#{apply.attachment.id}", width: 40, height: 40, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %> <% else %> <%= content_tag(:span, '图片已删除', class: 'text-secondary') %> <% end %> diff --git a/app/views/courses/students.json.jbuilder b/app/views/courses/students.json.jbuilder index 2790a81fc..93d05b623 100644 --- a/app/views/courses/students.json.jbuilder +++ b/app/views/courses/students.json.jbuilder @@ -5,7 +5,7 @@ json.students do json.name student.user.try(:real_name) json.name_link user_path(student.user) json.student_id student.user.try(:student_id) - json.course_group_name student.course_group.try(:name) + json.course_group_name student.course_group_name json.course_member_id student.id if @user_course_identity < Course::ASSISTANT_PROFESSOR && !params[:course_group_id].present? json.member_roles student.user.course_role(@course) diff --git a/db/migrate/20191106055638_migrate_2808_exercise_score.rb b/db/migrate/20191106055638_migrate_2808_exercise_score.rb new file mode 100644 index 000000000..ebf09e148 --- /dev/null +++ b/db/migrate/20191106055638_migrate_2808_exercise_score.rb @@ -0,0 +1,111 @@ +class Migrate2808ExerciseScore < ActiveRecord::Migration[5.2] + def challenge_path(path) + cha_path = path.present? ? path.split(";") : [] + cha_path.reject(&:blank?)[0].try(:strip) + end + + # 版本库文件内容,带转码 + def git_fle_content(repo_path, path) + begin + Rails.logger.info("git file content: repo_path is #{repo_path}, path is #{path}") + + content = GitService.file_content(repo_path: repo_path, path: path) + + Rails.logger.info("git file content: content is #{content}") + decode_content = nil + if content.present? + content = content["content"] #6.24 -hs 这个为新增,因为当实训题里含有选择题时,这里会报错,undefined method `[]' for nil:NilClass + + content = Base64.decode64(content) + cd = CharDet.detect(content) + Rails.logger.info "encoding: #{cd['encoding']} confidence: #{cd['confidence']}" + # 字符编码问题,GB18030编码识别率不行 + decode_content = + if cd["encoding"] == 'GB18030' && cd['confidence'] > 0.8 + content.encode('UTF-8', 'GBK', {:invalid => :replace, :undef => :replace, :replace => ' '}) + else + content.force_encoding('UTF-8') + end + end + + decode_content + + rescue Exception => e + Rails.logger.error(e.message) + raise Educoder::TipException.new("文档内容获取异常") + end + end + + def calculate_student_score(exercise,user) + score5 = 0.0 #实训题 + exercise_questions = exercise.exercise_questions.includes(:exercise_standard_answers,:exercise_shixun_challenges) + exercise_questions.each do |q| + if 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.0 + answer_status = 0 + # if game.status == 2 && game.final_score >= 0 + if game.final_score > 0 && game.end_time < exercise.end_time + exercise_cha_score = game.real_score(exercise_cha.question_score) + # exercise_cha_score = exercise_cha.question_score #每一关卡的得分 + answer_status = 1 + end + ex_shixun_answer_content = exercise_cha.exercise_shixun_answers.where(user_id:user.id,exercise_question_id:q.id) + code = nil + if exercise_cha.challenge&.path.present? + cha_path = challenge_path(exercise_cha.challenge&.path) + 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 + code = git_fle_content(game.myshixun.repo_path,cha_path) + rescue + code = "" + end + end + end + if ex_shixun_answer_content.blank? #把关卡的答案存入试卷的实训里 + ### Todo 实训题的_shixun_details里的代码是不是直接从这里取出就可以了?涉及到code的多个版本库的修改 + sx_option = { + :exercise_question_id => q.id, + :exercise_shixun_challenge_id => exercise_cha.id, + :user_id => user.id, + :score => exercise_cha_score.round(1), + :answer_text => code, + :status => answer_status + } + ExerciseShixunAnswer.create!(sx_option) + else + ex_shixun_answer_content.first.update_attributes!(score:exercise_cha_score.round(1),answer_text:code,status:answer_status) + end + score5 += exercise_cha_score + else + score5 += 0.0 + end + end + end + end + score5 + end + + def change + exercise = Exercise.find_by(id: 2808) + if exercise + exercise_users = exercise.exercise_users.where("start_at is not null and commit_status = 0") + exercise_users.each do |exercise_user| + calculate_score = calculate_student_score(exercise, exercise_user.user) + subjective_score = exercise_user.subjective_score + total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score + total_score = calculate_score + total_score_subjective_score + if exercise_user.end_at.nil? + exercise_user.update_attributes!(score:total_score,objective_score:calculate_score,end_at:exercise.end_time,commit_status:1,status:1,commit_method:3) + end + puts exercise_user.id + end + end + end +end diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index 91427534f..ac0f81356 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -107,7 +107,7 @@ const buildColumns = (that,isParent) => { } ]; - if (course_groups && course_groups.length) { + if (that.hasGroupModule()) { that.isStudentPage && columns.push({ title: '分班', dataIndex: 'course_group_name', @@ -249,6 +249,13 @@ class studentsList extends Component{ console.log(error) }); } + hasGroupModule = () => { + const { course_modules } = this.props; + const result = course_modules && course_modules.filter( item => { + return item.type == 'course_group' + }) + return result && result.length > 0 + } Downloadcal=()=>{ this.setState({ diff --git a/public/react/src/modules/page/readme.txt b/public/react/src/modules/page/readme.txt index f5e5646e9..dc22a971b 100644 --- a/public/react/src/modules/page/readme.txt +++ b/public/react/src/modules/page/readme.txt @@ -221,4 +221,8 @@ TPI SSH VNCDisplay - 使用的github上的代码 https://github.com/novnc/noVNC/ \ No newline at end of file + 使用的github上的代码 https://github.com/novnc/noVNC/ + + +tpi拖拽改变视图大小代码: +js_min_all.js中搜索 doc.live('mousemove touchmove',function(e){ \ No newline at end of file