From b0be3b95aab8c01a7561431579c83cde07f3109f Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 20 May 2008 20:31:04 +0000 Subject: [PATCH] Ability to search a project and its subprojects (#1264). git-svn-id: http://redmine.rubyforge.org/svn/trunk@1439 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/search_controller.rb | 4 +++- app/helpers/search_helper.rb | 3 ++- lang/bg.yml | 1 + lang/cs.yml | 1 + lang/da.yml | 1 + lang/de.yml | 1 + lang/en.yml | 1 + lang/es.yml | 1 + lang/fi.yml | 1 + lang/fr.yml | 1 + lang/he.yml | 1 + lang/it.yml | 1 + lang/ja.yml | 1 + lang/ko.yml | 1 + lang/lt.yml | 1 + lang/nl.yml | 1 + lang/no.yml | 1 + lang/pl.yml | 1 + lang/pt-br.yml | 1 + lang/pt.yml | 1 + lang/ro.yml | 1 + lang/ru.yml | 1 + lang/sr.yml | 1 + lang/sv.yml | 1 + lang/th.yml | 1 + lang/uk.yml | 1 + lang/zh-tw.yml | 1 + lang/zh.yml | 1 + test/functional/search_controller_test.rb | 8 ++++++++ 29 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index d93c6380..d4ef01bf 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -30,11 +30,13 @@ class SearchController < ApplicationController @titles_only = !params[:titles_only].nil? projects_to_search = - case params[:projects] + case params[:scope] when 'all' nil when 'my_projects' User.current.memberships.collect(&:project) + when 'subprojects' + @project ? ([ @project ] + @project.active_children) : nil else @project end diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 6b5a2ced..d6a2fb94 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -39,7 +39,8 @@ module SearchHelper def project_select_tag options = [[l(:label_project_all), 'all']] options << [l(:label_my_projects), 'my_projects'] unless User.current.memberships.empty? + options << [l(:label_and_its_subprojects, @project.name), 'subprojects'] unless @project.nil? || @project.active_children.empty? options << [@project.name, ''] unless @project.nil? - select_tag('projects', options_for_select(options, params[:projects].to_s)) if options.size > 1 + select_tag('scope', options_for_select(options, params[:scope].to_s)) if options.size > 1 end end diff --git a/lang/bg.yml b/lang/bg.yml index b341d989..224177d9 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -618,3 +618,4 @@ setting_default_projects_public: Новите проекти са публичн error_scm_annotate: "Обектът не съществува или не може да бъде анотиран." label_planning: Планиране text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/cs.yml b/lang/cs.yml index 250c602c..2126553f 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -623,3 +623,4 @@ enumeration_activities: Aktivity (sledování času) error_scm_annotate: "Položka neexistuje nebo nemůže být komentována." label_planning: Plánování text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/da.yml b/lang/da.yml index ff2ed982..3b5ca07d 100644 --- a/lang/da.yml +++ b/lang/da.yml @@ -620,3 +620,4 @@ setting_default_projects_public: Nye projekter er offentlige som default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planlægning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/de.yml b/lang/de.yml index 77184cf8..273bad27 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -619,3 +619,4 @@ enumeration_issue_priorities: Ticket-Prioritäten enumeration_doc_categories: Dokumentenkategorien enumeration_activities: Aktivitäten (Zeiterfassung) text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/en.yml b/lang/en.yml index e39aec30..892a63a1 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -291,6 +291,7 @@ label_auth_source: Authentication mode label_auth_source_new: New authentication mode label_auth_source_plural: Authentication modes label_subproject_plural: Subprojects +label_and_its_subprojects: %s and its subprojects label_min_max_length: Min - Max length label_list: List label_date: Date diff --git a/lang/es.yml b/lang/es.yml index c6eef021..26009d71 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -621,3 +621,4 @@ setting_default_projects_public: Los proyectos nuevos son públicos por defecto error_scm_annotate: "No existe la entrada o no ha podido ser anotada" label_planning: Planificación text_subprojects_destroy_warning: 'Sus subprojectos: %s también se eliminarán' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/fi.yml b/lang/fi.yml index 1a614a16..908ef128 100644 --- a/lang/fi.yml +++ b/lang/fi.yml @@ -618,3 +618,4 @@ label_overall_activity: Kokonaishistoria error_scm_annotate: "Merkintää ei ole tai siihen ei voi lisätä selityksiä." label_planning: Suunnittelu text_subprojects_destroy_warning: 'Tämän alaprojekti(t): %s tullaan myös poistamaan.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/fr.yml b/lang/fr.yml index cbdda4f3..8827edd5 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -291,6 +291,7 @@ label_auth_source: Mode d'authentification label_auth_source_new: Nouveau mode d'authentification label_auth_source_plural: Modes d'authentification label_subproject_plural: Sous-projets +label_and_its_subprojects: %s et ses sous-projets label_min_max_length: Longueurs mini - maxi label_list: Liste label_date: Date diff --git a/lang/he.yml b/lang/he.yml index a611c8c3..71bc5e5b 100644 --- a/lang/he.yml +++ b/lang/he.yml @@ -618,3 +618,4 @@ setting_default_projects_public: פרויקטים חדשים הינם פומבי error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה." label_planning: תכנון text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/it.yml b/lang/it.yml index 3d1dea09..1771e1bd 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/ja.yml b/lang/ja.yml index 680d2983..84f27a2e 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -619,3 +619,4 @@ setting_default_projects_public: デフォルトで新しいプロジェクト error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。" label_planning: 計画 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/ko.yml b/lang/ko.yml index 4281f388..ee94c402 100644 --- a/lang/ko.yml +++ b/lang/ko.yml @@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/lt.yml b/lang/lt.yml index df7cd960..a5883518 100644 --- a/lang/lt.yml +++ b/lang/lt.yml @@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/nl.yml b/lang/nl.yml index e487a7a6..01755137 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/no.yml b/lang/no.yml index ccfa5c99..388e51dd 100644 --- a/lang/no.yml +++ b/lang/no.yml @@ -619,3 +619,4 @@ default_activity_development: Utvikling enumeration_issue_priorities: Sakssprioriteringer enumeration_doc_categories: Dokument-kategorier enumeration_activities: Aktiviteter (tidssporing) +label_and_its_subprojects: %s and its subprojects diff --git a/lang/pl.yml b/lang/pl.yml index cf101811..bc65b625 100644 --- a/lang/pl.yml +++ b/lang/pl.yml @@ -618,3 +618,4 @@ setting_default_projects_public: Nowe projekty są domyślnie publiczne error_scm_annotate: "Wpis nie istnieje lub nie można do niego dodawać adnotacji." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/pt-br.yml b/lang/pt-br.yml index 9facd8d1..b1f8d205 100644 --- a/lang/pt-br.yml +++ b/lang/pt-br.yml @@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/pt.yml b/lang/pt.yml index 6f51c8ed..9d058677 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/ro.yml b/lang/ro.yml index 59edfeb7..01127f5c 100644 --- a/lang/ro.yml +++ b/lang/ro.yml @@ -618,3 +618,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/ru.yml b/lang/ru.yml index f6900984..4f0a4bb7 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -622,3 +622,4 @@ setting_default_projects_public: Новые проекты являются пу error_scm_annotate: "Данные отсутствуют или не могут быть подписаны." label_planning: Планирование text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/sr.yml b/lang/sr.yml index d9869c36..263bd118 100644 --- a/lang/sr.yml +++ b/lang/sr.yml @@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/sv.yml b/lang/sv.yml index c0f69123..5b0c57ac 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -619,3 +619,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/th.yml b/lang/th.yml index 2c506c66..643ee01c 100644 --- a/lang/th.yml +++ b/lang/th.yml @@ -621,3 +621,4 @@ default_activity_development: พัฒนา enumeration_issue_priorities: ความสำคัญของปัญหา enumeration_doc_categories: ประเภทเอกสาร enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา) +label_and_its_subprojects: %s and its subprojects diff --git a/lang/uk.yml b/lang/uk.yml index a52a0560..e61fc5b3 100644 --- a/lang/uk.yml +++ b/lang/uk.yml @@ -620,3 +620,4 @@ setting_default_projects_public: New projects are public by default error_scm_annotate: "The entry does not exist or can not be annotated." label_planning: Planning text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' +label_and_its_subprojects: %s and its subprojects diff --git a/lang/zh-tw.yml b/lang/zh-tw.yml index d91c9708..b5244691 100644 --- a/lang/zh-tw.yml +++ b/lang/zh-tw.yml @@ -619,3 +619,4 @@ default_activity_development: 開發 enumeration_issue_priorities: 項目優先權 enumeration_doc_categories: 文件分類 enumeration_activities: 活動 (時間追蹤) +label_and_its_subprojects: %s and its subprojects diff --git a/lang/zh.yml b/lang/zh.yml index c8b80976..808dd1b3 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -619,3 +619,4 @@ default_activity_development: 开发 enumeration_issue_priorities: 问题优先级 enumeration_doc_categories: 文档类别 enumeration_activities: 活动(时间跟踪) +label_and_its_subprojects: %s and its subprojects diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index b02f0779..1c505620 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -37,6 +37,14 @@ class SearchControllerTest < Test::Unit::TestCase assert assigns(:results).include?(Changeset.find(101)) end + def test_search_project_and_subprojects + get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search' + assert_response :success + assert_template 'index' + assert assigns(:results).include?(Issue.find(1)) + assert assigns(:results).include?(Issue.find(5)) + end + def test_search_without_searchable_custom_fields CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}" -- 2.11.0