diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index 117475894..bb81269da 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -24,26 +24,53 @@ class FilesController < ApplicationController 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 + if @user.course_identity(@course) == 5 + member = @course.course_members.find_by(user_id: current_user.id, is_active: 1) + if member.try(:course_group_id).to_i == 0 + @attachments = @attachments.published.unified_setting else - @attachments + not_atta_ids = @course.attachment_group_settings.none_published.where("course_group_id = #{member.try(:course_group_id)}").pluck(:attachment_id) + + @attachments = @attachments.where.not(id: not_atta_ids).published end + elsif @user.course_identity(@course) > 5 + @attachments = @attachments.publiced.published + end + + @publish_count = @attachments.published.size + @unpublish_count = @total_count - @publish_count + @attachments = @attachments.by_keywords(params[:search]) @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) + tip_exception("请至少选择一个分班") if params[:group_ids].blank? && @course.course_groups.size != 0 + + attachments = @course.attachments.by_ids(@attachment_ids) + + ActiveRecord::Base.transaction do + # 有分班设置时 + if @course.course_group_module? && @course.course_groups_count != 0 && params[:group_ids] + group_ids = params[:group_ids]&.reject(&:blank?) + charge_group_ids = @course.charge_group_ids(current_user) + publish_groups = charge_group_ids & group_ids if group_ids + + attachments.each do |atta| + if atta.published? && !atta.unified_setting || !atta.published? + create_atta_group_settings atta + atta.update_all(unified_setting: 0) if atta.unified_setting + none_publish_settings = atta.attachment_group_settings.where(course_group_id: publish_groups).none_published + none_publish_settings.update_all(publish_time: Time.now) + end + end + end + + # 未发布的资源更新状态 + attachments.where(is_publish: 0).update_all(is_publish: 1, publish_time: Time.now) + end render_ok end @@ -153,6 +180,10 @@ class FilesController < ApplicationController attachment.is_publish = @atta_is_publish attachment.delay_publish = @atta_delay_publish attachment.publish_time = @atta_publish_time + attachment.unified_setting = @unified_setting + unless @unified_setting + + end # 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! @@ -319,9 +350,30 @@ class FilesController < ApplicationController def publish_params tip_exception("缺少发布参数") if params[:delay_publish].blank? - tip_exception("缺少延期发布的时间参数") if params[:delay_publish].to_i == 1 && params[:publish_time].blank? - @atta_is_publish = params[:delay_publish].to_i == 1 && params[:publish_time].to_time > Time.now ? 0 : 1 + @unified_setting = 1 + if params[:delay_publish].to_i == 1 && @course.course_group_module? && @course.course_groups_count != 0 + tip_exception("分班发布设置不能为空") if params[:group_settings].blank? + min_publish_time = params[:group_settings].pluck(:publish_time).reject(&:blank?).min + max_publish_time = params[:group_settings].pluck(:publish_time).reject(&:blank?).max + tip_exception("分班发布设置不能为空") if min_publish_time.blank? + + # 分班设置中的时间一样且包含所有分班 则按统一设置处理,否则是非统一设置 + @unified_setting = 0 unless min_publish_time == max_publish_time && params[:group_settings].pluck(:group_id).flatten.sort == @course.course_groups.pluck(:id).sort + elsif params[:delay_publish].to_i == 1 + tip_exception("缺少延期发布的时间参数") if params[:publish_time].blank? + min_publish_time = params[:publish_time] + end + @atta_is_publish = params[:delay_publish].to_i == 1 && min_publish_time.to_time > Time.now ? 0 : 1 @atta_delay_publish = params[:delay_publish].to_i - @atta_publish_time = params[:delay_publish].to_i == 1 && params[:publish_time] ? params[:publish_time] : Time.now + @atta_publish_time = params[:delay_publish].to_i == 1 ? min_publish_time : Time.now + end + + def create_atta_group_settings atta + if atta.attachment_group_settings.size != @course.course_groups.size + @course.course_groups.where.not(id: atta.attachment_group_settings.pluck(:course_group_id)).each do |group| + atta.attachment_group_settings << AttachmentGroupSetting.new(course_group_id: group.id, course_id: @course.id, + publish_time: atta.publish_time) + end + end end end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 8b7034ab9..37884e40b 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -23,6 +23,7 @@ class Attachment < ApplicationRecord scope :mine, -> (author_id) { where(author_id: author_id) } scope :simple_columns, -> { select(:id, :filename, :filesize, :created_on, :cloud_url, :author_id, :content_type) } scope :search_by_container, -> (ids) {where(container_id: ids)} + scope :unified_setting, -> {where("unified_setting = ? ", 1)} validates_length_of :description, maximum: 100 diff --git a/app/models/attachment_group_setting.rb b/app/models/attachment_group_setting.rb index 67240d88f..3fefe5ceb 100644 --- a/app/models/attachment_group_setting.rb +++ b/app/models/attachment_group_setting.rb @@ -3,4 +3,6 @@ class AttachmentGroupSetting < ActiveRecord::Base belongs_to :course_group belongs_to :course + scope :none_published, -> {where("attachment_group_settings.publish_time IS NULL OR attachment_group_settings.publish_time > ?", Time.now)} + end diff --git a/app/models/course.rb b/app/models/course.rb index 16700428b..3e20eee12 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -111,6 +111,10 @@ class Course < ApplicationRecord course_members.where(user_id: user_id, role: role).exists? end + def course_group_module? + course_modules.exists?(module_type: "course_group", hidden: 0) + end + # 作业对应的子目录/父目录名称 def category_info type course_module = course_modules.find_by(module_type: type)