@@ -0,0 +1,55 | |||||
|
1 | # Redmine - project management software | |||
|
2 | # Copyright (C) 2006-2009 Jean-Philippe Lang | |||
|
3 | # | |||
|
4 | # This program is free software; you can redistribute it and/or | |||
|
5 | # modify it under the terms of the GNU General Public License | |||
|
6 | # as published by the Free Software Foundation; either version 2 | |||
|
7 | # of the License, or (at your option) any later version. | |||
|
8 | # | |||
|
9 | # This program is distributed in the hope that it will be useful, | |||
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
12 | # GNU General Public License for more details. | |||
|
13 | # | |||
|
14 | # You should have received a copy of the GNU General Public License | |||
|
15 | # along with this program; if not, write to the Free Software | |||
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
|
17 | ||||
|
18 | module Redmine | |||
|
19 | module Search | |||
|
20 | module Controller | |||
|
21 | def self.included(base) | |||
|
22 | base.extend(ClassMethods) | |||
|
23 | end | |||
|
24 | ||||
|
25 | module ClassMethods | |||
|
26 | @@default_search_scopes = Hash.new {|hash, key| hash[key] = {:default => nil, :actions => {}}} | |||
|
27 | mattr_accessor :default_search_scopes | |||
|
28 | ||||
|
29 | # Set the default search scope for a controller or specific actions | |||
|
30 | # Examples: | |||
|
31 | # * search_scope :issues # => sets the search scope to :issues for the whole controller | |||
|
32 | # * search_scope :issues, :only => :index | |||
|
33 | # * search_scope :issues, :only => [:index, :show] | |||
|
34 | def default_search_scope(id, options = {}) | |||
|
35 | if actions = options[:only] | |||
|
36 | actions = [] << actions unless actions.is_a?(Array) | |||
|
37 | actions.each {|a| default_search_scopes[controller_name.to_sym][:actions][a.to_sym] = id.to_s} | |||
|
38 | else | |||
|
39 | default_search_scopes[controller_name.to_sym][:default] = id.to_s | |||
|
40 | end | |||
|
41 | end | |||
|
42 | end | |||
|
43 | ||||
|
44 | def default_search_scopes | |||
|
45 | self.class.default_search_scopes | |||
|
46 | end | |||
|
47 | ||||
|
48 | # Returns the default search scope according to the current action | |||
|
49 | def default_search_scope | |||
|
50 | @default_search_scope ||= default_search_scopes[controller_name.to_sym][:actions][action_name.to_sym] || | |||
|
51 | default_search_scopes[controller_name.to_sym][:default] | |||
|
52 | end | |||
|
53 | end | |||
|
54 | end | |||
|
55 | end |
@@ -26,6 +26,7 class ApplicationController < ActionController::Base | |||||
26 | before_filter :user_setup, :check_if_login_required, :set_localization |
|
26 | before_filter :user_setup, :check_if_login_required, :set_localization | |
27 | filter_parameter_logging :password |
|
27 | filter_parameter_logging :password | |
28 |
|
28 | |||
|
29 | include Redmine::Search::Controller | |||
29 | include Redmine::MenuManager::MenuController |
|
30 | include Redmine::MenuManager::MenuController | |
30 | helper Redmine::MenuManager::MenuHelper |
|
31 | helper Redmine::MenuManager::MenuHelper | |
31 |
|
32 |
@@ -16,6 +16,7 | |||||
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 |
|
17 | |||
18 | class BoardsController < ApplicationController |
|
18 | class BoardsController < ApplicationController | |
|
19 | default_search_scope :messages | |||
19 | before_filter :find_project, :authorize |
|
20 | before_filter :find_project, :authorize | |
20 |
|
21 | |||
21 | helper :messages |
|
22 | helper :messages |
@@ -16,6 +16,7 | |||||
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 |
|
17 | |||
18 | class DocumentsController < ApplicationController |
|
18 | class DocumentsController < ApplicationController | |
|
19 | default_search_scope :documents | |||
19 | before_filter :find_project, :only => [:index, :new] |
|
20 | before_filter :find_project, :only => [:index, :new] | |
20 | before_filter :find_document, :except => [:index, :new] |
|
21 | before_filter :find_document, :except => [:index, :new] | |
21 | before_filter :authorize |
|
22 | before_filter :authorize |
@@ -17,6 +17,7 | |||||
17 |
|
17 | |||
18 | class IssuesController < ApplicationController |
|
18 | class IssuesController < ApplicationController | |
19 | menu_item :new_issue, :only => :new |
|
19 | menu_item :new_issue, :only => :new | |
|
20 | default_search_scope :issues | |||
20 |
|
21 | |||
21 | before_filter :find_issue, :only => [:show, :edit, :reply] |
|
22 | before_filter :find_issue, :only => [:show, :edit, :reply] | |
22 | before_filter :find_issues, :only => [:bulk_edit, :move, :destroy] |
|
23 | before_filter :find_issues, :only => [:bulk_edit, :move, :destroy] |
@@ -17,6 +17,7 | |||||
17 |
|
17 | |||
18 | class MessagesController < ApplicationController |
|
18 | class MessagesController < ApplicationController | |
19 | menu_item :boards |
|
19 | menu_item :boards | |
|
20 | default_search_scope :messages | |||
20 | before_filter :find_board, :only => [:new, :preview] |
|
21 | before_filter :find_board, :only => [:new, :preview] | |
21 | before_filter :find_message, :except => [:new, :preview] |
|
22 | before_filter :find_message, :except => [:new, :preview] | |
22 | before_filter :authorize, :except => [:preview, :edit, :destroy] |
|
23 | before_filter :authorize, :except => [:preview, :edit, :destroy] |
@@ -16,6 +16,7 | |||||
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 |
|
17 | |||
18 | class NewsController < ApplicationController |
|
18 | class NewsController < ApplicationController | |
|
19 | default_search_scope :news | |||
19 | before_filter :find_news, :except => [:new, :index, :preview] |
|
20 | before_filter :find_news, :except => [:new, :index, :preview] | |
20 | before_filter :find_project, :only => [:new, :preview] |
|
21 | before_filter :find_project, :only => [:new, :preview] | |
21 | before_filter :authorize, :except => [:index, :preview] |
|
22 | before_filter :authorize, :except => [:index, :preview] |
@@ -24,6 +24,8 class InvalidRevisionParam < Exception; end | |||||
24 |
|
24 | |||
25 | class RepositoriesController < ApplicationController |
|
25 | class RepositoriesController < ApplicationController | |
26 | menu_item :repository |
|
26 | menu_item :repository | |
|
27 | default_search_scope :changesets | |||
|
28 | ||||
27 | before_filter :find_repository, :except => :edit |
|
29 | before_filter :find_repository, :except => :edit | |
28 | before_filter :find_project, :only => :edit |
|
30 | before_filter :find_project, :only => :edit | |
29 | before_filter :authorize |
|
31 | before_filter :authorize |
@@ -18,6 +18,7 | |||||
18 | require 'diff' |
|
18 | require 'diff' | |
19 |
|
19 | |||
20 | class WikiController < ApplicationController |
|
20 | class WikiController < ApplicationController | |
|
21 | default_search_scope :wiki_pages | |||
21 | before_filter :find_wiki, :authorize |
|
22 | before_filter :find_wiki, :authorize | |
22 | before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] |
|
23 | before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] | |
23 |
|
24 |
@@ -31,6 +31,7 | |||||
31 | <div id="header"> |
|
31 | <div id="header"> | |
32 | <div id="quick-search"> |
|
32 | <div id="quick-search"> | |
33 | <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %> |
|
33 | <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %> | |
|
34 | <%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %> | |||
34 | <%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project}, :accesskey => accesskey(:search) %>: |
|
35 | <%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project}, :accesskey => accesskey(:search) %>: | |
35 | <%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %> |
|
36 | <%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %> | |
36 | <% end %> |
|
37 | <% end %> |
@@ -1093,4 +1093,11 class IssuesControllerTest < ActionController::TestCase | |||||
1093 | assert_equal 2, TimeEntry.find(1).issue_id |
|
1093 | assert_equal 2, TimeEntry.find(1).issue_id | |
1094 | assert_equal 2, TimeEntry.find(2).issue_id |
|
1094 | assert_equal 2, TimeEntry.find(2).issue_id | |
1095 | end |
|
1095 | end | |
|
1096 | ||||
|
1097 | def test_default_search_scope | |||
|
1098 | get :index | |||
|
1099 | assert_tag :div, :attributes => {:id => 'quick-search'}, | |||
|
1100 | :child => {:tag => 'form', | |||
|
1101 | :child => {:tag => 'input', :attributes => {:name => 'issues', :type => 'hidden', :value => '1'}}} | |||
|
1102 | end | |||
1096 | end |
|
1103 | end |
General Comments 0
You need to be logged in to leave comments.
Login now