##// END OF EJS Templates
Replaces find(:first/:all) calls....
Replaces find(:first/:all) calls. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10931 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r10467:251f263abdc5
r10704:ea296a109a86
Show More
attachments_controller.rb
139 lines | 4.8 KiB | text/x-ruby | RubyLexer
/ app / controllers / attachments_controller.rb
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 # Redmine - project management software
Jean-Philippe Lang
Copyright update....
r9453 # Copyright (C) 2006-2012 Jean-Philippe Lang
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 #
# 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.
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716 #
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 # 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.
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716 #
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 # 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 AttachmentsController < ApplicationController
Jean-Philippe Lang
Adds support for adding attachments to issues through the REST API (#8171)....
r8808 before_filter :find_project, :except => :upload
Jean-Philippe Lang
Displays thumbnails of attached images of the issue view (#1006)....
r9750 before_filter :file_readable, :read_authorize, :only => [:show, :download, :thumbnail]
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 before_filter :delete_authorize, :only => :destroy
Jean-Philippe Lang
Adds support for adding attachments to issues through the REST API (#8171)....
r8808 before_filter :authorize_global, :only => :upload
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Adds support for adding attachments to issues through the REST API (#8171)....
r8808 accept_api_auth :show, :download, :upload
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Unified diff viewer for attached files with .patch or .diff extension (#1403)....
r1502 def show
Jean-Philippe Lang
REST API for reading attachments (#7671)....
r6175 respond_to do |format|
format.html {
if @attachment.is_diff?
@diff = File.new(@attachment.diskfile, "rb").read
Toshi MARUYAMA
attachment: add a new feature to switch "side by side" and "inline" for patches (#9612)...
r7740 @diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
@diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
Toshi MARUYAMA
attachment: fix that diff type is not saved in user preference (#10152)...
r8641 # Save diff type as user preference
if User.current.logged? && @diff_type != User.current.pref[:diff_type]
User.current.pref[:diff_type] = @diff_type
User.current.preference.save
end
Jean-Philippe Lang
REST API for reading attachments (#7671)....
r6175 render :action => 'diff'
elsif @attachment.is_text? && @attachment.filesize <= Setting.file_max_size_displayed.to_i.kilobyte
@content = File.new(@attachment.diskfile, "rb").read
render :action => 'file'
else
download
end
}
format.api
Jean-Philippe Lang
Unified diff viewer for attached files with .patch or .diff extension (#1403)....
r1502 end
end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 def download
Jean-Philippe Lang
Increment project files downloads....
r2207 if @attachment.container.is_a?(Version) || @attachment.container.is_a?(Project)
@attachment.increment_download
end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Adds Etags on attachments....
r9780 if stale?(:etag => @attachment.digest)
# images are sent inline
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
:type => detect_content_type(@attachment),
:disposition => (@attachment.image? ? 'inline' : 'attachment')
end
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Displays thumbnails of attached images of the issue view (#1006)....
r9750 def thumbnail
Jean-Philippe Lang
Adds a macro for inserting thumbnails in formatted text (#3510)....
r9830 if @attachment.thumbnailable? && thumbnail = @attachment.thumbnail(:size => params[:size])
Jean-Philippe Lang
Adds Etags on attachments....
r9780 if stale?(:etag => thumbnail)
send_file thumbnail,
:filename => filename_for_content_disposition(@attachment.filename),
:type => detect_content_type(@attachment),
:disposition => 'inline'
end
Jean-Philippe Lang
Displays thumbnails of attached images of the issue view (#1006)....
r9750 else
# No thumbnail for the attachment or thumbnail could not be created
render :nothing => true, :status => 404
end
end
Jean-Philippe Lang
Adds support for adding attachments to issues through the REST API (#8171)....
r8808 def upload
# Make sure that API users get used to set this content type
# as it won't trigger Rails' automatic parsing of the request body for parameters
unless request.content_type == 'application/octet-stream'
render :nothing => true, :status => 406
return
end
Jean-Philippe Lang
Fixed that REST Uploads fail with fastcgi (#10832)....
r9469 @attachment = Attachment.new(:file => request.raw_post)
Jean-Philippe Lang
Adds support for adding attachments to issues through the REST API (#8171)....
r8808 @attachment.author = User.current
Jean-Philippe Lang
Let the attachment filename be specified on upload (#12125)....
r10467 @attachment.filename = params[:filename].presence || Redmine::Utils.random_hex(16)
Jean-Philippe Lang
Adds support for adding attachments to issues through the REST API (#8171)....
r8808
if @attachment.save
respond_to do |format|
format.api { render :action => 'upload', :status => :created }
end
else
respond_to do |format|
format.api { render_validation_errors(@attachment) }
end
end
end
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 def destroy
Jean-Philippe Lang
Rails 3.1 compatibility....
r8953 if @attachment.container.respond_to?(:init_journal)
@attachment.container.init_journal(User.current)
end
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 # Make sure association callbacks are called
@attachment.container.attachments.delete(@attachment)
Jean-Philippe Lang
Code cleanup....
r9230 redirect_to_referer_or project_path(@project)
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 private
def find_project
@attachment = Attachment.find(params[:id])
Jean-Philippe Lang
Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename (#1649)....
r1669 # Show 404 if the filename in the url is wrong
raise ActiveRecord::RecordNotFound if params[:filename] && params[:filename] != @attachment.filename
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 @project = @attachment.project
Jean-Philippe Lang
Move VersionsController#download to AttachmentsController....
r1668 rescue ActiveRecord::RecordNotFound
render_404
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Returns a 404 error when trying to view/download an attachment that can't be read from disk....
r2600 # Checks that the file exists and is readable
def file_readable
@attachment.readable? ? true : render_404
end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 def read_authorize
@attachment.visible? ? true : deny_access
end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 def delete_authorize
@attachment.deletable? ? true : deny_access
end
Toshi MARUYAMA
remove trailing white-spaces from attachments controller source....
r5716
Jean-Philippe Lang
Auto-detect attachment content type when blank (#3782)....
r3144 def detect_content_type(attachment)
content_type = attachment.content_type
if content_type.blank?
content_type = Redmine::MimeType.of(attachment.filename)
end
Jean-Philippe Lang
Fixed: error when downloading a file with no matching mime type (#3782)....
r3167 content_type.to_s
Jean-Philippe Lang
Auto-detect attachment content type when blank (#3782)....
r3144 end
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 end