@@ -536,13 +536,13 module ApplicationHelper | |||||
536 | def parse_inline_attachments(text, project, obj, attr, only_path, options) |
|
536 | def parse_inline_attachments(text, project, obj, attr, only_path, options) | |
537 | # when using an image link, try to use an attachment, if possible |
|
537 | # when using an image link, try to use an attachment, if possible | |
538 | if options[:attachments] || (obj && obj.respond_to?(:attachments)) |
|
538 | if options[:attachments] || (obj && obj.respond_to?(:attachments)) | |
539 | attachments = nil |
|
539 | attachments = options[:attachments] || obj.attachments | |
540 | text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| |
|
540 | text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| | |
541 | filename, ext, alt, alttext = $1.downcase, $2, $3, $4 |
|
541 | filename, ext, alt, alttext = $1.downcase, $2, $3, $4 | |
542 | attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse |
|
|||
543 | # search for the picture in attachments |
|
542 | # search for the picture in attachments | |
544 | if found = attachments.detect { |att| att.filename.downcase == filename } |
|
543 | if found = Attachment.latest_attach(attachments, filename) | |
545 |
image_url = url_for :only_path => only_path, :controller => 'attachments', |
|
544 | image_url = url_for :only_path => only_path, :controller => 'attachments', | |
|
545 | :action => 'download', :id => found | |||
546 | desc = found.description.to_s.gsub('"', '') |
|
546 | desc = found.description.to_s.gsub('"', '') | |
547 | if !desc.blank? && alttext.blank? |
|
547 | if !desc.blank? && alttext.blank? | |
548 | alt = " title=\"#{desc}\" alt=\"#{desc}\"" |
|
548 | alt = " title=\"#{desc}\" alt=\"#{desc}\"" |
@@ -167,6 +167,12 class Attachment < ActiveRecord::Base | |||||
167 | {:files => attached, :unsaved => obj.unsaved_attachments} |
|
167 | {:files => attached, :unsaved => obj.unsaved_attachments} | |
168 | end |
|
168 | end | |
169 |
|
169 | |||
|
170 | def self.latest_attach(attachments, filename) | |||
|
171 | attachments.sort_by(&:created_on).reverse.detect { | |||
|
172 | |att| att.filename.downcase == filename.downcase | |||
|
173 | } | |||
|
174 | end | |||
|
175 | ||||
170 | private |
|
176 | private | |
171 | def sanitize_filename(value) |
|
177 | def sanitize_filename(value) | |
172 | # get only the filename, not the whole path |
|
178 | # get only the filename, not the whole path |
@@ -121,4 +121,24 class AttachmentTest < ActiveSupport::TestCase | |||||
121 | end |
|
121 | end | |
122 | end |
|
122 | end | |
123 | end |
|
123 | end | |
|
124 | ||||
|
125 | def test_latest_attach | |||
|
126 | Attachment.storage_path = "#{Rails.root}/test/fixtures/files" | |||
|
127 | a1 = Attachment.find(16) | |||
|
128 | assert_equal "testfile.png", a1.filename | |||
|
129 | assert a1.readable? | |||
|
130 | assert (! a1.visible?(User.anonymous)) | |||
|
131 | assert a1.visible?(User.find(2)) | |||
|
132 | a2 = Attachment.find(17) | |||
|
133 | assert_equal "testfile.PNG", a2.filename | |||
|
134 | assert a2.readable? | |||
|
135 | assert (! a2.visible?(User.anonymous)) | |||
|
136 | assert a2.visible?(User.find(2)) | |||
|
137 | assert a1.created_on < a2.created_on | |||
|
138 | ||||
|
139 | la1 = Attachment.latest_attach([a1, a2], "testfile.png") | |||
|
140 | assert_equal 17, la1.id | |||
|
141 | la2 = Attachment.latest_attach([a1, a2], "Testfile.PNG") | |||
|
142 | assert_equal 17, la2.id | |||
|
143 | end | |||
124 | end |
|
144 | end |
General Comments 0
You need to be logged in to leave comments.
Login now