#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