]> source.dussan.org Git - redmine.git/commitdiff
Issue notes are now included in search.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 5 Sep 2007 19:37:13 +0000 (19:37 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 5 Sep 2007 19:37:13 +0000 (19:37 +0000)
Fixed: search results too long when there are many matches.
Fixed: search results not escaped.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@705 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/search_controller.rb
app/helpers/search_helper.rb

index 01c72f18250c7325de2fff1c10a4fae819712c3c..2a3fe4f7ccf503a333fe8877014752ddfa520545 100644 (file)
@@ -51,6 +51,10 @@ class SearchController < ApplicationController
       @results = []
       if @project
         @results += @project.issues.find(:all, :limit => limit, :include => :author, :conditions => [ (["(LOWER(subject) like ? OR LOWER(description) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] ) if @scope.include? 'issues'
+        Journal.with_scope :find => {:conditions => ["#{Issue.table_name}.project_id = ?", @project.id]} do
+          @results += Journal.find(:all, :include => :issue, :limit => limit, :conditions => [ (["(LOWER(notes) like ? OR LOWER(notes) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] ).collect(&:issue) if @scope.include? 'issues'
+        end
+        @results.uniq!
         @results += @project.news.find(:all, :limit => limit, :conditions => [ (["(LOWER(title) like ? OR LOWER(description) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort], :include => :author ) if @scope.include? 'news'
         @results += @project.documents.find(:all, :limit => limit, :conditions => [ (["(LOWER(title) like ? OR LOWER(description) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] ) if @scope.include? 'documents'
         @results += @project.wiki.pages.find(:all, :limit => limit, :include => :content, :conditions => [ (["(LOWER(title) like ? OR LOWER(text) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] ) if @project.wiki && @scope.include?('wiki')
index bc408a30561698c9654bb25889282a519126fc3b..676a7e8e339802b8d9222085520f774e2391443f 100644 (file)
@@ -21,7 +21,12 @@ module SearchHelper
     regexp = Regexp.new "(#{tokens.join('|')})", Regexp::IGNORECASE    
     result = ''
     text.split(regexp).each_with_index do |words, i|
-      result << (i.even? ? (words.length > 100 ? "#{words[0..44]} ... #{words[-45..-1]}" : words) : content_tag('span', words, :class => 'highlight'))
+      if result.length > 1200
+        # maximum length of the preview reached
+        result << '...'
+        break
+      end
+      result << (i.even? ? h(words.length > 100 ? "#{words[0..44]} ... #{words[-45..-1]}" : words) : content_tag('span', h(words), :class => 'highlight'))
     end
     result
   end