|
|
@@ -18,11 +18,14 @@ |
|
|
|
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' |