OSDN Git Service

Text search added on messages.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 14 May 2007 17:46:58 +0000 (17:46 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 14 May 2007 17:46:58 +0000 (17:46 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@533 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/search_controller.rb
app/views/search/index.rhtml

index c463e4a..01c72f1 100644 (file)
 class SearchController < ApplicationController
   layout 'base'
 
+  helper :messages
+  include MessagesHelper
+
   def index
     @question = params[:q] || ""
     @question.strip!
     @all_words = params[:all_words] || (params[:submit] ? false : true)
-    @scope = params[:scope] || (params[:submit] ? [] : %w(projects issues changesets news documents wiki) )
+    @scope = params[:scope] || (params[:submit] ? [] : %w(projects issues changesets news documents wiki messages) )
     
     # quick jump to an issue
     if @scope.include?('issues') && @question.match(/^#?(\d+)$/) && Issue.find_by_id($1, :include => :project, :conditions => Project.visible_by(logged_in_user))
@@ -52,6 +55,9 @@ class SearchController < ApplicationController
         @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')
         @results += @project.repository.changesets.find(:all, :limit => limit, :conditions => [ (["(LOWER(comments) like ?)"] * like_tokens.size).join(operator), * (like_tokens).sort] ) if @project.repository && @scope.include?('changesets')
+        Message.with_scope :find => {:conditions => ["#{Board.table_name}.project_id = ?", @project.id]} do
+          @results += Message.find(:all, :include => :board, :limit => limit, :conditions => [ (["(LOWER(subject) like ? OR LOWER(content) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] ) if @scope.include? 'messages'
+        end
       else
         Project.with_scope(:find => {:conditions => Project.visible_by(logged_in_user)}) do
           @results += Project.find(:all, :limit => limit, :conditions => [ (["(LOWER(name) like ? OR LOWER(description) like ?)"] * like_tokens.size).join(operator), * (like_tokens * 2).sort] ) if @scope.include? 'projects'
index 110f814..66b8974 100644 (file)
@@ -14,6 +14,9 @@
   <% if @project.wiki %>\r
   <%= check_box_tag 'scope[]', 'wiki', (@scope.include? 'wiki') %> <label><%= l(:label_wiki) %></label>\r
   <% end %>\r
+  <% if @project.boards.any? %>\r
+  <%= check_box_tag 'scope[]', 'messages', (@scope.include? 'messages') %> <label><%= l(:label_message_plural) %></label>\r
+  <% end %>\r
 <% else %>\r
   <%= check_box_tag 'scope[]', 'projects', (@scope.include? 'projects') %> <label><%= l(:label_project_plural) %></label>\r
 <% end %>\r
             <%=l(:label_revision)%> <%= link_to h(e.revision), :controller => 'repositories', :action => 'revision', :id => @project, :rev => e.revision %><br />\r
             <%= highlight_tokens(e.comments, @tokens) %><br />\r
             <em><%= e.committer.blank? ? e.committer : "Anonymous" %>, <%= format_time(e.committed_on) %></em>\r
+        <% elsif e.is_a? Message %>\r
+            <%=h e.board.name %>: <%= link_to_message e %><br />\r
+            <%= highlight_tokens(e.content, @tokens) %><br />\r
+            <em><%= e.author ? e.author.name : "Anonymous" %>, <%= format_time(e.created_on) %></em>\r
         <% end %>\r
         </p></li>  \r
       <% end %>\r