|
|
class FilesController < ApplicationController
|
|
|
include MessagesHelper
|
|
|
|
|
|
before_action :require_login, except: %i[index]
|
|
|
before_action :find_course, except: %i[public_with_course_and_project mine_with_course_and_project]
|
|
|
before_action :find_ids, only: %i[bulk_delete bulk_send bulk_move bulk_public bulk_publish]
|
|
|
before_action :file_validate_sort_type, only: :index
|
|
|
before_action :validate_send_message_to_course_params, only: :bulk_send
|
|
|
before_action :set_pagination, only: %i[index public_with_course_and_project mine_with_course_and_project]
|
|
|
before_action :validate_upload_params, only: %i[upload import]
|
|
|
before_action :find_file, only: %i[show setting update]
|
|
|
|
|
|
SORT_TYPE = %w[created_on downloads quotes]
|
|
|
|
|
|
def index
|
|
|
sort = params[:sort] || 0 # 0: 降序;1: 升序
|
|
|
sort_type = params[:sort_type] || 'created_on' # created_on:时间排序, downloads:下载次数排序; quotes: 引用次数排序
|
|
|
course_second_category_id = params[:course_second_category_id] || 0 # 0: 为主目录, 其他为次目录id
|
|
|
@user = current_user
|
|
|
@attachments = @course.attachments.by_course_second_category_id(course_second_category_id)
|
|
|
.includes(attachment_group_settings: :course_group, author: [:user_extension, :course_members])
|
|
|
.ordered(sort: sort.to_i, sort_type: sort_type.strip)
|
|
|
|
|
|
get_category(@course, course_second_category_id)
|
|
|
@total_count = @attachments.size
|
|
|
@publish_count = @attachments.published.size
|
|
|
@unpublish_count = @total_count - @publish_count
|
|
|
|
|
|
@attachments = @attachments.by_keywords(params[:search])
|
|
|
@attachments =
|
|
|
case @user.course_identity(@course)
|
|
|
when 5
|
|
|
@attachments.published
|
|
|
when 6, 7
|
|
|
@attachments.publiced.published
|
|
|
else
|
|
|
@attachments
|
|
|
end
|
|
|
|
|
|
@attachments = @attachments.page(@page).per(@page_size)
|
|
|
end
|
|
|
|
|
|
def bulk_publish
|
|
|
return normal_status(403, "您没有权限进行操作") if current_user.course_identity(@course) >= 5
|
|
|
@course.attachments.by_ids(@attachment_ids).unpublish.update_all(is_publish: 1, publish_time: Time.now)
|
|
|
render_ok
|
|
|
end
|
|
|
|
|
|
def bulk_delete
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
@course.attachments.by_ids(@attachment_ids).destroy_all
|
|
|
rescue Exception => e
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def bulk_send
|
|
|
return normal_status(403, "您没有权限进行该操作") unless current_user.teacher_of_course?(@course)
|
|
|
course_ids = params[:to_course_ids]
|
|
|
|
|
|
begin
|
|
|
@attachment_ids.each do |id|
|
|
|
@attachment = @course.attachments.find_by_id id
|
|
|
course_ids.each do |course_id|
|
|
|
course = Course.find_by_id course_id
|
|
|
unless @attachment.nil? || course.nil?
|
|
|
course.attachments << course.attachments.build(@attachment.attributes.except("id").merge(
|
|
|
quotes: 0,
|
|
|
downloads: 0,
|
|
|
author_id: current_user.id,
|
|
|
created_on: Time.now,
|
|
|
course_second_category_id: 0 # TODO 暂时只支持发送到其他课堂的主目录
|
|
|
))
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
uid_logger_error(e.message)
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def bulk_move
|
|
|
return normal_status(403, "您没有权限进行该操作") unless current_user.teacher_of_course?(@course)
|
|
|
|
|
|
to_category_id = params[:to_category_id] || 0 # 默认移动到主目录
|
|
|
unless to_category_id == 0
|
|
|
course_second_category = @course.course_second_categories.find_by_id to_category_id
|
|
|
return normal_status(2, "参数to_category_id有误,该目录不存在") if course_second_category.nil?
|
|
|
end
|
|
|
|
|
|
begin
|
|
|
@course.attachments.by_ids(@attachment_ids).update_all(course_second_category_id: to_category_id)
|
|
|
rescue Exception => e
|
|
|
uid_logger_error(e.message)
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def bulk_public
|
|
|
@user = current_user
|
|
|
return normal_status(403, "您没有权限进行该操作") unless @user.teacher_of_course?(@course)
|
|
|
|
|
|
@course.attachments.by_ids(@attachment_ids).update_all(is_public: 1)
|
|
|
end
|
|
|
|
|
|
def public_with_course_and_project
|
|
|
@attachments = Attachment.publiced.simple_columns
|
|
|
.contains_course_and_project
|
|
|
.includes(:author => :user_extension)
|
|
|
.by_filename_or_user_name(params[:search])
|
|
|
.ordered(sort: 0, sort_type: 'created_on')
|
|
|
|
|
|
|
|
|
@total_count = @attachments.size
|
|
|
@attachments = @attachments.page(@page).per(@page_size)
|
|
|
end
|
|
|
|
|
|
def mine_with_course_and_project
|
|
|
@current_user = current_user
|
|
|
@attachments = Attachment.mine(current_user)
|
|
|
.simple_columns
|
|
|
.contains_course_and_project
|
|
|
.by_keywords(params[:search])
|
|
|
.ordered(sort: 0, sort_type: 'created_on')
|
|
|
|
|
|
@total_count = @attachments.size
|
|
|
@attachments = @attachments.page(@page).per(@page_size)
|
|
|
end
|
|
|
|
|
|
# 上传资源
|
|
|
def upload
|
|
|
attachment_ids = params[:attachment_ids]
|
|
|
course_second_category_id = params[:course_second_category_id] || 0 # 0: 为主目录, 其他为次目录id
|
|
|
is_unified_setting = params.has_key?(:is_unified_setting) ? params[:is_unified_setting] : true
|
|
|
publish_time = params[:publish_time]
|
|
|
course_group_publish_times = params[:course_group_publish_times] || []
|
|
|
|
|
|
begin
|
|
|
attachment_ids.each do |attchment_id|
|
|
|
attachment = Attachment.find_by_id attchment_id
|
|
|
unless attachment.nil?
|
|
|
attachment.container = @course
|
|
|
attachment.course_second_category_id = course_second_category_id
|
|
|
attachment.description = params[:description]
|
|
|
attachment.is_public = params[:is_public] ? 1 : 0
|
|
|
attachment.set_publish_time(publish_time) if is_unified_setting
|
|
|
attachment.set_course_group_publish_time(@course, course_group_publish_times) if @course.course_groups.size > 0 && !is_unified_setting && publish_time.blank?
|
|
|
attachment.save!
|
|
|
end
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
uid_logger_error(e.message)
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 选用资源 & 导入资源
|
|
|
def import
|
|
|
return normal_status(403, "您没有权限进行该操作") unless current_user.teacher_of_course?(@course) || current_user.student_of_course?(@course)
|
|
|
|
|
|
attachment_ids = params[:attachment_ids]
|
|
|
course_second_category_id = params[:course_second_category_id] || 0 # 0: 为主目录, 其他为次目录id
|
|
|
|
|
|
begin
|
|
|
attachment_ids.each do |attachment_id|
|
|
|
ori = Attachment.find_by_id(attachment_id)
|
|
|
@course.attachments.each do |att|
|
|
|
@exist = false
|
|
|
if att.id == ori.id || (!att.copy_from.nil? && !ori.copy_from.nil? && att.copy_from == ori.copy_from) || att.copy_from == ori.id || att.id == ori.copy_from
|
|
|
att.created_on = Time.now
|
|
|
att.save
|
|
|
@exist = true
|
|
|
break
|
|
|
end
|
|
|
end
|
|
|
|
|
|
next if @exist
|
|
|
attach_copied_obj = ori.copy
|
|
|
attach_copied_obj.container = @course
|
|
|
attach_copied_obj.created_on = Time.now
|
|
|
attach_copied_obj.author = current_user
|
|
|
attach_copied_obj.is_public = 0
|
|
|
attach_copied_obj.is_publish = 1
|
|
|
attach_copied_obj.publish_time = Time.now
|
|
|
attach_copied_obj.course_second_category_id = course_second_category_id
|
|
|
attach_copied_obj.copy_from = ori.copy_from.nil? ? ori.id : ori.copy_from
|
|
|
if attach_copied_obj.attachtype == nil
|
|
|
attach_copied_obj.attachtype = 4
|
|
|
end
|
|
|
attach_copied_obj.save
|
|
|
ori.update_columns(quotes: ori.quotes.to_i + 1)
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
uid_logger_error(e.message)
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 资源设置
|
|
|
def update
|
|
|
return normal_status(403, "您没有权限进行该操作") if current_user.course_identity(@course) >= 5 && @file.author != current_user
|
|
|
|
|
|
is_unified_setting = params[:is_unified_setting]
|
|
|
publish_time = params[:publish_time]
|
|
|
is_public = params[:is_public]
|
|
|
course_group_publish_times = params[:course_group_publish_times] || []
|
|
|
|
|
|
@old_attachment = @file
|
|
|
@new_attachment = Attachment.find_by_id params[:new_attachment_id]
|
|
|
|
|
|
begin
|
|
|
unless @new_attachment.nil?
|
|
|
@new_attachment_history = @old_attachment.become_history
|
|
|
@new_attachment_history.save!
|
|
|
|
|
|
@old_attachment.copy_attributes_from_new_attachment(@new_attachment)
|
|
|
@old_attachment.is_public = is_public == true ? 1 : 0 if is_public
|
|
|
@old_attachment.save!
|
|
|
@new_attachment.delete
|
|
|
end
|
|
|
if params[:description] && !params[:description].strip.blank? && params[:description] != @old_attachment.description
|
|
|
@old_attachment.description = params[:description]
|
|
|
end
|
|
|
|
|
|
@old_attachment.set_public(is_public)
|
|
|
|
|
|
if is_unified_setting
|
|
|
@old_attachment.set_publish_time(publish_time)
|
|
|
@old_attachment.attachment_group_settings.destroy_all
|
|
|
end
|
|
|
|
|
|
if publish_time.blank? && @course.course_groups.size > 0 && !is_unified_setting
|
|
|
@old_attachment.set_course_group_publish_time(@course, course_group_publish_times)
|
|
|
end
|
|
|
|
|
|
@old_attachment.save!
|
|
|
rescue Exception => e
|
|
|
uid_logger_error(e.message)
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def show
|
|
|
return normal_status(403, "您没有权限进行该操作") if !current_user.teacher_of_course?(@course) && current_user != @file.author
|
|
|
@attachment_histories = @file.attachment_histories
|
|
|
end
|
|
|
|
|
|
def histories
|
|
|
@user = current_user
|
|
|
@file = @course.attachments.find_by_id params[:id]
|
|
|
|
|
|
return normal_status(-2, "该课程下没有id为 #{params[:id]}的资源") if @file.nil?
|
|
|
return normal_status(403, "您没有权限进行该操作") if @user != @file.author && !@user.teacher_of_course?(@course) && !@file.public?
|
|
|
|
|
|
@attachment_histories = @file.attachment_histories
|
|
|
end
|
|
|
|
|
|
def get_category(course, category_id)
|
|
|
if category_id == 0
|
|
|
category = course.attachment_course_modules.first
|
|
|
@category_id = category.try(:id)
|
|
|
@category_name = category.try(:module_name)
|
|
|
else
|
|
|
category = CourseSecondCategory.find category_id
|
|
|
@category_id = category.try(:id)
|
|
|
@category_name = category.try(:name)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
private
|
|
|
def find_file
|
|
|
@file = Attachment.find params[:id]
|
|
|
end
|
|
|
|
|
|
def find_attachment_ids(attachment_ids = params[:attachment_ids])
|
|
|
return normal_status(-2, "参数attachment_ids不能为空!") if attachment_ids.blank?
|
|
|
return normal_status(-2, "参数attachment_ids格式错误!") if !attachment_ids.is_a? Array
|
|
|
end
|
|
|
|
|
|
def find_course_second_category_id
|
|
|
course_second_category_id = params[:course_second_category_id] || 0 # 0: 为主目录, 其他为次目录id
|
|
|
if course_second_category_id != 0
|
|
|
course_second_category = CourseSecondCategory.find_by(id: course_second_category_id, category_type: "attachment")
|
|
|
return normal_status(-2, "未来找到course_second_category为 #{course_second_category_id} 的目录") if course_second_category.nil?
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def find_ids
|
|
|
@attachment_ids = params[:ids] || []
|
|
|
find_attachment_ids(@attachment_ids)
|
|
|
end
|
|
|
|
|
|
def file_validate_sort_type
|
|
|
normal_status(-2, "参数sort_tyope暂时只支持 'created_on', 'quotes', 'downloads'") if params.has_key?(:sort_type) && !SORT_TYPE.include?(params[:sort_type].strip)
|
|
|
end
|
|
|
|
|
|
def validate_upload_params
|
|
|
find_attachment_ids
|
|
|
find_course_second_category_id
|
|
|
end
|
|
|
end
|