git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7908 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/1.3.0
@@ -536,13 +536,13 @@ module ApplicationHelper | |||
def parse_inline_attachments(text, project, obj, attr, only_path, options) | |||
# when using an image link, try to use an attachment, if possible | |||
if options[:attachments] || (obj && obj.respond_to?(:attachments)) | |||
attachments = nil | |||
attachments = options[:attachments] || obj.attachments | |||
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| | |||
filename, ext, alt, alttext = $1.downcase, $2, $3, $4 | |||
attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse | |||
# search for the picture in attachments | |||
if found = attachments.detect { |att| att.filename.downcase == filename } | |||
image_url = url_for :only_path => only_path, :controller => 'attachments', :action => 'download', :id => found | |||
if found = Attachment.latest_attach(attachments, filename) | |||
image_url = url_for :only_path => only_path, :controller => 'attachments', | |||
:action => 'download', :id => found | |||
desc = found.description.to_s.gsub('"', '') | |||
if !desc.blank? && alttext.blank? | |||
alt = " title=\"#{desc}\" alt=\"#{desc}\"" |
@@ -167,6 +167,12 @@ class Attachment < ActiveRecord::Base | |||
{:files => attached, :unsaved => obj.unsaved_attachments} | |||
end | |||
def self.latest_attach(attachments, filename) | |||
attachments.sort_by(&:created_on).reverse.detect { | |||
|att| att.filename.downcase == filename.downcase | |||
} | |||
end | |||
private | |||
def sanitize_filename(value) | |||
# get only the filename, not the whole path |
@@ -121,4 +121,24 @@ class AttachmentTest < ActiveSupport::TestCase | |||
end | |||
end | |||
end | |||
def test_latest_attach | |||
Attachment.storage_path = "#{Rails.root}/test/fixtures/files" | |||
a1 = Attachment.find(16) | |||
assert_equal "testfile.png", a1.filename | |||
assert a1.readable? | |||
assert (! a1.visible?(User.anonymous)) | |||
assert a1.visible?(User.find(2)) | |||
a2 = Attachment.find(17) | |||
assert_equal "testfile.PNG", a2.filename | |||
assert a2.readable? | |||
assert (! a2.visible?(User.anonymous)) | |||
assert a2.visible?(User.find(2)) | |||
assert a1.created_on < a2.created_on | |||
la1 = Attachment.latest_attach([a1, a2], "testfile.png") | |||
assert_equal 17, la1.id | |||
la2 = Attachment.latest_attach([a1, a2], "Testfile.PNG") | |||
assert_equal 17, la2.id | |||
end | |||
end |