From fe990abc607c24e1e0b12d4bcb000f4550e971e4 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Sat, 6 Jul 2019 10:21:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=95=E5=8D=B7=E7=9A=84=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8F=8A=E5=AF=BC=E5=87=BA=E7=9A=84=E5=90=8D=E7=A7=B0=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 3 +- app/controllers/exercises_controller.rb | 84 ++++++++++++------- .../graduation_tasks_controller.rb | 5 +- .../graduation_topics_controller.rb | 5 +- .../homework_commons_controller.rb | 4 +- app/controllers/polls_controller.rb | 6 +- app/controllers/zips_controller.rb | 8 +- app/helpers/polls_helper.rb | 7 +- app/models/exercise.rb | 4 +- .../batch_export_shixun_report_service.rb | 2 +- app/services/export_exercises_service.rb | 2 +- 11 files changed, 78 insertions(+), 52 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 0679e5619..cb2b8d201 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -993,7 +993,8 @@ class CoursesController < ApplicationController normal_status(-1,"课堂暂时没有学生") else member_to_xlsx(@course, @all_members, @c_homeworks, @c_exercises, @c_tasks) - filename = current_user.real_name + "_" + @course.name + "_全部成绩" + Time.now.strftime('%Y%m%d_%H%M%S') + filename_ = "#{current_user.real_name}_#{@course.name}_全部成绩" + filename = Base64.urlsafe_encode64(filename_) render xlsx: "#{format_sheet_name filename.strip.first(30)}",template: "courses/export_member_scores_excel.xlsx.axlsx", locals: {course_info:@course_info, activity_level:@user_activity_level, course_scores:@course_user_scores,shixun_works:@shixun_work_arrays, diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 9087aeee6..6d0adef27 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -23,7 +23,6 @@ class ExercisesController < ApplicationController before_action :commit_shixun_present,only: [:commit_shixun] include ExportHelper include ExercisesHelper - # require 'pdfkit' def index ActiveRecord::Base.transaction do @@ -43,46 +42,65 @@ class ExercisesController < ApplicationController @exercises = @exercises_all #老师能看到全部的试卷,不管是已发布的/未发布的/已截止的/统一设置的/私有设置的(看到内容不同) elsif @user_course_identity == Course::STUDENT # 2为课堂成员,能看到统一设置的和自己班级的 @is_teacher_or = 2 - # get_exercise_left_time(@exercise,current_user) - member_group_id = @current_student.first.try(:course_group_id).to_i # 成员的分班id,默认为0 - if member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的) + @member_group_id = @current_student.first.try(:course_group_id).to_i # 成员的分班id,默认为0 + if @member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的) @exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : [] else #已分班级的成员,可以查看统一设置和单独设置(试卷是发布在该班级)试卷 # 已发布 当前用户班级分组的 试卷id - exercise_settings_ids = @course.exercise_group_settings.exercise_group_published - .where(course_group_id: member_group_id).pluck(:exercise_id).uniq - @exercises = member_show_exercises.exists? ? - member_show_exercises.unified_setting.or(member_show_exercises.where(id: exercise_settings_ids)) - : [] + not_exercise_ids = @course.exercise_group_settings.exercise_group_not_published.where("course_group_id = #{@member_group_id}").pluck(:exercise_id) + @exercises = member_show_exercises.where.not(id: not_exercise_ids) + # exercise_settings_ids = @course.exercise_group_settings.exercise_group_published + # .where(course_group_id: member_group_id).pluck(:exercise_id).uniq + # @exercises = member_show_exercises.exists? ? + # member_show_exercises.unified_setting.or(member_show_exercises.where(id: exercise_settings_ids)) + # : [] end else #用户未登陆或不是该课堂成员,仅显示统一设置的(已发布的/已截止的),如有公开,则不显示锁,不公开,则显示锁 @is_teacher_or = 0 - @exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : [] + @exercises = member_show_exercises.unified_setting end if @exercises.size > 0 if params[:type].present? choose_type = params[:type].to_i - member_group_id = @current_student.first.try(:course_group_id).to_i - if @is_teacher_or == 2 && member_group_id > 0 - exercise_groups_sets = @course.exercise_group_settings.where(course_group_id: member_group_id) - .exercise_group_published - exercise_settings_ids = exercise_groups_sets.pluck(:exercise_id) - exercise_ended_ids = exercise_groups_sets.exercise_group_ended.pluck(:exercise_id).uniq - if choose_type == 2 - @exercises = @exercises_all.exists? ? - @exercises_all.exercise_by_status(2).unified_setting - .or(@exercises_all.where(id: (exercise_settings_ids - exercise_ended_ids).uniq)) - : [] - elsif choose_type == 3 - @exercises = @exercises_all.exists? ? - @exercises_all.exercise_by_status(3).unified_setting - .or(@exercises_all.where(id: exercise_ended_ids)) - : [] - end - else - @exercises = @exercises.exercise_by_status(choose_type) + ex_setting_ids = [] + case choose_type + when 1 + ex_setting_ids = @course.exercise_group_settings.exercise_group_not_published.pluck(:exercise_id) + + # @exercises = @exercises.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_setting_ids)) + when 2 + ex_setting_ids = @course.exercise_group_settings.where("publish_time is not null and publish_time <= ? and end_time > ?",Time.now,Time.now).pluck(:exercise_id) + # @exercises = @exercises.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_published_groups)) + when 3 + ex_setting_ids = @course.exercise_group_settings.exercise_group_ended.pluck(:exercise_id) + # @exercises = @exercises.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_ended_groups)) end + @exercises = @exercises.unified_setting.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_setting_ids)).distinct + + + + + # member_group_id = @current_student.first.try(:course_group_id).to_i + # if @is_teacher_or == 2 && member_group_id > 0 + # exercise_groups_sets = @course.exercise_group_settings.where(course_group_id: member_group_id) + # .exercise_group_published + # exercise_settings_ids = exercise_groups_sets.pluck(:exercise_id) + # exercise_ended_ids = exercise_groups_sets.exercise_group_ended.pluck(:exercise_id).uniq + # if choose_type == 2 + # @exercises = @exercises_all.exists? ? + # @exercises_all.exercise_by_status(2).unified_setting + # .or(@exercises_all.where(id: (exercise_settings_ids - exercise_ended_ids).uniq)) + # : [] + # elsif choose_type == 3 + # @exercises = @exercises_all.exists? ? + # @exercises_all.exercise_by_status(3).unified_setting + # .or(@exercises_all.where(id: exercise_ended_ids)) + # : [] + # end + # else + # @exercises = @exercises.exercise_by_status(choose_type) + # end end if params[:search].present? @@ -1302,9 +1320,11 @@ class ExercisesController < ApplicationController respond_to do |format| format.xlsx{ get_export_users(@exercise,@course,@export_ex_users) - exercise_export_name = - "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{exercise_export_name.strip.first(30)}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns} + exercise_export_name_ = + "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}" + exercise_export_name = Base64.urlsafe_encode64(exercise_export_name_.strip.first(30)) + + render xlsx: "#{exercise_export_name}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns} } end end diff --git a/app/controllers/graduation_tasks_controller.rb b/app/controllers/graduation_tasks_controller.rb index 545b10e11..41d8bd68d 100644 --- a/app/controllers/graduation_tasks_controller.rb +++ b/app/controllers/graduation_tasks_controller.rb @@ -134,8 +134,9 @@ class GraduationTasksController < ApplicationController respond_to do |format| format.xlsx{ graduation_work_to_xlsx(@work_excel,@task,current_user) - exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@task.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{exercise_export_name.strip.first(30)}",template: "graduation_tasks/tasks_list.xlsx.axlsx",locals: {table_columns:@head_cells_column, task_users:@task_cells_column} + task_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@task.name}" + task_export_name = Base64.urlsafe_encode64(task_export_name_.strip.first(30)) + render xlsx: "#{task_export_name}",template: "graduation_tasks/tasks_list.xlsx.axlsx",locals: {table_columns:@head_cells_column, task_users:@task_cells_column} } end end diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index b20b767a4..75f7ddc6f 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -270,8 +270,9 @@ class GraduationTopicsController < ApplicationController course = @course students = course.students.joins(user: :user_extension).order("user_extensions.student_id") graduation_topic_to_xlsx(students,course) - exercise_export_name = "#{current_user.real_name}_#{course.name}_毕设选题_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{exercise_export_name.strip.first(30)}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells} + topic_export_name_ = "#{current_user.real_name}_#{course.name}_毕设选题_#{Time.now.strftime('%Y%m%d_%H%M%S')}" + topic_export_name = Base64.urlsafe_encode64(topic_export_name_.strip.first(30)) + render xlsx: "#{topic_export_name}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells} rescue Exception => e uid_logger(e.message) missing_template diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index b12980094..cdbfac5bc 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -206,10 +206,8 @@ class HomeworkCommonsController < ApplicationController respond_to do |format| format.xlsx{ student_work_to_xlsx(@work_excel,@homework) - exercise_export_name = current_user.real_name + "_" + @course.name + "_" + @homework.name + "_" + Time.now.strftime('%Y%m%d_%H%M%S') - # response.set_header("Content-Disposition","attachment; filename=#{exercise_export_name.strip.first(30)}};filename*=utf-8''#{exercise_export_name.strip.first(30)}}") + exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}" file_name = Base64.urlsafe_encode64(exercise_export_name.strip.first(30)) - # response.setHeader['Content-Disposition'] = "attachment; filename=\"#{exercise_export_name.strip.first(30)}\"" render xlsx: "#{file_name}",template: "homework_commons/works_list.xlsx.axlsx",locals: {table_columns: @work_head_cells,task_users: @work_cells_column} } diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index 64827b375..d94299454 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -933,9 +933,11 @@ class PollsController < ApplicationController else respond_to do |format| format.xlsx{ - polls_export_name = "#{current_user.real_name}_#{@course.name}_#{@poll.polls_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" + polls_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@poll.polls_name}" + polls_export_name = Base64.urlsafe_encode64(polls_export_name_.strip.first(30)) + polls_user_commit = poll_commit_result(@poll,@poll_export_questions,@poll_users,@poll_commit_ids) - render xlsx: "#{polls_export_name.strip.first(30)}",template: "polls/commit_result.xlsx.axlsx",locals: {polls_user_commit:polls_user_commit} + render xlsx: "#{polls_export_name}",template: "polls/commit_result.xlsx.axlsx",locals: {polls_user_commit:polls_user_commit} } end end diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index 2b70b9b27..2d21237f5 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -9,8 +9,8 @@ class ZipsController < ApplicationController service = BatchExportShixunReportService.new(@homework, @all_student_works) - filename = filename_for_content_disposition(service.filename) - + filename_ = filename_for_content_disposition(service.filename) + filename = Base64.urlsafe_encode64(filename_) send_file service.zip, filename: filename, type: 'application/zip' rescue BatchExportShixunReportService::Error => ex normal_status(-1, ex.message) @@ -20,8 +20,8 @@ class ZipsController < ApplicationController @request_url = request.base_url exercises = ExportExercisesService.new(@exercise,@ex_users,@request_url) - file_name = filename_for_content_disposition(exercises.filename) - + file_name_ = filename_for_content_disposition(exercises.filename) + file_name = Base64.urlsafe_encode64(file_name_) send_file exercises.ex_zip, filename: file_name, type: 'application/zip' rescue Exception => e normal_status(-1, e.message) diff --git a/app/helpers/polls_helper.rb b/app/helpers/polls_helper.rb index 693149e8f..aee95eef7 100644 --- a/app/helpers/polls_helper.rb +++ b/app/helpers/polls_helper.rb @@ -65,7 +65,7 @@ module PollsHelper poll_publish_time = ex_pb_time[:publish_time] poll_end_time = ex_pb_time[:end_time] current_status = 3 - lock_icon = 1 #不显示锁图标 + lock_icon = 0 #不显示锁图标 elsif is_teacher_or == 2 poll_users_list = poll.get_poll_exercise_users get_poll_answers(poll_users_list) # 未答和已答的 @@ -74,7 +74,7 @@ module PollsHelper poll_publish_time = ex_pb_time[:publish_time] poll_end_time = ex_pb_time[:end_time] current_status = poll.check_user_votes_status(user) - lock_icon = 1 #不显示锁图标 + lock_icon = 0 #不显示锁图标 else poll_users_list = poll.get_poll_exercise_users get_poll_answers(poll_users_list) # 未答和已答的 @@ -87,6 +87,9 @@ module PollsHelper lock_icon = 0 #显示锁图标 end end + if (course.is_public == 1) && poll.is_public + lock_icon = 1 + end { "publish_time":poll_publish_time, "end_time":poll_end_time, diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 42b737c26..bc5424b6e 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -144,10 +144,10 @@ class Exercise < ApplicationRecord ex_answer_user = exercise_users.find_by(user_id: user.id) user_ex_status = get_exercise_status(user.id) user_status = 2 - if ex_answer_user.exists? && (ex_answer_user.start_at.exists? || ex_answer_user.end_at.exists?) #学生有过答题的,或者立即截止,但学生未做试卷的 + if ex_answer_user.present? && (ex_answer_user.start_at.present? || ex_answer_user.end_at.present?) #学生有过答题的,或者立即截止,但学生未做试卷的 user_status = ex_answer_user.commit_status end - if ex_answer_user.exists? && ex_answer_user.start_at.blank? && user_ex_status == 3 + if ex_answer_user.present? && ex_answer_user.start_at.blank? && user_ex_status == 3 user_status = 4 end diff --git a/app/services/batch_export_shixun_report_service.rb b/app/services/batch_export_shixun_report_service.rb index 2c294395d..01d94ffe5 100644 --- a/app/services/batch_export_shixun_report_service.rb +++ b/app/services/batch_export_shixun_report_service.rb @@ -14,7 +14,7 @@ class BatchExportShixunReportService end def filename - @_filename ||= "#{homework.name}-#{Time.now.strftime('%Y%m%d%H%M%S')}.zip" + @_filename ||= "#{homework.name}" end def zip diff --git a/app/services/export_exercises_service.rb b/app/services/export_exercises_service.rb index 3aac67713..1b284e598 100644 --- a/app/services/export_exercises_service.rb +++ b/app/services/export_exercises_service.rb @@ -10,7 +10,7 @@ class ExportExercisesService end def filename - exercise_export_name = "#{exercise.user.real_name}_#{exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M')}" + exercise_export_name = "#{exercise.user.real_name}_#{exercise.exercise_name}" "#{exercise_export_name.strip}.zip" end