remove trailing white-spaces from Attachment model source.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5793 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
0f245c0e56
commit
b829acfb4a
|
@ -1,16 +1,16 @@
|
||||||
# redMine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006-2007 Jean-Philippe Lang
|
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
# as published by the Free Software Foundation; either version 2
|
# as published by the Free Software Foundation; either version 2
|
||||||
# of the License, or (at your option) any later version.
|
# of the License, or (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
@ -20,7 +20,7 @@ require "digest/md5"
|
||||||
class Attachment < ActiveRecord::Base
|
class Attachment < ActiveRecord::Base
|
||||||
belongs_to :container, :polymorphic => true
|
belongs_to :container, :polymorphic => true
|
||||||
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
|
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
|
||||||
|
|
||||||
validates_presence_of :container, :filename, :author
|
validates_presence_of :container, :filename, :author
|
||||||
validates_length_of :filename, :maximum => 255
|
validates_length_of :filename, :maximum => 255
|
||||||
validates_length_of :disk_filename, :maximum => 255
|
validates_length_of :disk_filename, :maximum => 255
|
||||||
|
@ -31,20 +31,20 @@ class Attachment < ActiveRecord::Base
|
||||||
acts_as_activity_provider :type => 'files',
|
acts_as_activity_provider :type => 'files',
|
||||||
:permission => :view_files,
|
:permission => :view_files,
|
||||||
:author_key => :author_id,
|
:author_key => :author_id,
|
||||||
:find_options => {:select => "#{Attachment.table_name}.*",
|
:find_options => {:select => "#{Attachment.table_name}.*",
|
||||||
:joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " +
|
:joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " +
|
||||||
"LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id OR ( #{Attachment.table_name}.container_type='Project' AND #{Attachment.table_name}.container_id = #{Project.table_name}.id )"}
|
"LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id OR ( #{Attachment.table_name}.container_type='Project' AND #{Attachment.table_name}.container_id = #{Project.table_name}.id )"}
|
||||||
|
|
||||||
acts_as_activity_provider :type => 'documents',
|
acts_as_activity_provider :type => 'documents',
|
||||||
:permission => :view_documents,
|
:permission => :view_documents,
|
||||||
:author_key => :author_id,
|
:author_key => :author_id,
|
||||||
:find_options => {:select => "#{Attachment.table_name}.*",
|
:find_options => {:select => "#{Attachment.table_name}.*",
|
||||||
:joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " +
|
:joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " +
|
||||||
"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
|
"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
|
||||||
|
|
||||||
cattr_accessor :storage_path
|
cattr_accessor :storage_path
|
||||||
@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
|
@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
|
||||||
|
|
||||||
def validate
|
def validate
|
||||||
if self.filesize > Setting.attachment_max_size.to_i.kilobytes
|
if self.filesize > Setting.attachment_max_size.to_i.kilobytes
|
||||||
errors.add(:base, :too_long, :count => Setting.attachment_max_size.to_i.kilobytes)
|
errors.add(:base, :too_long, :count => Setting.attachment_max_size.to_i.kilobytes)
|
||||||
|
@ -76,7 +76,7 @@ class Attachment < ActiveRecord::Base
|
||||||
if @temp_file && (@temp_file.size > 0)
|
if @temp_file && (@temp_file.size > 0)
|
||||||
logger.debug("saving '#{self.diskfile}'")
|
logger.debug("saving '#{self.diskfile}'")
|
||||||
md5 = Digest::MD5.new
|
md5 = Digest::MD5.new
|
||||||
File.open(diskfile, "wb") do |f|
|
File.open(diskfile, "wb") do |f|
|
||||||
buffer = ""
|
buffer = ""
|
||||||
while (buffer = @temp_file.read(8192))
|
while (buffer = @temp_file.read(8192))
|
||||||
f.write(buffer)
|
f.write(buffer)
|
||||||
|
@ -100,7 +100,7 @@ class Attachment < ActiveRecord::Base
|
||||||
def diskfile
|
def diskfile
|
||||||
"#{@@storage_path}/#{self.disk_filename}"
|
"#{@@storage_path}/#{self.disk_filename}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def increment_download
|
def increment_download
|
||||||
increment!(:downloads)
|
increment!(:downloads)
|
||||||
end
|
end
|
||||||
|
@ -108,27 +108,27 @@ class Attachment < ActiveRecord::Base
|
||||||
def project
|
def project
|
||||||
container.project
|
container.project
|
||||||
end
|
end
|
||||||
|
|
||||||
def visible?(user=User.current)
|
def visible?(user=User.current)
|
||||||
container.attachments_visible?(user)
|
container.attachments_visible?(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def deletable?(user=User.current)
|
def deletable?(user=User.current)
|
||||||
container.attachments_deletable?(user)
|
container.attachments_deletable?(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def image?
|
def image?
|
||||||
self.filename =~ /\.(jpe?g|gif|png)$/i
|
self.filename =~ /\.(jpe?g|gif|png)$/i
|
||||||
end
|
end
|
||||||
|
|
||||||
def is_text?
|
def is_text?
|
||||||
Redmine::MimeType.is_type?('text', filename)
|
Redmine::MimeType.is_type?('text', filename)
|
||||||
end
|
end
|
||||||
|
|
||||||
def is_diff?
|
def is_diff?
|
||||||
self.filename =~ /\.(patch|diff)$/i
|
self.filename =~ /\.(patch|diff)$/i
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns true if the file is readable
|
# Returns true if the file is readable
|
||||||
def readable?
|
def readable?
|
||||||
File.readable?(diskfile)
|
File.readable?(diskfile)
|
||||||
|
@ -145,7 +145,7 @@ class Attachment < ActiveRecord::Base
|
||||||
attachments.each_value do |attachment|
|
attachments.each_value do |attachment|
|
||||||
file = attachment['file']
|
file = attachment['file']
|
||||||
next unless file && file.size > 0
|
next unless file && file.size > 0
|
||||||
a = Attachment.create(:container => obj,
|
a = Attachment.create(:container => obj,
|
||||||
:file => file,
|
:file => file,
|
||||||
:description => attachment['description'].to_s.strip,
|
:description => attachment['description'].to_s.strip,
|
||||||
:author => User.current)
|
:author => User.current)
|
||||||
|
@ -160,18 +160,18 @@ class Attachment < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
{:files => attached, :unsaved => obj.unsaved_attachments}
|
{:files => attached, :unsaved => obj.unsaved_attachments}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def sanitize_filename(value)
|
def sanitize_filename(value)
|
||||||
# get only the filename, not the whole path
|
# get only the filename, not the whole path
|
||||||
just_filename = value.gsub(/^.*(\\|\/)/, '')
|
just_filename = value.gsub(/^.*(\\|\/)/, '')
|
||||||
# NOTE: File.basename doesn't work right with Windows paths on Unix
|
# NOTE: File.basename doesn't work right with Windows paths on Unix
|
||||||
# INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/'))
|
# INCORRECT: just_filename = File.basename(value.gsub('\\\\', '/'))
|
||||||
|
|
||||||
# Finally, replace all non alphanumeric, hyphens or periods with underscore
|
# Finally, replace all non alphanumeric, hyphens or periods with underscore
|
||||||
@filename = just_filename.gsub(/[^\w\.\-]/,'_')
|
@filename = just_filename.gsub(/[^\w\.\-]/,'_')
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns an ASCII or hashed filename
|
# Returns an ASCII or hashed filename
|
||||||
def self.disk_filename(filename)
|
def self.disk_filename(filename)
|
||||||
timestamp = DateTime.now.strftime("%y%m%d%H%M%S")
|
timestamp = DateTime.now.strftime("%y%m%d%H%M%S")
|
||||||
|
|
Loading…
Reference in New Issue