#encoding: utf-8 # Redmine - project management software # Copyright (C) 2006-2013 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class FilesController < ApplicationController layout 'base_projects' #by young menu_item :files before_filter :local_exam # before_filter :check_authentication, :except => [] # before_filter :auth_login1, :only => [:index] # before_filter :logged_user_by_apptoken,:only => [:index] before_filter :find_project_by_project_id#, :except => [:getattachtype] # before_filter :authorize, :except => [:create,:getattachtype,:quote_resource_show,:search,:searchone4reload,:search_project,:quote_resource_show_project, # :search_tag_attachment,:subfield_upload_file,:search_org_subfield_tag_attachment, # :search_tag_attachment,:quote_resource_show_org_subfield,:find_org_subfield_attache, # :search_files_in_subfield,:upload_files_menu,:setting,:republish_file,:update_file_description, :edit_file_description] helper :sort include SortHelper include FilesHelper helper :project_score include CoursesHelper include ApplicationHelper def show_attachments obj if obj.first.class.to_s == "Course" @attachments = obj.first.attachments if User.current.admin? || User.current.allowed_to?(:as_teacher,obj.first) @all_attachments = @attachments.reorder("created_on desc") elsif User.current.member_of_course?(@course) member = @course.members.where(:user_id => User.current.id).first if member.try(:course_group_id).to_i == 0 @all_attachments = @attachments.where("is_publish = 1 and unified_setting = 1").reorder("created_on desc") else not_atta_ids = @course.attachment_group_settings.where("course_group_id = #{member.try(:course_group_id)} and publish_time > '#{Time.now}'") not_atta_ids = not_atta_ids.blank? ? "(-1)" : "(" + not_atta_ids.map(&:attachment_id).join(",") + ")" @all_attachments = @attachments.where("is_publish = 1 and attachments.id not in #{not_atta_ids}").reorder("created_on desc") end else @all_attachments = @attachments.where("is_publish = 1 and unified_setting = 1").reorder("created_on desc") end else @attachments = [] obj.each do |container| @attachments += container.attachments end @all_attachments = User.current.admin? ? @attachments : visable_attachemnts(@attachments) end @limit = 10 @feedback_count = @all_attachments.count @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] @offset ||= @feedback_pages.offset #@curse_attachments_all = @all_attachments[@offset, @limit] @obj_attachments = paginateHelper @all_attachments,10 end def searchone4reload attachment = Attachment.find_by_id(params[:fileid]) respond_to do |format| format.html{render :layout => nil,:locals=>{:file=>attachment,:course=>@course}} end end def search sort = "" @sort = "" @order = "" @is_remote = true @q = params[:name].strip if params[:sort] order_by = params[:sort].split(":") @sort = order_by[0] if order_by.count > 1 @order = order_by[1] end sort = "#{@sort} #{@order}" end # show_attachments [@course] begin q = "%#{params[:name].strip}%" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? # if params[:insite] # if q == "%%" # @result = [] # # @searched_attach = paginateHelper @result,10 # else # @result = find_public_attache q,sort # @result = visable_attachemnts_insite @result,@course # # @searched_attach = paginateHelper @result,10 # end # else @result = find_course_attache q,@course,sort @result = visable_attachemnts @result # @searched_attach = paginateHelper @result,10 #@tag_list = get_course_tag_list @course #end @all_attachments = @result get_attachment_for_tip(@all_attachments) @limit = 10 @feedback_count = @all_attachments.count @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] @offset ||= @feedback_pages.offset #@curse_attachments_all = @all_attachments[@offset, @limit] @obj_attachments = paginateHelper @all_attachments,10 #rescue Exception => e # #render 'stores' # redirect_to search_course_files_url end end def setting @file = Attachment.find params[:id] @attachment = @file @attachment_histories = @file.attachment_histories @course = Course.find params[:course_id] respond_to do |format| format.js end end def republish_file @file = Attachment.find params[:id] @course = Course.find params[:course_id] if params[:publish_time] unless params[:publish_time] == "" @file.publish_time = params[:publish_time] end end if @file.publish_time > Time.now @file.is_publish = 0 else @file.is_publish = 1 end if @file.is_public == 0 && params[:is_public] @file.is_public = 1 end @file.save respond_to do |format| format.js end end def search_project sort = "" @sort = "" @order = "" @is_remote = true @q = params[:name].strip if params[:sort] order_by = params[:sort].split(":") @sort = order_by[0] if order_by.count > 1 @order = order_by[1] end sort = "#{@sort} #{@order}" end # show_attachments [@course] begin q = "%#{params[:name].strip}%" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? if params[:insite] if q == "%%" @project_attachment_result = [] # @searched_attach = paginateHelper @project_attachment_result, 10 else @project_attachment_result = find_public_attache q,sort @project_attachment_result = visable_attachemnts_insite @project_attachment_result, @project # @searched_attach = paginateHelper @project_attachment_result, 10 end else @project_attachment_result = find_project_attache q, @project,sort @project_attachment_result = visable_attachemnts @project_attachment_result # @searched_attach = paginateHelper @project_attachment_result,10 @tag_list = get_project_tag_list @project end @all_attachments = @project_attachment_result get_attachment_for_tip(@all_attachments) @limit = 10 @feedback_count = @all_attachments.count @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] @offset ||= @feedback_pages.offset #@curse_attachments_all = @all_attachments[@offset, @limit] @obj_attachments = paginateHelper @all_attachments,10 #rescue Exception => e # #render 'stores' # redirect_to search_course_files_url end end def search_files_in_subfield sort = "" @sort = "" @order = "" @is_remote = true @q = params[:name].strip if params[:sort] order_by = params[:sort].split(":") @sort = order_by[0] if order_by.count > 1 @order = order_by[1] end sort = "#{@sort} #{@order}" end # show_attachments [@course] begin q = "%#{params[:name].strip}%" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? if params[:insite] if q == "%%" @result = [] @searched_attach = paginateHelper @result,10 else @result = find_public_attache q,sort @result = visable_attachemnts_insite @result,@org_subfield @searched_attach = paginateHelper @result,10 end else @result = find_org_subfield_attache q,@org_subfield,sort @result = visable_attachemnts @result @searched_attach = paginateHelper @result,10 @tag_list = attachment_tag_list @result end #rescue Exception => e # #render 'stores' # redirect_to search_course_files_url end @page = params[:page] || 1 end def find_course_attache keywords,course,sort = "" if sort == "" sort = "created_on DESC" end if keywords != "%%" resultSet = Attachment.where("attachments.container_type = 'Course' And attachments.container_id = '#{course.id}' AND (filename LIKE '#{keywords}' or description LIKE '#{keywords}')").reorder(sort) else resultSet = Attachment.where("attachments.container_type = 'Course' And attachments.container_id = '#{course.id}' ").reorder(sort) end #resultSet = Attachment.find_by_sql("SELECT `attachments`.* FROM `attachments` LEFT OUTER JOIN `homework_attaches` ON `attachments`.container_type = 'HomeworkAttach' AND `attachments`.container_id = `homework_attaches`.id LEFT OUTER JOIN `homework_for_courses` ON `homework_attaches`.bid_id = `homework_for_courses`.bid_id LEFT OUTER JOIN `homework_for_courses` AS H_C ON `attachments`.container_type = 'Bid' AND `attachments`.container_id = H_C.bid_id WHERE (`homework_for_courses`.course_id = 117 OR H_C.course_id = 117 OR (`attachments`.container_type = 'Course' AND `attachments`.container_id = 117)) AND `attachments`.filename LIKE '%#{keywords}%'").reorder("created_on DESC") end def find_org_subfield_attache keywords,org_subfield,sort = "" if sort == "" sort = "created_on DESC" end if keywords != "%%" resultSet = Attachment.where("attachments.container_type = 'OrgSubfield' And attachments.container_id = '#{org_subfield.id}' AND filename LIKE :like ", like: "%#{keywords}%"). reorder(sort) else resultSet = Attachment.where("attachments.container_type = 'OrgSubfield' And attachments.container_id = '#{org_subfield.id}' "). reorder(sort) end #resultSet = Attachment.find_by_sql("SELECT `attachments`.* FROM `attachments` LEFT OUTER JOIN `homework_attaches` ON `attachments`.container_type = 'HomeworkAttach' AND `attachments`.container_id = `homework_attaches`.id LEFT OUTER JOIN `homework_for_courses` ON `homework_attaches`.bid_id = `homework_for_courses`.bid_id LEFT OUTER JOIN `homework_for_courses` AS H_C ON `attachments`.container_type = 'Bid' AND `attachments`.container_id = H_C.bid_id WHERE (`homework_for_courses`.course_id = 117 OR H_C.course_id = 117 OR (`attachments`.container_type = 'Course' AND `attachments`.container_id = 117)) AND `attachments`.filename LIKE '%#{keywords}%'").reorder("created_on DESC") end def find_project_attache keywords,project,sort = "" if sort == "" sort = "created_on DESC" end if keywords != "%%" resultSet = Attachment.where("attachments.container_type = 'Project' And attachments.container_id = '#{project.id}' AND filename LIKE :like ", like: "%#{keywords}%").reorder(sort) else resultSet = Attachment.where("attachments.container_type = 'Project' And attachments.container_id = '#{project.id}' "). reorder(sort) end end def find_public_attache keywords,sort = "" # StoresController#search 将每条文件都查出来,再次进行判断过滤。---> resultSet.to_a.map # 此时内容不多速度还可,但文件增长,每条判断多则进行3-4次表连接。 # 现在还木有思路 药丸 if sort == "" sort = "created_on DESC" end resultSet = Attachment.where("attachments.container_type IS NOT NULL AND attachments.copy_from IS NULL AND filename LIKE :like ", like: "%#{keywords}%"). reorder(sort) end def index # 顶部导航 @project_menu_type = 4 @flag = params[:flag] || false sort = "" @sort = "" @order = "" @is_remote = false if params[:project_id] # 更新资源申请消息为已读 # ar_ids = ApplyResource.where("user_id =? and container_id =? and container_type =?", User.current.id, params[:project_id].to_i, "Project").map{|ar| ar.id} # cms = CourseMessage.where("course_message_type =? and user_id =? and course_message_id in (#{ar_ids.empty? ? '0': ar_ids.join(',')})", "ApplyResource", User.current.id) # cms.each do |cm| # cm.update_column(:viewed, true) # end # over @page = params[:page] ? params[:page].to_i + 1 : 2 @container_type = 0 if params[:sort] params[:sort].split(",").each do |sort_type| order_by = sort_type.split(":") case order_by[0] when "filename" attribute = "filename" when "size" attribute = "filesize" when "attach_type" attribute = "attachtype" when "content_type" attribute = "created_on" when "field_file_dense" attribute = "is_public" when "downloads" attribute = "downloads" when "created_on" attribute = "created_on" when "quotes" attribute = "quotes" else attribute = "created_on" end @sort = order_by[0] @order = order_by[1] if order_by.count == 1 && attribute sort += "#{Attachment.table_name}.#{attribute} asc " if sort_type != params[:sort].split(",").last sort += "," end elsif order_by.count == 2 && order_by[1] sort += "#{Attachment.table_name}.#{attribute} #{order_by[1]} " if sort_type != params[:sort].split(",").last sort += "," end end end else sort = "#{Attachment.table_name}.created_on desc" end # @containers = [ Project.includes(:attachments).find(@project.id)] # @containers += @project.versions.includes(:attachments).all @containers = [ Project.includes(:attachments).reorder(sort).find(@project.id)] show_attachments @containers get_attachment_for_tip(@all_attachments) @tag_list = attachment_tag_list @all_attachments render :layout => 'base_projects' elsif params[:course_id] @container_type = 1 @page = params[:page] ? params[:page].to_i + 1 : 2 if params[:sort] params[:sort].split(",").each do |sort_type| order_by = sort_type.split(":") case order_by[0] when "filename" attribute = "filename" when "size" attribute = "filesize" when "attach_type" attribute = "attachtype" when "content_type" attribute = "created_on" when "field_file_dense" attribute = "is_public" when "downloads" attribute = "downloads" when "created_on" attribute = "created_on" when "quotes" attribute = "quotes" else attribute = "created_on" end @sort = order_by[0] @order = order_by[1] if order_by.count == 1 && attribute sort += "#{Attachment.table_name}.#{attribute} asc " if sort_type != params[:sort].split(",").last sort += "," end elsif order_by.count == 2 && order_by[1] sort += "#{Attachment.table_name}.#{attribute} #{order_by[1]} " if sort_type != params[:sort].split(",").last sort += "," end end end else @sort = "created_on" @order = "desc" sort = "#{Attachment.table_name}.created_on desc" end @containers = [ Course.includes(:attachments).reorder(sort).find(@course.id)] show_attachments @containers get_attachment_for_tip(@all_attachments) @tag_list = attachment_tag_list @all_attachments # Rails.logger.info("#333tag_list: #{@tag_list}") @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? @left_nav_type = 5 render :layout => 'base_courses' elsif params[:org_subfield_id] if params[:sort] params[:sort].split(",").each do |sort_type| order_by = sort_type.split(":") case order_by[0] when "filename" attribute = "filename" when "size" attribute = "filesize" when "attach_type" attribute = "attachtype" when "content_type" attribute = "created_on" when "field_file_dense" attribute = "is_public" when "downloads" attribute = "downloads" when "created_on" attribute = "created_on" when "quotes" attribute = "quotes" else attribute = "created_on" end @sort = order_by[0] @order = order_by[1] if order_by.count == 1 && attribute sort += "#{Attachment.table_name}.#{attribute} asc " if sort_type != params[:sort].split(",").last sort += "," end elsif order_by.count == 2 && order_by[1] sort += "#{Attachment.table_name}.#{attribute} #{order_by[1]} " if sort_type != params[:sort].split(",").last sort += "," end end end else sort = "#{Attachment.table_name}.created_on desc" end @container_type = 2 @containers = [ OrgSubfield.includes(:attachments).reorder(sort).find(@org_subfield.id)] @organization = Organization.find(@containers.first.organization_id) if @organization.is_public? or User.current.admin? or User.current.member_of_org?(@organization) show_attachments @containers @tag_list = attachment_tag_list @all_attachments @page = params[:page] || 1 render :layout => 'base_org' else render_403 end # @subfield = params[:org_subfield_id] end end # 获取提示中私有、公开总数信息 def get_attachment_for_tip all_attachment @tip_all_public_attachments = all_attachment.select{|attach| attach.is_public == 1}.count if params[:project_id] if User.current.member_of?(@project) || User.current.admin? @tip_all_attachments = all_attachment.count @tip_all_private_attachments = all_attachment.select{|attach| attach.is_public == 0}.count else if params[:tag_name] @tip_all_attachments = all_attachment.count @tip_all_private_attachments = 0 else @tip_all_attachments = Attachment.where(:container_id => params[:project_id], :container_type => "Project").count @tip_all_private_attachments = Attachment.where(:container_id => params[:project_id], :container_type => "Project", :is_public => 0).count end end elsif params[:course_id] if User.current.member_of_course?(@course) || User.current.admin? @tip_all_attachments = all_attachment.count @tip_all_private_attachments = all_attachment.select{|attach| attach.is_public == 0}.count else if params[:tag_name] @tip_all_attachments = all_attachment.count @tip_all_private_attachments = 0 else @tip_all_attachments = Attachment.where(:container_id => params[:course_id], :container_type => "Course").count @tip_all_private_attachments = Attachment.where(:container_id => params[:course_id], :container_type => "Course", :is_public => 0).count end end end end def quote_resource_show @file = Attachment.find(params[:id]) @can_quote = attachment_candown @file end def quote_resource_show_project @file = Attachment.find(params[:id]) @can_quote = attachment_candown @file end def quote_resource_show_org_subfield @file = Attachment.find(params[:id]) @org_subfield = OrgSubfield.find(params[:org_subfield_id]) @can_quote = attachment_candown @file end def new @versions = @project.versions.sort @course_tag = @project.project_type if @project.project_type == 1 @left_nav_type = 5 render :layout => 'base_courses' end end def create if params[:add_tag] @addTag=true #render :back tag_saveEx #render :text =>"success" respond_to do |format| format.js end else #modify by nwb if @project @addTag=false if params[:in_project_toolbar] @in_project_toolbar = params[:in_project_toolbar] end attachments = Attachment.attach_filesex(@project, params[:attachments], params[:attachment_type]) if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added') # 发送邮件 # Mailer.run.attachments_added(attachments[:files]) # 生成动态 attachments[:files].each do |file| ForgeActivity.create(:user_id => User.current.id, :project_id => @project.id, :forge_act_id => file.id, :forge_act_type => "Attachment") end # 更新资源总数, 根据上传的附件数累加 @project.project_score.update_attribute(:attach_num, @project.project_score.attach_num + attachments[:files].count) unless @project.project_score.nil? end # end if params[:project_attachment_type] && params[:project_attachment_type].is_a?(Array) params[:project_attachment_type].each do |type| tag_name = get_project_tag_name_by_type_nmuber type if !attachments.empty? && attachments[:files] && tag_name != "" attachments[:files].each do |attachment| attachment.tag_list.add(tag_name) attachment.description = params[:description] attachment.save end end end else if params[:project_attachment_type] && params[:project_attachment_type] != "6" tag_name = get_project_tag_name_by_type_nmuber params[:project_attachment_type] if !attachments.empty? && attachments[:files] && tag_name != "" attachments[:files].each do |attachment| attachment.tag_list.add(tag_name) attachment.description = params[:description] attachment.save end end end end # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", 'filename' => "#{Attachment.table_name}.filename", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" @containers = [Project.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@project.id)] show_attachments @containers @tag_list = attachment_tag_list @all_attachments @attachtype = 0 @contenttype = 0 respond_to do |format| format.js format.html { redirect_to project_files_url(@project) } end elsif @course @addTag=false if params[:in_course_toolbar] @in_course_toolbar = params[:in_course_toolbar] end attachments = Attachment.attach_filesex(@course, params[:attachments], params[:attachment_type]) # if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added') # # Mailer.run.attachments_added(attachments[:files]) # end if !attachments.empty? && attachments[:files] attachments[:files].each do |attachment| attachment.description = params[:description] attachment.is_public = params[:is_public] ? 1 : 0 attachment.save if params[:publish_time] if params[:publish_time] == "" attachment.publish_time = Time.now else attachment.publish_time = params[:publish_time] attachment.is_publish = 0 end else attachment.publish_time = Time.now end if !params[:unified_setting] && params[:attachment_publish_time] && @course.course_groups.count > 1 attachment.unified_setting = 0 min_publish_time = "" params[:attachment_publish_time].each do |publish_time| if publish_time != "" && publish_time < min_publish_time min_publish_time = publish_time end end attachment.is_publish = min_publish_time > (format_time Time.now).to_s ? 0 : 1 attachment.publish_time = min_publish_time > (format_time Time.now).to_s ? min_publish_time : attachment.created_on @course.course_groups.each do |group| att_group_setting = AttachmentGroupSetting.create(:attachment_id => attachment.id, :course_group_id => group.id, :course_id => @course.id, :publish_time => attachment.publish_time) end attachment.attachment_group_settings.joins(:course_group).reorder("course_groups.name asc").each_with_index do |setting, index| if params[:attachment_publish_time][index] && params[:attachment_publish_time][index] != "" setting.update_column(:publish_time, params[:attachment_publish_time][index]) end end elsif params[:publish_time] && params[:publish_time] != "" attachment.publish_time = params[:publish_time] attachment.is_publish = 0 else attachment.publish_time = Time.now end attachment.save resource_bank = ResourceBank.create(:course_id => @course.id, :attachment_id => attachment.id, :filename => attachment.filename, :disk_filename => attachment.disk_filename, :filesize => attachment.filesize, :digest => attachment.digest, :downloads => 0, :user_id => attachment.author_id, :description => attachment.description, :disk_directory => attachment.disk_directory, :is_public => attachment.is_public, :copy_from => attachment.copy_from, :quotes => 1, :applicable_syllabus => @course.course_list_name, :content_type => attachment.content_type) attachment.update_column('resource_bank_id', resource_bank.id) end end if params[:course_attachment_type] && params[:course_attachment_type].is_a?(Array) params[:course_attachment_type].each do |type| tag_name = get_tag_name_by_type_number type if !attachments.empty? && attachments[:files] && tag_name != "" attachments[:files].each do |attachment| attachment.tag_list.add(tag_name) attachment.save end end end else if params[:course_attachment_type] && params[:course_attachment_type] != "5" tag_name = get_tag_name_by_type_number params[:course_attachment_type] if !attachments.empty? && attachments[:files] && tag_name != "" attachments[:files].each do |attachment| attachment.tag_list.add(tag_name) attachment.save end end end end # 更新课程英雄榜得分 course_member_score(@course.id, attachments[:files].first.author_id, "Attachment") # end # end # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", 'filename' => "#{Attachment.table_name}.filename", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" @containers = [Course.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@course.id)] show_attachments @containers @tag_list = attachment_tag_list @all_attachments @attachtype = 0 @contenttype = 0 respond_to do |format| format.js format.html { redirect_to course_files_url(@course) } end elsif @org_subfield @addTag=false attachments = Attachment.attach_filesex(@org_subfield, params[:attachments], params[:org_subfield_attachment_type]) if params[:org_subfield_attachment_type] && params[:org_subfield_attachment_type].is_a?(Array) params[:org_subfield_attachment_type].each do |type| tag_name = get_tag_name_by_type_number type if !attachments.empty? && attachments[:files] && tag_name != "" attachments[:files].each do |attachment| attachment.tag_list.add(tag_name) attachment.description = params[:description] attachment.save end end end else if params[:org_subfield_attachment_type] && params[:org_subfield_attachment_type] != "5" tag_name = get_tag_name_by_type_number params[:org_subfield_attachment_type] if !attachments.empty? && attachments[:files] && tag_name != "" attachments[:files].each do |attachment| attachment.tag_list.add(tag_name) attachment.description = params[:description] attachment.save end end end end # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", 'filename' => "#{Attachment.table_name}.filename", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" @containers = [OrgSubfield.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@org_subfield.id)] show_attachments @containers @tag_list = attachment_tag_list @all_attachments @attachtype = 0 @contenttype = 0 respond_to do |format| format.js # format.html { # redirect_to org_subfield_files_url(@org_subfield) # } end # 组织添加附件,为了修改图片 elsif params[:organization_id] @organization = Organization.find(params[:organization_id]) @addTag=false # atttchment_type = 0为logo 1为banner if params[:logo] attachments = Attachment.attach_filesex(@organization, params[:attachments], false) else attachments = Attachment.attach_filesex(@organization, params[:attachments], true) end # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", 'filename' => "#{Attachment.table_name}.filename", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" @containers = [Organization.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@organization.id)] show_attachments @containers @tag_list = attachment_tag_list @all_attachments @attachtype = 0 @contenttype = 0 respond_to do |format| format.js # format.html { # redirect_to org_subfield_files_url(@org_subfield) # } end end end end def get_project_tag_name_by_type_nmuber type case type when "1" tag_name = "软件版本" when "2" tag_name = "文档" when "3" tag_name = "代码" when "4" tag_name = "媒体" when "5" tag_name = "论文" when "6" tag_name = "其它" else tag_name = "" end end def get_tag_name_by_type_number type case type when "1" tag_name = l(:label_courseware) when "2" tag_name = l(:label_software) when "3" tag_name = l(:label_media) when "4" tag_name = l(:label_code) when "6" tag_name = "论文" else tag_name = "" end end def tag_saveEx @tags = params[:tag_name][:name] @obj_id = params[:object_id] @obj_flag = params[:object_flag] case @obj_flag when '1' then @obj = User.find_by_id(@obj_id) when '2' then @obj = Project.find_by_id(@obj_id) when '3' then @obj = Issue.find_by_id(@obj_id) when '4' then @obj = Bid.find_by_id(@obj_id) when '5' then @obj = Forum.find_by_id(@obj_id) when '6' @obj = Attachment.find_by_id(@obj_id) when '7' then @obj = Contest.find_by_id(@obj_id) when '8' @obj = OpenSourceProject.find_by_id(@obj_id) when '9' @obj = Course.find_by_id(@obj_id) else @obj = nil end unless @obj.nil? @obj.tag_list.add(@tags.split(",")) else return end if @obj.save ## 执行成功的操作。 else #捕获异常 end end # 返回指定资源类型的资源列表 # added by nwb def getattachtype sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", 'filename' => "#{Attachment.table_name}.filename", 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" sort='' if params[:sort] params[:sort].split(",").each do |sort_type| order_by = sort_type.split(":") case order_by[0] when "filename" attribute = "filename" when "size" attribute = "filesize" when "attach_type" attribute = "attachtype" when "content_type" attribute = "created_on" when "field_file_dense" attribute = "is_public" when "downloads" attribute = "downloads" when "created_on" attribute = "created_on" end if order_by.count == 1 sort += "#{Attachment.table_name}.#{attribute} asc " elsif order_by.count == 2 sort += "#{Attachment.table_name}.#{attribute} #{order_by[1]} " end if sort_type != params[:sort].split(",").last sort += "," end end end if @project @isproject = true @containers = [ Project.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@project.id)] @containers += @project.versions.includes(:attachments).reorder(sort).all show_attachments @containers @attachtype = params[:type].to_i @contenttype = params[:contentType].to_s respond_to do |format| format.js format.html { render :layout => 'base_projects' } end elsif @course @isproject = false @containers = [ Course.includes(:attachments).reorder(sort).find(@course.id)] show_attachments @containers @attachtype = params[:type].to_i @contenttype = params[:contentType].to_s # render layout: 'base_courses' @left_nav_type = 5 respond_to do |format| format.js format.html { render :layout => 'base_courses' } end else show_attachments @containers @attachtype = params[:type].to_i @contenttype = params[:contentType].to_s respond_to do |format| format.js format.html end end end #查找指定TAG的按条件过滤的资源列表,只有课程内搜索有此功能 def search_tag_attachment @q,@tag_name,@order = params[:q],params[:tag_name] @is_remote = true if params[:sort] order_by = params[:sort].split(":") @sort = order_by[0] if order_by.count > 1 @order = order_by[1] end sort = "#{@sort} #{@order}" else @sort = "created_on" sort = "created_on desc" end q = "%#{@q.strip}%" if @project @result = find_project_attache q, @project,sort else @result = find_course_attache q,@course,sort end @result = visable_attachemnts @result if params[:other] if @project @result = @result.select{|attachment| !attachment.tag_list.include?('软件版本') && !attachment.tag_list.include?('文档') && !attachment.tag_list.include?('代码') && !attachment.tag_list.include?('媒体') && !attachment.tag_list.include?('论文') } else @result = @result.select{|attachment| !attachment.tag_list.include?('课件') && !attachment.tag_list.include?('软件') && !attachment.tag_list.include?('媒体') && !attachment.tag_list.include?('代码') && !attachment.tag_list.include?('论文') } end else @result = @result.select{|attachment| attachment.tag_list.include?(@tag_name)} unless @tag_name.blank? end @all_attachments = @result get_attachment_for_tip(@all_attachments) @limit = 10 @feedback_count = @all_attachments.count @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] @offset ||= @feedback_pages.offset #@curse_attachments_all = @all_attachments[@offset, @limit] @obj_attachments = paginateHelper @all_attachments,10 # @searched_attach = paginateHelper @result,10 if @project @tag_list = get_project_tag_list @project @result_search_project = @result else @tag_list = get_course_tag_list @course end respond_to do |format| format.js # format.html end end #搜索资源栏目的指定TAG的资源列表 def search_org_subfield_tag_attachment @q,@tag_name,@order = params[:q],params[:tag_name] @is_remote = true if params[:sort] order_by = params[:sort].split(":") @sort = order_by[0] if order_by.count > 1 @order = order_by[1] end sort = "#{@sort} #{@order}" end q = "%#{@q.strip}%" @result = find_org_subfield_attache q,@org_subfield,sort @result = visable_attachemnts @result if params[:other] @result = @result.select{|attachment| attachment.tag_list.index{|tag|tag != '软件' and tag != '媒体' and tag != '代码'}.present? } else @result = @result.select{|attachment| attachment.tag_list.include?(@tag_name)} unless @tag_name.blank? end @searched_attach = paginateHelper @result,10 @tag_list = get_org_subfield_tag_list @org_subfield respond_to do |format| format.js # format.html end end def subfield_upload_file @org_subfield = OrgSubfield.find(params[:org_subfield_id]) end def upload_files_menu end def edit_file_description @attachment = Attachment.find(params[:id]) @attachment.description = params[:file_description_edit] @attachment.save end def update_file_description @attachment = Attachment.find(params[:id]) @attachment.description = params[:description] @attachment.save end end