试卷的优化及导出的名称修改

dev_course
SylorHuang 5 years ago
parent 24a0c43d16
commit fe990abc60

@ -993,7 +993,8 @@ class CoursesController < ApplicationController
normal_status(-1,"课堂暂时没有学生") normal_status(-1,"课堂暂时没有学生")
else else
member_to_xlsx(@course, @all_members, @c_homeworks, @c_exercises, @c_tasks) 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", 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, locals: {course_info:@course_info, activity_level:@user_activity_level,
course_scores:@course_user_scores,shixun_works:@shixun_work_arrays, course_scores:@course_user_scores,shixun_works:@shixun_work_arrays,

@ -23,7 +23,6 @@ class ExercisesController < ApplicationController
before_action :commit_shixun_present,only: [:commit_shixun] before_action :commit_shixun_present,only: [:commit_shixun]
include ExportHelper include ExportHelper
include ExercisesHelper include ExercisesHelper
# require 'pdfkit'
def index def index
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@ -43,46 +42,65 @@ class ExercisesController < ApplicationController
@exercises = @exercises_all #老师能看到全部的试卷,不管是已发布的/未发布的/已截止的/统一设置的/私有设置的(看到内容不同) @exercises = @exercises_all #老师能看到全部的试卷,不管是已发布的/未发布的/已截止的/统一设置的/私有设置的(看到内容不同)
elsif @user_course_identity == Course::STUDENT # 2为课堂成员能看到统一设置的和自己班级的 elsif @user_course_identity == Course::STUDENT # 2为课堂成员能看到统一设置的和自己班级的
@is_teacher_or = 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
member_group_id = @current_student.first.try(:course_group_id).to_i # 成员的分班id默认为0 if @member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的)
if member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的)
@exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : [] @exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : []
else #已分班级的成员,可以查看统一设置和单独设置(试卷是发布在该班级)试卷 else #已分班级的成员,可以查看统一设置和单独设置(试卷是发布在该班级)试卷
# 已发布 当前用户班级分组的 试卷id # 已发布 当前用户班级分组的 试卷id
exercise_settings_ids = @course.exercise_group_settings.exercise_group_published not_exercise_ids = @course.exercise_group_settings.exercise_group_not_published.where("course_group_id = #{@member_group_id}").pluck(:exercise_id)
.where(course_group_id: member_group_id).pluck(:exercise_id).uniq @exercises = member_show_exercises.where.not(id: not_exercise_ids)
@exercises = member_show_exercises.exists? ? # exercise_settings_ids = @course.exercise_group_settings.exercise_group_published
member_show_exercises.unified_setting.or(member_show_exercises.where(id: exercise_settings_ids)) # .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 end
else #用户未登陆或不是该课堂成员,仅显示统一设置的(已发布的/已截止的),如有公开,则不显示锁,不公开,则显示锁 else #用户未登陆或不是该课堂成员,仅显示统一设置的(已发布的/已截止的),如有公开,则不显示锁,不公开,则显示锁
@is_teacher_or = 0 @is_teacher_or = 0
@exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : [] @exercises = member_show_exercises.unified_setting
end end
if @exercises.size > 0 if @exercises.size > 0
if params[:type].present? if params[:type].present?
choose_type = params[:type].to_i choose_type = params[:type].to_i
member_group_id = @current_student.first.try(:course_group_id).to_i ex_setting_ids = []
if @is_teacher_or == 2 && member_group_id > 0 case choose_type
exercise_groups_sets = @course.exercise_group_settings.where(course_group_id: member_group_id) when 1
.exercise_group_published ex_setting_ids = @course.exercise_group_settings.exercise_group_not_published.pluck(:exercise_id)
exercise_settings_ids = exercise_groups_sets.pluck(:exercise_id)
exercise_ended_ids = exercise_groups_sets.exercise_group_ended.pluck(:exercise_id).uniq # @exercises = @exercises.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_setting_ids))
if choose_type == 2 when 2
@exercises = @exercises_all.exists? ? 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_all.exercise_by_status(2).unified_setting # @exercises = @exercises.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_published_groups))
.or(@exercises_all.where(id: (exercise_settings_ids - exercise_ended_ids).uniq)) when 3
: [] ex_setting_ids = @course.exercise_group_settings.exercise_group_ended.pluck(:exercise_id)
elsif choose_type == 3 # @exercises = @exercises.where("exercise_status = #{choose_type}").or(@exercises.where(id:ex_ended_groups))
@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
@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 end
if params[:search].present? if params[:search].present?
@ -1302,9 +1320,11 @@ class ExercisesController < ApplicationController
respond_to do |format| respond_to do |format|
format.xlsx{ format.xlsx{
get_export_users(@exercise,@course,@export_ex_users) get_export_users(@exercise,@course,@export_ex_users)
exercise_export_name = exercise_export_name_ =
"#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}"
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 = 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
end end

@ -134,8 +134,9 @@ class GraduationTasksController < ApplicationController
respond_to do |format| respond_to do |format|
format.xlsx{ format.xlsx{
graduation_work_to_xlsx(@work_excel,@task,current_user) 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')}" task_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@task.name}"
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 = 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
end end

@ -270,8 +270,9 @@ class GraduationTopicsController < ApplicationController
course = @course course = @course
students = course.students.joins(user: :user_extension).order("user_extensions.student_id") students = course.students.joins(user: :user_extension).order("user_extensions.student_id")
graduation_topic_to_xlsx(students,course) graduation_topic_to_xlsx(students,course)
exercise_export_name = "#{current_user.real_name}_#{course.name}_毕设选题_#{Time.now.strftime('%Y%m%d_%H%M%S')}" topic_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 = 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 rescue Exception => e
uid_logger(e.message) uid_logger(e.message)
missing_template missing_template

@ -206,10 +206,8 @@ class HomeworkCommonsController < ApplicationController
respond_to do |format| respond_to do |format|
format.xlsx{ format.xlsx{
student_work_to_xlsx(@work_excel,@homework) 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') exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}"
# response.set_header("Content-Disposition","attachment; filename=#{exercise_export_name.strip.first(30)}};filename*=utf-8''#{exercise_export_name.strip.first(30)}}")
file_name = Base64.urlsafe_encode64(exercise_export_name.strip.first(30)) 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: render xlsx: "#{file_name}",template: "homework_commons/works_list.xlsx.axlsx",locals:
{table_columns: @work_head_cells,task_users: @work_cells_column} {table_columns: @work_head_cells,task_users: @work_cells_column}
} }

@ -933,9 +933,11 @@ class PollsController < ApplicationController
else else
respond_to do |format| respond_to do |format|
format.xlsx{ 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) 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
end end

@ -9,8 +9,8 @@ class ZipsController < ApplicationController
service = BatchExportShixunReportService.new(@homework, @all_student_works) 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' send_file service.zip, filename: filename, type: 'application/zip'
rescue BatchExportShixunReportService::Error => ex rescue BatchExportShixunReportService::Error => ex
normal_status(-1, ex.message) normal_status(-1, ex.message)
@ -20,8 +20,8 @@ class ZipsController < ApplicationController
@request_url = request.base_url @request_url = request.base_url
exercises = ExportExercisesService.new(@exercise,@ex_users,@request_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' send_file exercises.ex_zip, filename: file_name, type: 'application/zip'
rescue Exception => e rescue Exception => e
normal_status(-1, e.message) normal_status(-1, e.message)

@ -65,7 +65,7 @@ module PollsHelper
poll_publish_time = ex_pb_time[:publish_time] poll_publish_time = ex_pb_time[:publish_time]
poll_end_time = ex_pb_time[:end_time] poll_end_time = ex_pb_time[:end_time]
current_status = 3 current_status = 3
lock_icon = 1 #不显示锁图标 lock_icon = 0 #不显示锁图标
elsif is_teacher_or == 2 elsif is_teacher_or == 2
poll_users_list = poll.get_poll_exercise_users poll_users_list = poll.get_poll_exercise_users
get_poll_answers(poll_users_list) # 未答和已答的 get_poll_answers(poll_users_list) # 未答和已答的
@ -74,7 +74,7 @@ module PollsHelper
poll_publish_time = ex_pb_time[:publish_time] poll_publish_time = ex_pb_time[:publish_time]
poll_end_time = ex_pb_time[:end_time] poll_end_time = ex_pb_time[:end_time]
current_status = poll.check_user_votes_status(user) current_status = poll.check_user_votes_status(user)
lock_icon = 1 #不显示锁图标 lock_icon = 0 #不显示锁图标
else else
poll_users_list = poll.get_poll_exercise_users poll_users_list = poll.get_poll_exercise_users
get_poll_answers(poll_users_list) # 未答和已答的 get_poll_answers(poll_users_list) # 未答和已答的
@ -87,6 +87,9 @@ module PollsHelper
lock_icon = 0 #显示锁图标 lock_icon = 0 #显示锁图标
end end
end end
if (course.is_public == 1) && poll.is_public
lock_icon = 1
end
{ {
"publish_time":poll_publish_time, "publish_time":poll_publish_time,
"end_time":poll_end_time, "end_time":poll_end_time,

@ -144,10 +144,10 @@ class Exercise < ApplicationRecord
ex_answer_user = exercise_users.find_by(user_id: user.id) ex_answer_user = exercise_users.find_by(user_id: user.id)
user_ex_status = get_exercise_status(user.id) user_ex_status = get_exercise_status(user.id)
user_status = 2 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 user_status = ex_answer_user.commit_status
end 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 user_status = 4
end end

@ -14,7 +14,7 @@ class BatchExportShixunReportService
end end
def filename def filename
@_filename ||= "#{homework.name}-#{Time.now.strftime('%Y%m%d%H%M%S')}.zip" @_filename ||= "#{homework.name}"
end end
def zip def zip

@ -10,7 +10,7 @@ class ExportExercisesService
end end
def filename 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" "#{exercise_export_name.strip}.zip"
end end

Loading…
Cancel
Save