Search engine: added a checkbox to search titles only (usefull when searching on common words).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@842 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
1 parent
74ecb37be6
commit
b9cc65db61
18 files changed
+36
-12
No files matched your search
@@ -25,6 +25,7 @@ class SearchController < ApplicationController
|
||||
@question = params[:q] || ""
|
||||
@question.strip!
|
||||
@all_words = params[:all_words] || (params[:submit] ? false : true)
|
||||
@titles_only = !params[:titles_only].nil?
|
||||
|
||||
offset = nil
|
||||
begin; offset = params[:offset].to_time if params[:offset]; rescue; end
|
||||
@@ -58,14 +59,17 @@ class SearchController < ApplicationController
|
||||
# no more than 5 tokens to search for
|
||||
@tokens.slice! 5..-1 if @tokens.size > 5
|
||||
# strings used in sql like statement
|
||||
like_tokens = @tokens.collect {|w| "%#{w.downcase}%"}
|
||||
operator = @all_words ? " AND " : " OR "
|
||||
like_tokens = @tokens.collect {|w| "%#{w.downcase}%"}
|
||||
@results = []
|
||||
limit = 10
|
||||
if @project
|
||||
@scope.each do |s|
|
||||
@results += s.singularize.camelcase.constantize.search(like_tokens, @all_words, @project,
|
||||
:limit => (limit+1), :offset => offset, :before => params[:previous].nil?)
|
||||
@results += s.singularize.camelcase.constantize.search(like_tokens, @project,
|
||||
:all_words => @all_words,
|
||||
:titles_only => @titles_only,
|
||||
:limit => (limit+1),
|
||||
:offset => offset,
|
||||
:before => params[:previous].nil?)
|
||||
end
|
||||
@results = @results.sort {|a,b| b.event_datetime <=> a.event_datetime}
|
||||
if params[:previous].nil?
|
||||
@@ -82,6 +86,7 @@ class SearchController < ApplicationController
|
||||
end
|
||||
end
|
||||
else
|
||||
operator = @all_words ? ' AND ' : ' OR '
|
||||
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'
|
||||
end
|
||||
|
||||
@@ -2,14 +2,16 @@
|
||||
|
||||
<div class="box">
|
||||
<% form_tag({}, :method => :get) do %>
|
||||
<p><%= text_field_tag 'q', @question, :size => 30, :id => 'search-input' %>
|
||||
<p><%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %>
|
||||
<%= javascript_tag "Field.focus('search-input')" %>
|
||||
|
||||
<% @object_types.each do |t| %>
|
||||
<label><%= check_box_tag t, 1, @scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%></label>
|
||||
<% end %>
|
||||
<br />
|
||||
<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label></p>
|
||||
<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label>
|
||||
<label><%= check_box_tag 'titles_only', 1, @titles_only %> <%= l(:label_search_titles_only) %></label>
|
||||
</p>
|
||||
<%= submit_tag l(:button_submit), :name => 'submit' %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user