2014-10-23 11:30:34 +08:00
|
|
|
# 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
|
2014-10-29 16:13:49 +08:00
|
|
|
|
2014-10-28 23:48:58 +08:00
|
|
|
layout 'base_projects' #by young
|
2014-10-29 16:13:49 +08:00
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
menu_item :files
|
|
|
|
|
|
|
|
before_filter :find_project_by_project_id#, :except => [:getattachtype]
|
|
|
|
before_filter :authorize, :except => [:getattachtype]
|
|
|
|
|
|
|
|
helper :sort
|
|
|
|
include SortHelper
|
|
|
|
helper :project_score
|
|
|
|
|
|
|
|
def show_attachments obj
|
|
|
|
all_attachments = []
|
|
|
|
obj.each do |container|
|
|
|
|
all_attachments += container.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_attachments[@offset, @limit]
|
|
|
|
end
|
|
|
|
|
|
|
|
def index
|
|
|
|
#sort_init 'filename', 'asc'
|
|
|
|
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[:project_id]
|
|
|
|
@isproject = true
|
|
|
|
|
|
|
|
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
|
2014-10-23 15:29:33 +08:00
|
|
|
sort += "#{Attachment.table_name}.#{attribute} asc "
|
2014-10-23 11:30:34 +08:00
|
|
|
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
|
|
|
|
|
|
|
|
@containers = [ Project.includes(:attachments).reorder(sort).find(@project.id)]
|
2014-10-23 15:29:33 +08:00
|
|
|
@containers += @project.versions.includes(:attachments).reorder(sort).all
|
2014-10-28 23:38:14 +08:00
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
show_attachments @containers
|
|
|
|
|
|
|
|
render :layout => !request.xhr?
|
|
|
|
elsif params[:course_id]
|
|
|
|
@isproject = false
|
|
|
|
|
|
|
|
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
|
2014-10-28 23:38:14 +08:00
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
@containers = [ Course.includes(:attachments).reorder(sort).find(@course.id)]
|
|
|
|
|
|
|
|
show_attachments @containers
|
|
|
|
|
|
|
|
render :layout => 'base_courses'
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
def new
|
|
|
|
@versions = @project.versions.sort
|
|
|
|
@course_tag = @project.project_type
|
|
|
|
if @project.project_type == 1
|
|
|
|
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
|
|
|
|
container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id]))
|
|
|
|
attachments = Attachment.attach_filesex(container, params[:attachments], params[:attachment_type])
|
|
|
|
render_attachment_warning_if_needed(container)
|
|
|
|
|
|
|
|
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
|
|
|
Mailer.attachments_added(attachments[:files]).deliver
|
|
|
|
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)] #modify by Long Jun
|
|
|
|
@containers += @project.versions.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").all.sort
|
|
|
|
|
|
|
|
show_attachments @containers
|
|
|
|
|
|
|
|
@attachtype = 0
|
|
|
|
@contenttype = 0
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.js
|
|
|
|
format.html {
|
|
|
|
redirect_to project_files_url(@project)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
elsif @course
|
|
|
|
@addTag=false
|
|
|
|
attachments = Attachment.attach_filesex(@course, params[:attachments], params[:attachment_type])
|
|
|
|
|
|
|
|
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
|
|
|
Mailer.attachments_added(attachments[:files]).deliver
|
|
|
|
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
|
|
|
|
|
|
|
|
@attachtype = 0
|
|
|
|
@contenttype = 0
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.js
|
|
|
|
format.html {
|
|
|
|
redirect_to course_files_url(@course)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
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"
|
2014-10-28 23:38:14 +08:00
|
|
|
sort=''
|
2014-10-31 16:38:04 +08:00
|
|
|
|
2014-10-28 23:38:14 +08:00
|
|
|
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
|
2014-10-23 11:30:34 +08:00
|
|
|
|
|
|
|
if @project
|
2014-10-28 23:38:14 +08:00
|
|
|
@isproject = true
|
2014-10-23 11:30:34 +08:00
|
|
|
@containers = [ Project.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@project.id)]
|
2014-10-28 23:38:14 +08:00
|
|
|
@containers += @project.versions.includes(:attachments).reorder(sort).all
|
2014-10-29 16:13:49 +08:00
|
|
|
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
|
2014-10-23 11:30:34 +08:00
|
|
|
|
2014-10-28 23:38:14 +08:00
|
|
|
elsif @course
|
|
|
|
@isproject = false
|
|
|
|
@containers = [ Course.includes(:attachments).reorder(sort).find(@course.id)]
|
2014-10-29 16:13:49 +08:00
|
|
|
show_attachments @containers
|
|
|
|
@attachtype = params[:type].to_i
|
|
|
|
@contenttype = params[:contentType].to_s
|
|
|
|
# render layout: 'base_courses'
|
|
|
|
respond_to do |format|
|
|
|
|
format.js
|
|
|
|
format.html {
|
|
|
|
render :layout => 'base_courses'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
2014-10-28 23:38:14 +08:00
|
|
|
|
2014-10-29 16:13:49 +08:00
|
|
|
# show_attachments @containers
|
|
|
|
# @attachtype = params[:type].to_i
|
|
|
|
# @contenttype = params[:contentType].to_s
|
|
|
|
#
|
|
|
|
# respond_to do |format|
|
|
|
|
# format.js
|
|
|
|
# format.html
|
|
|
|
# end
|
2014-10-28 23:38:14 +08:00
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
end
|
|
|
|
end
|