2011-07-09 11:25:01 +00:00
|
|
|
# Redmine - project management software
|
2014-01-29 22:45:39 +00:00
|
|
|
# Copyright (C) 2006-2014 Jean-Philippe Lang
|
2007-04-30 08:52:39 +00:00
|
|
|
#
|
|
|
|
|
# This program is free software; you can redistribute it and/or
|
|
|
|
|
# modify it under the terms of the GNU General Public License
|
|
|
|
|
# as published by the Free Software Foundation; either version 2
|
|
|
|
|
# of the License, or (at your option) any later version.
|
2011-08-30 14:11:21 +00:00
|
|
|
#
|
2007-04-30 08:52:39 +00:00
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
# GNU General Public License for more details.
|
2011-08-30 14:11:21 +00:00
|
|
|
#
|
2007-04-30 08:52:39 +00:00
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
|
# along with this program; if not, write to the Free Software
|
|
|
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
|
|
class SearchController < ApplicationController
|
2008-03-12 20:50:48 +00:00
|
|
|
before_filter :find_optional_project
|
2007-04-30 08:52:39 +00:00
|
|
|
|
|
|
|
|
def index
|
|
|
|
|
@question = params[:q] || ""
|
|
|
|
|
@question.strip!
|
2011-07-09 11:25:01 +00:00
|
|
|
@all_words = params[:all_words] ? params[:all_words].present? : true
|
|
|
|
|
@titles_only = params[:titles_only] ? params[:titles_only].present? : false
|
2015-01-09 21:06:09 +00:00
|
|
|
@search_attachments = params[:attachments].presence || '0'
|
2011-08-30 14:11:21 +00:00
|
|
|
|
2014-12-20 08:10:05 +00:00
|
|
|
# quick jump to an issue
|
|
|
|
|
if (m = @question.match(/^#?(\d+)$/)) && (issue = Issue.visible.find_by_id(m[1].to_i))
|
|
|
|
|
redirect_to issue_path(issue)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
2008-05-18 16:15:22 +00:00
|
|
|
projects_to_search =
|
2008-05-20 20:31:04 +00:00
|
|
|
case params[:scope]
|
2008-05-18 16:15:22 +00:00
|
|
|
when 'all'
|
|
|
|
|
nil
|
|
|
|
|
when 'my_projects'
|
2014-12-13 11:09:42 +00:00
|
|
|
User.current.projects
|
2008-05-20 20:31:04 +00:00
|
|
|
when 'subprojects'
|
2014-10-22 17:37:16 +00:00
|
|
|
@project ? (@project.self_and_descendants.active.to_a) : nil
|
2008-05-18 16:15:22 +00:00
|
|
|
else
|
|
|
|
|
@project
|
|
|
|
|
end
|
2011-08-30 14:11:21 +00:00
|
|
|
|
2010-02-17 20:05:51 +00:00
|
|
|
@object_types = Redmine::Search.available_search_types.dup
|
2008-05-18 16:15:22 +00:00
|
|
|
if projects_to_search.is_a? Project
|
|
|
|
|
# don't search projects
|
|
|
|
|
@object_types.delete('projects')
|
2007-09-24 17:46:25 +00:00
|
|
|
# only show what the user is allowed to view
|
2008-05-18 16:15:22 +00:00
|
|
|
@object_types = @object_types.select {|o| User.current.allowed_to?("view_#{o}".to_sym, projects_to_search)}
|
2007-09-24 17:46:25 +00:00
|
|
|
end
|
2011-08-30 14:11:21 +00:00
|
|
|
|
2008-05-18 16:15:22 +00:00
|
|
|
@scope = @object_types.select {|t| params[t]}
|
|
|
|
|
@scope = @object_types if @scope.empty?
|
2011-08-30 14:11:21 +00:00
|
|
|
|
2014-12-20 08:10:05 +00:00
|
|
|
fetcher = Redmine::Search::Fetcher.new(
|
|
|
|
|
@question, User.current, @scope, projects_to_search,
|
2015-01-09 21:06:09 +00:00
|
|
|
:all_words => @all_words, :titles_only => @titles_only, :attachments => @search_attachments,
|
|
|
|
|
:cache => params[:page].present?
|
2014-12-20 08:10:05 +00:00
|
|
|
)
|
2014-12-12 20:49:31 +00:00
|
|
|
|
2014-12-20 08:10:05 +00:00
|
|
|
if fetcher.tokens.present?
|
|
|
|
|
@result_count = fetcher.result_count
|
|
|
|
|
@result_count_by_type = fetcher.result_count_by_type
|
|
|
|
|
@tokens = fetcher.tokens
|
2014-12-12 20:49:31 +00:00
|
|
|
|
2014-12-20 08:10:05 +00:00
|
|
|
@result_pages = Paginator.new @result_count, 10, params['page']
|
|
|
|
|
@results = fetcher.results(@result_pages.offset, @result_pages.per_page)
|
2007-04-30 08:52:39 +00:00
|
|
|
else
|
|
|
|
|
@question = ""
|
|
|
|
|
end
|
2007-09-27 17:28:22 +00:00
|
|
|
render :layout => false if request.xhr?
|
2007-04-30 08:52:39 +00:00
|
|
|
end
|
|
|
|
|
|
2011-08-30 14:11:21 +00:00
|
|
|
private
|
2008-03-12 20:50:48 +00:00
|
|
|
def find_optional_project
|
|
|
|
|
return true unless params[:id]
|
2007-04-30 08:52:39 +00:00
|
|
|
@project = Project.find(params[:id])
|
2008-03-12 20:50:48 +00:00
|
|
|
check_project_privacy
|
2007-04-30 08:52:39 +00:00
|
|
|
rescue ActiveRecord::RecordNotFound
|
|
|
|
|
render_404
|
|
|
|
|
end
|
|
|
|
|
end
|